我有 Arduino UNO 和一个 Sim800L 模块,我知道读取串行的方式,就像这个问题一样,但是当我执行这个功能时:
String GetRegData()
{
Serial.println("Get nearby antenna info ...");
SIM800L.print("AT+CNETSCAN=1\r");
delay(1000);
SIM800L.print("AT+CNETSCAN\r");
delay(1000);
String buffer2;
while (SIM800L.available())
{
char c = SIM800L.read();
Serial.print(c);
buffer2.concat(c);
delay(10);
}
//Serial.println();
return buffer2;
}
输出是:
AT+CMGF=1
OK
AT+CNMI=2,2,0,0,0
OK
AT+CNETSCAN=1
OK
AT+CNETSCAN
Operator:"XXXX",MCC:XXX,MNC:XX,Rxlev:XX,Cellid:XX,Arfcn:XX,Lac:q5er32xlAair32xlAacrseifcca,Nvdc00
这个 AT 命令(AT+CNETSCAN)应该扫描所有附近的天线并在多行中打印一些信息(根据数据表),当我在这个设备(SIM800L)上手动执行这个命令时,我得到多行这样的:
Operator:"XXXX",MCC:XXX,MNC:XX,Rxlev:XX,Cellid:XX,Arfcn:XX,Lac:XX,Bsic:XX
Operator:"XXXX",MCC:XXX,MNC:XX,Rxlev:XX,Cellid:XX,Arfcn:XX,Lac:XX,Bsic:XX
Operator:"XXXX",MCC:XXX,MNC:XX,Rxlev:XX,Cellid:XX,Arfcn:XX,Lac:XX,Bsic:XX
OK
但是我不知道当我以编程方式执行此操作时会发生什么,它搞砸了,我尝试更改波特率并更改接收方法并逐字符读取字符,我确实在接收之间设置了延迟,我尝试这样做if
或for
代替while
但没运气。
我猜在接收每一行之间会有延迟,它会破坏串行可用性,但我不知道该怎么做!任何帮助,将不胜感激。
顺便说一下,我的设置功能:
void setup() {
SIM800L.begin(9600);
Serial.begin(9600);
delay(3000);
SIM800L.print("AT+CMGF=1\r");
delay(100);
SIM800L.print("AT+CNMI=2,2,0,0,0\r");
delay(100);
GetRegData();
delay(1000);
}
Ps:整个东西(Arduino + Sim800L)工作正常,没有错误,Simcard已解锁,它可以发送接收短信和电话等。