超详细!Arduino与树莓派实现按键按一下亮再按一下灭代码及注意事项
以下是不同环境下实现按键按一下亮,再按一下灭功能的代码示例: Arduino环境 ```cpp // 定义按键引脚 const int buttonPin = 2; // 定义LED引脚 const int ledPin = 13; // 按键的上一次状态 int lastButtonState = HIGH; // 当前按键状态 int buttonState; // LED状态 bool ledOn = false; void setup() { // 将按键引脚设置为输入模式 pinMode(buttonPin, INPUT_PULLUP); // 将LED引脚设置为输出模式 pinMode(ledPin, OUTPUT); } void loop() { // 读取按键状态 buttonState = digitalRead(buttonPin); // 检测按键是否按下(从高电平变为低电平) if (lastButtonState == HIGH && buttonState == LOW) { // 切换LED状态 ledOn = !ledOn; // 根据LED状态设置LED引脚的电平 digitalWrite(ledPin, ledOn ? HIGH : LOW); // 延时一段时间,消除按键抖动 delay(50); } // 更新上一次按键状态 lastButtonState = buttonState; } ``` Python + Raspberry Pi GPIO ```python import RPi.GPIO as GPIO import time # 定义按键引脚 button_pin = 17 # 定义LED引脚 led_pin = 18 # LED状态 led_on = False # 设置GPIO模式为BCM编号 GPIO.setmode(GPIO.BCM) # 设置按键引脚为输入模式,启用上拉电阻 GPIO.setup(button_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP) # 设置LED引脚为输出模式 GPIO.setup(led_pin, GPIO.OUT) try: while True: # 读取按键状态 button_state = GPIO.input(button_pin) if button_state == GPIO.LOW: # 延时一段时间,消除按键抖动 time.sleep(0.05) if GPIO.input(button_pin) == GPIO.LOW: # 切换LED状态 led_on = not led_on # 根据LED状态设置LED引脚的电平 GPIO.output(led_pin, led_on) # 等待按键释放 while GPIO.input(button_pin) == GPIO.LOW: time.sleep(0.01) except KeyboardInterrupt: # 清理GPIO设置 GPIO.cleanup() ``` 额外需要注意的逻辑点 1. 按键抖动问题:按键在按下和释放时会产生抖动,可能导致多次触发,因此需要进行消抖处理,例如在检测到按键状态变化后延时一段时间。 2. 状态更新:要及时更新按键的上一次状态,以便正确检测按键的按下和释放事件。 3. 资源清理:在使用硬件资源(如GPIO引脚)时,要确保在程序结束时进行资源清理,避免影响后续使用。 ######[AI写代码神器 | 677点数解答 | 2025-06-04 10:38:39]
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)365
- 缜密逻辑,全新无名杀“风餐”技能代码精心打造与深度解析 (字节豆包 | 469点数解答 | 2025-04-05 11:37:06)260
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)336
- 用Arduino实现光敏电阻控制<500亮、按钮开启的流水灯,附硬件连接与代码示例 ( | 987点数解答 | 2024-06-20 20:05:00)195
- Java:设计圆类与圆柱体类并计算属性及体积表面积(字节豆包 | 470点数解答 | 2024-10-20 10:03:11)193
- Java 实现矩形与长方体类,精准计算底面积与体积(字节豆包 | 319点数解答 | 2024-10-20 10:25:46)301
- Java 实现矩形与长方体类,轻松计算底面积和体积(字节豆包 | 308点数解答 | 2024-10-20 10:34:27)283
- Java 实现矩形与长方体类:计算底面积与体积的完整代码示例(字节豆包 | 306点数解答 | 2024-10-20 18:34:47)281
- 可调周期方波信号发生器:0.5Hz - 1kHz 频率,4 按键精准设置(字节豆包 | 42点数解答 | 2024-10-21 11:00:16)372
- STC51单片机:3个按键完美操控8个LED流水灯,附电路与代码详解! (GPT | 2358点数解答 | 2024-12-15 21:04:55)272
- 云南 8 日摄影行程表 HTML 代码优化与逻辑注意点揭秘(字节豆包 | 217点数解答 | 2025-03-09 13:19:03)274
- Arduino 实现电位器、按键控制,模拟摆头风扇全功能详细方案! (字节豆包 | 638点数解答 | 2025-03-14 16:48:12)182