Arduino SIM800C 读取收到的短信内容问题

yo_ohoh 2018-03-17 05:46:26
模块和开发板都正常,手机向GSM发了一条短信,内容是”111“,但是就只是内容无法在串口监视器上显示出来,大一学生党求帮忙。
串口监视器显示情况:

下面是代码:
#include <SoftwareSerial.h>
#include <String.h>
SoftwareSerial mySerial(7, 8);
int lastSMSnumber = 0;
String Str="";
void setup()
{ mySerial.begin(19200); // the GPRS baud rate
Serial.begin(9600); // USB to Serial Monitor
Str.reserve(555); // at most 566 char
pinMode(13, OUTPUT);
mySerial.println("AT+CMGF=1");
delay(2000);
mySerial.println("AT+CSCS=\"GSM\"");
delay(2000);
mySerial.println("AT+CNMI=2,1");
delay(2000);
}

void loop()
{ while (mySerial.available())
{
char bb = (char)mySerial.read();
Str += bb;
delay(2);
}
int strLen = Str.length( );
if(strLen > 0) Serial.println(Str); // 送到 Serial Monitor
if(strLen > 0) {
if(Str.indexOf("+CMGD")!=-1) {
Str = ""; return; // ignore the +CMGD response
}
if(Str.indexOf("+CMTI")!=-1)
{
getSMS( );
}else{
processSMS( );
Str="";
}
}// strLen > 0
// .. 其他要做的事
} // loop(
void DialVoiceCall()
{ mySerial.println("AT+CMGR=1");
delay(100);
mySerial.println();
}
void processSMS( )
{ if( Str.indexOf("on")!=-1 )
{digitalWrite(13,HIGH);
deleteSMS(lastSMSnumber); delay(333);
}
if( Str.indexOf("off")!=-1 )
{
digitalWrite(13, LOW);
deleteSMS(lastSMSnumber); delay(222);
}
//...處理其他情況的短信
//...
} //processSMS(
void deleteSMS(int k)
{ Str = "";
mySerial.print("AT+CMGD=");
mySerial.println(k);
///mySerial.println(",0"); // AT+CMGD=38,0 表示刪除第38短信
delay(138);
}
void getSMS( ){
int cmaPos = Str.indexOf( "," ); // "," 的 position
int dd =cmaPos + 1;
String numSMS = Str.substring(dd);
lastSMSnumber = numSMS.toInt( ); // 短信編號
Str = ""; // 清除 Str 以收短信 numSMS
mySerial.print("AT+CMGR=");
mySerial.println(numSMS);
delay(88);
}//getSMS();
...全文
856 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧