捕获字符串/字符数组中的串行输入

Capturing serial input in string/char array

本文关键字:输入 数组 字符串 字符      更新时间:2023-10-16

我在Arduino Uno和TC35 GSM模块之间有一个软件串行链接来发送和接收SMS消息。发送短信/呼叫不是问题,因为它是发送适当的AT命令到GSM模块的问题。然而,我希望使用AT+CMGR=1命令(检查存储在SIM卡上的第一条短信)来检查是否有任何消息并将消息存储为字符数组,以便我可以检查短信是否包含单词"开"或"关"来激活LED。

AT+CMGR=1命令应该返回以下内容:

AT+CMGR=1
+CMGR: "REC READ","+3538xxxxxxxx",,"13/03/23,14:29:37+00"
Set
OK

但是在下面的方法中,当我打印'data'时,它只是返回:

消息包含:

如能指点,不胜感激。

void checkMessage() {
    gsmSerial.println("AT+CMGR=1");    //Reads the first SMS
    for (x=0;x < 255;x++){            
        data[x]='';                        
    } 
    x=0;
    do{
        while(gsmSerial.available()==0);
        data[x]=gsmSerial.read();  
        x++;           
        if(data[x-1]==0x0D&&data[x-2]=='"'){
            x=0;
        }
    }while(!(data[x-1]=='K'&&data[x-2]=='O'));
    data[x-3]='';        //finish the string before the OK
    Serial.println("rnMessage contains: r");
    Serial.println(data);    //shows the message
    delay(1000);
}

我不明白你这样做的意图:

if(data[x-1]==0x0D&&data[x-2]=='"'){ 
    x=0; 
}

看起来你正在丢弃你的数据并读取新数据,每当你碰到一个包含引号和换行符的行。所以对兴趣命令的反应被丢弃了。我还没有测试过,但我认为如果你删除这三行就可以了。

我还应该提到[x-1][x-2]data缓冲区之前引用内存。这是一个非常糟糕的做法,可能会导致未定义的行为。只有当计算结果为正值时,才应该检查索引减去某个值。负的数组索引将在数组开始之前访问内存。