如果我理解您的问题,您想先计算按下按钮的次数,然后输出 5 秒脉冲的次数。但是您的程序将如何确定您已经完成了一系列按钮按下,并希望它继续并生成脉冲序列?
这是一个可能的解决方案,但您必须确定它是否合适,如果不合适,则进行调整:
b0 = 0 ' initialise counting variable
w1 = 0 ' initialise timing variable (a 2-byte word)
countpresses:
pause 10 ' wait for 10 ms
w1 = w1 + 1 ' increment the timing variable
if pinC.4 = 0 then countpresses ' loop until button pressed
wait_release:
pause 10
w1 = w1 + 1 ' increment the timing variable
if pinC.4 = 1 then wait_release ' loop until button released
b0 = b0 + 1 ' increment the counter
if w1 < 200 then countpresses ' keep counting until 4 seconds have elapsed
if b0 > 0 then
for b1 = 1 to b0
high B.4
pause 5000 ' take B.4 high for 5 seconds
low B.4
pause 1000 ' and low for 1 second between pulses
next b1
endif
这将计算您在 4 秒内(200 x 20 毫秒)内按下按钮的次数,然后输出该脉冲数。暂停语句确保您不计算在按下或释放按钮后几毫秒内可能发生的开关触点的“弹跳”,第二个循环确保每次按下时只计算一次而不是递增只要您按住按钮,PICAXE 就能跑得最快!你没有说 B.4 在 5 秒的高脉冲之间应该变低多长时间 - 在上面的代码中我已经做了 1 秒。
如果这不是您想要的,那么不难弄清楚如何修改它,例如在您最后一次释放按钮后等待几秒钟。
我为计时计数器使用了一个单词变量,因此最长等待时间不限于 255 个计数 - 如果您愿意,您可以将代码中的 200 更改为最高 65535 的任何值(但您应该考虑一下如果它接近该值可能会发生什么)。如果您是 PICAXE 初学者,请阅读手册中有关字节和字变量如何相互关联的部分,这可能并不明显。