【问题标题】:Receiving SMS by Arduino GSM Shield and control the LED with the content of this SMS?通过 Arduino GSM Shield 接收短信并使用此短信的内容控制 LED?
【发布时间】:2014-06-10 09:32:57
【问题描述】:

我正在使用 Arduino GSM Shield 从 Android 应用接收短信。这条短信的内容将控制一个LED。如果此 SMS 的内容不是“关闭”,则 LED 将亮起,并且内容将打印在串行监视器中。但如果它是“关闭”,LED 将立即关闭。此外,LED 将一直亮着,直到“关闭”消息到来。现在,我使用了软件示例中的代码。但是我不能用这条短信的内容来控制 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);
}

【问题讨论】:

    标签: sms arduino gsm led


    【解决方案1】:

    用这条线

     if(c='off'){
    

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

    另外,如果有人发送“关闭”而不是“关闭”会发生什么......?你也需要处理这种情况。在进行比较之前尝试将 SMS 转换为小字符。

    【讨论】:

    • 此外,c='OFF' 和 c=='OFF' 都没有多大意义,因为 c 被声明为 char 并且第一个操作尝试为 c 分配一个 'OFF' 字符串的地址,而第二个操作将其与相同的地址进行比较。
    猜你喜欢
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多