红外控制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只亮一下,再摁一下没有变化,再摁又继续亮一下。望请各位大神指点,谢谢

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(1)
gada888
gada888
有没有报错,在arduino里
- 没有更多了 -