Arduino: AT Commands — прочитайте последнюю строку последовательного вывода, используя Serial.read ()

Я постоянно передаю AT команды, чтобы получить силу сигнала GSM
Мой код копирует весь последовательный вывод
Пожалуйста, посоветуйте, как прочитать последний последовательный выход (последняя строка)

найдите выход ниже, в котором мне нужно назначить выход из последней строки (21,0) переменной «сигнал»

Мой вывод:

AT

OK
AT+CREG?
+CREG: 0,1

ok
AT+CSQ

+CSQ: 21,0

Мой код:

byte gsmDriverPin[3] = {
3,4,5};

char signal[10];

char inChar;
int index;
char inData[200];void setup()
{
//Init the driver pins for GSM function
for(int i = 0 ; i < 3; i++){
pinMode(gsmDriverPin[i],OUTPUT);
}
digitalWrite(5,HIGH);//Output GSM Timing
delay(1500);
digitalWrite(5,LOW);
digitalWrite(3,LOW);//Enable the GSM mode
digitalWrite(4,HIGH);//Disable the GPS mode
delay(2000);
Serial.begin(9600); //set the baud rate
delay(5000);//call ready
delay(5000);
delay(5000);
start_GSM();

}

void loop()
{
Signal_Strength();
Serial.println("AT+CMGF=1");
delay(1000);
Serial.println("AT+CMGS=\"1234567890\"");//Change the receiver phone number
delay(1000);
Serial.println(signal);
delay(1000);
Serial.write(26);
}

void Signal_Strength(){
Serial.println("AT+CSQ");
delay(2000);
read_String();
strtok(inData, ",");
strcpy(signal,strtok(NULL, ","));

}

void read_String() {
index=0;

while(Serial.available() > 0) // Don't read unless
// there you know there is data
{
if(index < 199) // One less than the size of the array
{
inChar = Serial.read(); // Read a character
inData[index] = inChar; // Store it
index++; // Increment where to write next
inData[index] = '\0'; // Null terminate the string
}
}
}

void start_GSM(){
//Configuracion GPRS Claro Argentina
Serial.println("AT");
delay(2000);
Serial.println("AT+CREG?");
delay(2000);
}

0

Решение

Прежде всего, вы должны серьезно переделать обработку AT-команд в

  • Читать и разобрать каждая строка ответа возвращается от модема, пока вы не получите окончательный код результата. Это относится к каждому вызову командной строки, без исключений. Увидеть этот ответ Больше подробностей.
  • Никогда не звони delay в любом коде, который обрабатывает AT-команды. Увидеть этот ответ для получения более подробной информации о риске прерывания следующей команды.

Перед исправлением этих фундаментальных проблем нельзя ожидать какого-либо успешного поведения. Разбор ответов AT-команд не так уж и сложен, взгляните на исходный код atinout для примера.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector