2016-07-07 100 views
-1

我想通过Android手机控制我的家庭电视。我通过射频接收器从远程遥控器获取IR NEC代码。之后,我将Arduino与WiFi模块和红外发射器连接起来。这让我可以通过WiFi控制我的电视。但事实是,每当我重置Arduino板时,所有功能都会自动发生:开机,频道增加和减少,音量增大和减小以及关机。然后,虽然,我可以通过Android手机控制它,一切都会按预期工作。但是,当我重置Arduino板时,这又重复了一遍。什么可能导致这个?每个函数执行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); 
     } 
} 
+0

你好朋友,我也试着清理输入缓冲区。但仍然面临同样的问题 –

回答

0

海斯命令被发送到串行设备通常产生响应。例如,当您发送该AT命令时,侦听该命令的设备将响应“OK”。此外,在某些情况下,您写入设备/串行线路可能会回传给您的输入处理程序(Serial.read())

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

+0

任何人都可以帮助我解决这个问题。 –

+0

请注意更新代码清除方法? – rasjani