【问题标题】:Arduino String checking SIM900A GSM module programming codeArduino String检查SIM900A GSM模块编程代码
【发布时间】: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


【解决方案1】:

尝试一下:

void loop()
{
    if (SIM900A.available()>0){
        String k=SIM900A.readString();

        Serial.println("*** RECEIVED SMS ***");
        if(k.indexOf("On") > -1 || k.indexOf("On") > -1 || k.indexOf("on") > -1){
            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 ***");
};

【讨论】:

  • 刚刚尝试了“indexof”命令...哇..它工作..非常感谢。
  • 告诉我一件事..我的代码有什么问题? ? ?为什么它没有按预期工作?
  • 我需要查看 print 命令的输出才能确定地回答这个问题,但我有一种感觉,这是因为你有一个空格或另一个 \r\n没有清除响应
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多