【发布时间】:2018-01-25 14:12:31
【问题描述】:
我正在使用 SIM 900A 模块,我需要通过短信打开和关闭我的继电器。
基本上,我使用 GSM 短信代码来接收短信并将其存储到字符串变量中,然后检查我的字符串中是否存在“ON”或“On”或“on”。这不起作用,程序仅在 ELSE LOOP 上运行,它以某种方式在 IF 循环中转义它。
有人可以帮忙吗?
代码如下:
#include <SoftwareSerial.h>
SoftwareSerial SIM900A(9, 10);
void setup(){
Serial.begin(9600);
SIM900A.begin(9600);
pinMode(13,OUTPUT);
Serial.println("Program Started");
SIM900A.println("AT+CMGD=ALL");
SIM900A.println("AT+CNMI=2,2,0,0");
}
void loop(){
if (SIM900A.available()>0){
String k=SIM900A.readString();
Serial.println("*** RECEIVED SMS ***");
Serial.println(k);
int len=k.length();
Serial.println("the length is ");
Serial.println(len);
// Remove first 51 characters
Serial.println("After removing first 51 characters");
k.remove(0, 51);
Serial.println(k);
len = k.length();
Serial.println("the length is ");
Serial.println(len);
// Remove \r\n from tail
k.remove(len - 2, 2);Serial.println("After removing first r & n characters");
Serial.println("the length is ");
len = k.length();
Serial.println(len);
Serial.println(k);
String L=k;
Serial.println(L);
if((L.equals("ON"))||(L.equals("On"))||(L.equals("on"))){
Serial.println("now relay can be on");
digitalWrite(13,HIGH);delay(5000);
}
else{
digitalWrite(13,LOW);
Serial.println("Else loop executed");
};
Serial.println("*** END SMS ***");
};
}
【问题讨论】:
-
你能发布串行输出吗?很难说没有看到什么 Serial.println(L);没有
-
当程序没有收到短信时,首先在串口监视器上显示一些东西启动程序已启动***收到短信***AT+CMGD=ALL AT+CNMI=2,2,0, 0 ERROR 长度为 39 删除前 51 个字符后长度为 0 删除前 r & n 个字符后长度为 0 否则执行循环 *** END SMS ***
-
@A.ANoman 您能否选择一个更具描述性的文本,然后“调整格式语法语义的编码”。您基本上在每次编辑时都使用它,它并不能真正解释您进行更改的原因。避免随机加粗文本,因为它不是必需的。您所做的一些更改是有帮助的(更改图像的链接,一些代码格式),但我认为其他一些更改是破坏性的(这就是您经常获得拒绝投票的原因)。您编辑的大多数帖子都有更多可以修复的内容。您可以消除噪音(诸如“嗨/谢谢”之类的称呼)并使用拒绝/编辑作为应该更改的反馈)。
-
@FrankerZ 我会尽量听从你的建议。
标签: string if-statement module arduino gsm