红外控制LED灯闪烁无法实现
2019-02-241.2万
AI 快速预览详细
本文讨论了使用Arduino控制红外接收器实现LED灯闪烁的问题。具体表现为按下按钮后LED只亮一次,再按无反应。文中详细分析了红外信号0X291C5DEF的处理逻辑,发现`blink1`函数调用方式有误,导致LED无法持续闪烁。解决方案是将`void blink1();`改为`blink1();`,并确保`ledState2`的状态切换逻辑正确。通过这些步骤,可以有效解决LED闪烁问题,节省调试时间。
|
#include <IRremote.h> int RECV_PIN = 12; // 红外线接收端 int ledPin1 = 11; // FRONT LIGHT int ledPin2 = 10; // REAR LIGHT int ledPin3 = 9; // LEFT LIGHT int ledPin4 = 8; // RIGHT LIGHT boolean ledState1 = LOW; // ledstate用来存储LED的状态 char ledState2 = 1; // ledstate用来存储LED2的状态 boolean ledState3 = LOW; // ledstate用来存储LED3的状态 IRrecv irrecv(RECV_PIN); decode_results results; void setup(){ Serial.begin(9600); irrecv.enableIRIn(); pinMode(ledPin1,OUTPUT); // 设置LED为输出状态 pinMode(ledPin2,OUTPUT); // 设置LED为输出状态 pinMode(ledPin3,OUTPUT); // 设置LED为输出状态 pinMode(ledPin4,OUTPUT); // 设置LED为输出状态 } void loop() { if (irrecv.decode(&results)) { Serial.println(results.value, HEX); irrecv.resume(); //一旦接收到电源键的代码, LED翻转状态,HIGH变LOW,或者LOW变HIGH if(results.value == 0X1AF7680B){ ledState1 = !ledState1; //取反 digitalWrite(ledPin1,ledState1); //改变LED相应状态 digitalWrite(ledPin2,ledState1); } if(results.value == 0X291C5DEF &ledState2 == 1){ void blink1(); ledState2 = 0; } else if(results.value == 0X291C5DEF &ledState2 == 0) { digitalWrite(ledPin3,LOW); ledState2 = 1; } } if(results.value == 0X969C0F8B){ ledState3 = !ledState3; //取反 blink2(); } } void blink1() { digitalWrite(ledPin3,HIGH); // led引脚置高电平 delay(500); // 延时1秒 digitalWrite(ledPin3,LOW); // led引脚变为低电平 delay(500); } 照着网上的程序修改后,其中标红色部分无法实现,想的是摁一下LED开始闪烁,再摁一下灭。现在是摁一下LED只亮一下,再摁一下没有变化,再摁又继续亮一下。望请各位大神指点,谢谢 |




