[英]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.