安要求编写代码:按键控制LED灯按下S7实现L7点亮后关灯;按下S6实现先奇数亮再偶数亮,循环3次后关灯;按下S5实现一个灯一个灯亮,循环3次后关灯;按下S4实现两个灯分别从两边向中间流动再从中间向两边流动,循环3次后关灯。五、实验代码
时间: 2024-12-18 19:20:23 浏览: 8
为了实现这个功能,我们可以使用Python的GPIO库,假设我们有一个树莓派(Raspberry Pi)作为控制器,并且已经设置了五个按键(S7-S4)连接到GPIO的输入引脚。下面是一个简单的示例代码,用于处理每个按键对应的功能:
```python
import RPi.GPIO as GPIO
import time
# 设置GPIO模式为BCM
GPIO.setmode(GPIO.BCM)
# 假设LED灯L7连接到了GPIO pin 18,其它LED灯按需配置
led_pins = [18] # 可能需要替换为实际的LED连接
# 定义按键对应的函数
def led_on(pin):
GPIO.output(pin, True)
print(f"LED {pin} turned on")
def led_off(pin):
GPIO.output(pin, False)
print(f"LED {pin} turned off")
def toggle_sequence(pin):
for i in range(3): # 循环三次
if i % 2 == 0:
led_on(pin)
else:
led_off(pin)
time.sleep(1) # 按钮操作间隔时间
def single_led_sequence(pin):
for i, led in enumerate(led_pins):
led_on(led)
time.sleep(1)
led_off(led)
if i != len(led_pins) - 1:
time.sleep(1) # 非最后一盏灯等待一秒再切换
def two_way_flow_sequence(pin):
directions = [(True, -1), (False, 1)] * 3 # 左右交替两次
for direction, step in directions:
for led in led_pins:
led_on(led) if direction else led_off(led)
time.sleep(step) # 向左或向右移动
time.sleep(1) # 每种方向间隔一秒
# 初始化GPIO并设置按键监听
GPIO.setup(S7, GPIO.IN, pull_up_down=GPIO.PUD_UP) # S7
GPIO.setup(S6, GPIO.IN, pull_up_down=GPIO.PUD_UP) # S6
GPIO.setup(S5, GPIO.IN, pull_up_down=GPIO.PUD_UP) # S5
GPIO.setup(S4, GPIO.IN, pull_up_down=GPIO.PUD_UP) # S4
try:
while True:
if not GPIO.input(S7): # 如果S7按下
led_on(led_pins[0])
time.sleep(1) # 等待后关闭
elif not GPIO.input(S6): # S6按下
toggle_sequence(led_pins[0])
elif not GPIO.input(S5): # S5按下
single_led_sequence(led_pins[0])
elif not GPIO.input(S4): # S4按下
two_way_flow_sequence(led_pins[0])
except KeyboardInterrupt:
GPIO.cleanup() # 关闭所有GPIO资源
阅读全文