У меня есть 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) работает отлично без каких-либо ошибка и сим-карта разблокирована, и он может отправлять получать SMS и звонки, и т. д. c.