通过Arduino GSM Shield接收短信并使用此短信内容控制LED?

时间:2014-06-10 09:32:57

标签: sms arduino gsm led

我正在使用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);
}

1 个答案:

答案 0 :(得分:1)

使用此行

 if(c='off'){

您将c的值设置为“off”。我想你想要将c的值与字符串“off”进行比较。使用==而不是=。

另外,如果有人发送“OFF”而不是“off”......会发生什么?你也需要处理这个案子。在进行比较之前,请尝试将SMS转换为较低的字符。