三个按键独立控制三个呼吸灯频率。代码
时间: 2024-10-06 07:04:13 浏览: 45
实现这样的功能通常需要使用硬件输入信号(如GPIO)与软件逻辑相结合。以下是一个简单的Python示例,假设我们使用Raspberry Pi或其他支持GPIO操作的平台,例如Arduino,并使用像`RPi.GPIO`库来控制GPIO。
```python
import RPi.GPIO as GPIO
# 定义GPIO编号
led_pins = [7, 8, 9] # 按键A、B、C对应灯1、灯2、灯3
breath_rates = [0.5, 1.0, 1.5] # 灯对应的默认频率
def setup():
GPIO.setmode(GPIO.BCM) # 使用BCM模式
for pin in led_pins:
GPIO.setup(pin, GPIO.OUT)
GPIO.output(pin, GPIO.LOW) # 灯初始状态关闭
def button_callback(channel):
global current_rate
if GPIO.input(channel): # 如果按键按下
current_rate = breath_rates[channel - 1] # 根据按键选择新的频率
toggle_led(channel)
def toggle_led(channel):
light = GPIO.PWM(led_pins[channel - 1], current_rate) # 创建PWM对象,周期为频率
light.start(50) # PWM duty cycle设置为50%,即半亮
while True:
light.ChangeDutyCycle(current_rate) # 控制灯亮度随频率变化
time.sleep(0.01) # 频率越高,每秒改变状态次数越多
try:
setup()
# 添加按钮回调
for i, pin in enumerate(led_pins):
GPIO.add_event_detect(pin, GPIO.RISING, callback=button_callback, bouncetime=200)
# 无限循环等待事件
while True:
pass
except KeyboardInterrupt:
GPIO.cleanup() # 关闭GPIO并释放资源
阅读全文