在50ms轮询任务中按键按下时间过长会持续计数,如何保证按键按下期间只计数一次
时间: 2024-10-15 08:27:44 浏览: 38
实现按键的长按、短按、双击.zip
5星 · 资源好评率100%
为了避免按键按下期间持续计数,你可以采用以下策略:
1. 使用轮询方式[^2]:
- 主循环中定期(比如每50ms)检查按键状态。
- 当按键从高电平变为低电平时(按下),开始计数器。
- 如果在下一次检查中按键仍然保持低电平,继续计数,直到按键恢复为高电平(释放)。这样,计数只会对每次完整的按下-释放周期生效。
具体实现可能如下(假设有一个名为`check_button()`的函数来读取按键状态):
```python
count = 0
last_pressed_time = 0
while True:
current_time = time.time()
if GPIO.input(kp_pin) == 0 and (current_time - last_pressed_time > debounce_duration): # 按键按下
count += 1
last_pressed_time = current_time
# 轮询其他任务...
```
在这个例子中,`debounce_duration`代表20-50ms的延时,如果按键在超过这个时间内未释放,计数器不会增加,从而避免了多次计数。
阅读全文