每个函数都在Arduino重置时执行

时间:2016-07-07 13:19:03

标签: arduino-uno

我正试图通过Android手机控制我的家庭电视。我通过RF接收器从遥控器上取下了IR NEC码。之后我将Arduino与WiFi模块和IR发射器连接起来。这让我可以通过WiFi控制电视。但问题是,每当我重置Arduino板时,所有功能都会自动发生:开机,通道增加和减少,音量增加和减少以及关机。在那之后,我可以通过android mobile控制它,一切都会按预期工作。但是当我重置Arduino板时,这又重复了一遍。可能导致这种情况的原因是什么?

我在这里附上代码:

#include<IRremote.h>
IRsend ir;

 char serialA;


void setup() 
{
  pinMode(3, OUTPUT);

  Serial.begin(115200); //baud rate - make sure it matches that of the module you got:
  Serial.println("AT");
  delay(1000);
  Serial.println("AT+CIPMUX=1\r\n");
  delay(1000);
  Serial.println("AT+CIPSERVER=1,80\r\n");
  delay(1000);
}

void loop() 
{
 if (Serial.available()>0 )
  {
   serialA = Serial.read();
   IRREMOTE();
  }
}
void IRREMOTE()
{
  switch (serialA)
    {

        case 'A':         //Power
        ir.sendNEC(0x2FD48B7,32);
        delay(500);
        break;

        case 'B':         // AV/TV
        ir.sendNEC(0x2FD28D7,32);
        delay(500);
        break;

        case 'C':         // Mute
        ir.sendNEC(0x2FD08F7,32);
        delay(500);
        break;

        case 'D':      // CH+
        ir.sendNEC(0x2FDD827,32);
        delay(500);
        break;


         case 'E':    // CH-

         ir.sendNEC(0x2FDF807,32);
         delay(500);
         break;

         case 'F':    // Vol+

         ir.sendNEC(0x2FD58A7,32);
         delay(500);
         break;

          case 'G':    // Vol-

         ir.sendNEC(0x2FD7887,32);
         delay(500);
         break;

         case 'H':
         //  Menu
         ir.sendNEC(0x2FD30CF,32);
         delay(500);
         break;

         case 'I':     
         //  Alt
          ir.sendNEC(0x2FD708F,32);
          delay(500);
          break;

         case 'J':
         // Scan
         ir.sendNEC(0x2FDDA25,32);
         delay(500);
         break;
      }  
} 

#include<IRremote.h>
IRsend ir;

char serialA;

void setup() 
{
  pinMode(3, OUTPUT);

  Serial.begin(115200); //baud rate - make sure it matches that of the module you got:
  Serial.println("AT");
  delay(1000);
  Serial.println("AT+CIPMUX=1\r\n");
  delay(1000);
  Serial.println("AT+CIPSERVER=1,80\r\n");
  delay(1000);
}

void loop() 
{
 if (Serial.available()>0 )
  {
   serialA = Serial.read();
   IRREMOTE();
  }
}
void IRREMOTE()
{
       if(serialA == '$')     //Power
       {
        ir.sendNEC(0x2FD48B7,32);
       }

       else if(serialA == 'b')    // AV/TV
       {
        ir.sendNEC(0x2FD28D7,32);
       }

       else if(serialA == 'c')    // Mute
       {
        ir.sendNEC(0x2FD08F7,32);
       }

       else if(serialA == 'd')    // CH+
       {       
        ir.sendNEC(0x2FDD827,32);
       }

       else if(serialA == 'e')    // CH-
       {         
         ir.sendNEC(0x2FDF807,32);
       }

       else if(serialA == 'f')    // Vol+
       {
         ir.sendNEC(0x2FD58A7,32);
       }

       else if(serialA == 'g')    // Vol-
       { 
         ir.sendNEC(0x2FD7887,32);
       }

       else if(serialA == 'h')    //  Menu
       {
         ir.sendNEC(0x2FD30CF,32);
       }

       else if(serialA == 'i')    //  Alt
       {
          ir.sendNEC(0x2FD708F,32);
       }

       else if(serialA == 'j')    // Scan
       {
         ir.sendNEC(0x2FDDA25,32);
       }  
} 

1 个答案:

答案 0 :(得分:0)

发送到串行设备的Hayes命令通常会生成响应。例如,当您发送该AT命令时,侦听该命令的设备将响应&#34; OK&#34;。此外,在某些情况下,您写入设备/串行线的内容可能会回显到您的输入处理程序(Serial.read())

因此,为了解决您的问题,您应该在发送最后一个AT命令后完全清除输入缓冲区。