用Python实现通过三个按键控制一个灯的呼吸灯效果,上电后灯不亮,然后每个按键可以调节呼吸灯不同频率
时间: 2024-10-07 08:01:17 浏览: 45
路由器连接网线后指示灯不亮该怎么办?
在Python中,我们可以使用GPIO模块来模拟硬件操作,如控制LED灯,并结合定时器功能实现呼吸灯效果。首先确保安装了Raspberry Pi GPIO库,可以使用`pip install RPi.GPIO`命令安装。
以下是一个简单的示例,假设我们有三个按键对应于灯的不同状态(开、关、改变频率):
```python
import RPi.GPIO as GPIO
import time
# 设置GPIO模式
GPIO.setmode(GPIO.BCM)
# 定义灯和按键的引脚
led_pin = 18
button_up = 23
button_down = 24
button_toggle_freq = 25
# 初始化引脚
GPIO.setup(led_pin, GPIO.OUT)
GPIO.setup(button_up, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(button_down, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(button_toggle_freq, GPIO.IN, pull_up_down=GPIO.PUD_UP)
def blink_led(frequency):
led_state = True
while True:
GPIO.output(led_pin, led_state)
time.sleep(1 / frequency) # 控制灯的闪烁速度
led_state = not led_state
def handle_button(pin):
if GPIO.input(pin) == False: # 按键按下
print(f"Button {pin} pressed.")
# 根据按钮调整LED频率
global freq
if pin == button_toggle_freq:
freq += 1 # 频率递增
if freq > 5: # 防止无限增长
freq = 1
elif pin == button_up:
freq -= 1 # 频率减小
else: # 默认为打开或关闭灯
if freq > 0: # 如果正在闪烁,则停止
blink_led.cancel()
else: # 否则开始闪烁
blink_led(frequency=freq)
time.sleep(0.5) # 等待用户释放按钮
try:
# 启动闪烁函数,频率为0
blink_led(frequency=0)
# 监听按键事件
for button in [button_up, button_down, button_toggle_freq]:
GPIO.add_event_detect(button, GPIO.FALLING, callback=handle_button)
while True:
pass # 程序保持运行直到手动停止
except KeyboardInterrupt:
# 键盘中断时清理GPIO资源
GPIO.cleanup()
阅读全文