实现两个按键的初始化配置函数,并且实现两个按键的消抖处理,实现一个按键控制一个灯,按下点亮一个灯,一个按键松开,灯就熄灭 。
时间: 2024-09-20 22:13:15 浏览: 19
STM8-利用外部中断编写两个按键控制灯的亮灭
在许多嵌入式系统或者电子项目中,常常需要对按键进行初始化配置并处理消抖(debouncing)以防止误触发。以下是使用Python模拟一个简单例子,假设我们有一个Arduino-like环境,这里使用`RPi.GPIO`库来操作GPIO:
```python
import RPi.GPIO as GPIO
import time
# 定义按键和灯泡的GPIO编号
KEY_PIN = 4
LIGHT_PIN = 17
def setup_GPIO():
# 初始化GPIO模式为BCM
GPIO.setmode(GPIO.BCM)
# 设置按键为输入,灯泡为输出
GPIO.setup(KEY_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP) # 上拉电阻
GPIO.setup(LIGHT_PIN, GPIO.OUT)
def debounce_handler(channel):
def wrapper(func):
prev_state = None
def inner():
nonlocal prev_state
current_state = GPIO.input(channel)
if current_state != prev_state:
prev_state = current_state
if prev_state == False: # 按键按下
func()
return inner
return wrapper
@debounce_handler(KEY_PIN)
def on_key_press():
print("Key pressed, turning light on.")
GPIO.output(LIGHT_PIN, GPIO.LOW) # 灯亮
@debounce_handler(KEY_PIN)
def on_key_release():
print("Key released, turning light off.")
GPIO.output(LIGHT_PIN, GPIO.HIGH) # 灯灭
if __name__ == "__main__":
try:
setup_GPIO()
while True:
pass
except KeyboardInterrupt:
GPIO.cleanup() # 关闭GPIO资源
```
在这个示例中,我们首先设置了按键和灯泡的GPIO模式,并设置按键为上升沿触发。通过`debounce_handler`装饰器,我们在按键实际按下和释放后立即调用`on_key_press`和`on_key_release`函数,同时对按键状态的变化进行了延时处理(消抖),避免了频繁触发。
阅读全文