我正试图通过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);
}
}
答案 0 :(得分:0)
发送到串行设备的Hayes命令通常会生成响应。例如,当您发送该AT命令时,侦听该命令的设备将响应&#34; OK&#34;。此外,在某些情况下,您写入设备/串行线的内容可能会回显到您的输入处理程序(Serial.read())
因此,为了解决您的问题,您应该在发送最后一个AT命令后完全清除输入缓冲区。