簡體   English   中英

捕獲字符串/字符數組中的串行輸入

[英]Capturing serial input in string/char array

我在Arduino Uno和TC35 GSM模塊之間有一個軟件串行鏈接,用於發送和接收SMS消息。 發送SMS /呼叫不是問題,因為這是向GSM模塊發送適當的AT命令的問題。 但是,我希望使用AT + CMGR = 1命令(檢查存儲在SIM卡中的第一個SMS)來檢查是否有任何消息並將消息存儲為char數組,以便隨后可以檢查SMS是否包含以下消息:單詞“開”或“關”以激活LED。

AT + CMGR = 1命令應返回以下內容:

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

OK

但是在下面的方法中,當我打印“數據”時,它只會返回:

消息包含:

任何指針將不勝感激。

void checkMessage() {

    gsmSerial.println("AT+CMGR=1");    //Reads the first SMS

    for (x=0;x < 255;x++){            
        data[x]='\0';                        
    } 
    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]='\0';        //finish the string before the OK

    Serial.println("\r\nMessage 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緩沖區之前引用內存。 這是非常糟糕的做法,可能會導致不確定的行為。 僅當該計算的結果為正值時,才應檢查索引減去某個值。 負數組索引在數組開始之前訪問內存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM