我正在使用Arduino GSM Shield从Android应用程序接收短信。并且该SMS的内容将控制LED。如果此SMS的内容未“关闭”,则LED将亮起,内容将在串行监视器中打印。但如果它“关闭”,LED将立即关闭。此外,LED将一直亮着,直到“关闭”消息到来。现在,我使用了软件示例中的代码。但我无法使用此SMS的内容来控制LED的状态。使用下面的代码,LED无法打开,内容无法显示在显示器上。我认为这是因为草图无法获得此短信的全部内容。谁能告诉我如何解决这个问题?感谢。
#include <GSM.h>
GSM gsmAccess;
GSM_SMS sms;
char senderNumber[20];
int led=13;
void setup()
{
Serial.begin(9600);
pinMode(led,OUTPUT);
digitalWrite(led,LOW);
while (!Serial) {
;
}
Serial.println("SMS Messages Receiver");
boolean notConnected = true;
while(notConnected)
{
if(gsmAccess.begin("6442")==GSM_READY)
notConnected = false;
else
{
Serial.println("Not connected");
delay(1000);
}
}
Serial.println("GSM initialized");
Serial.println("Waiting for messages");
}
void loop()
{
char c;
int val=0;
val=digitalRead(led);
if (val==HIGH){
digitalWrite(led,HIGH);
}
if (sms.available())
{
Serial.println("Message received from:");
sms.remoteNumber(senderNumber, 20);
Serial.println(senderNumber);
if(sms.peek()=='#')
{
Serial.println("Discarded SMS");
sms.flush();
}
while(c=sms.read())
if(c='off'){
digitalWrite(led,LOW);
}else{
digitalWrite(led,HIGH);
Serial.print(c);
}
Serial.println("\nEND OF MESSAGE");
sms.flush();
Serial.println("MESSAGE DELETED");
}
delay(1000);
}
答案 0 :(得分:1)
使用此行
if(c='off'){
您将c的值设置为“off”。我想你想要将c的值与字符串“off”进行比较。使用==而不是=。
另外,如果有人发送“OFF”而不是“off”......会发生什么?你也需要处理这个案子。在进行比较之前,请尝试将SMS转换为较低的字符。