GSM/GPS проблема в обработке полученного SMS, чтобы отправить данные

ArGoNeOn

✩✩✩✩✩✩✩
15 Апр 2020
21
3
18
Оформи код соответствующим тэгом
Доброго времени суток, появилась такая проблема: с отправлением одного sms и последующим отправлением координат проблем нет совсем. Но если я хочу отправлять координаты несколько раз , то, переделав код, отправляю SMS на GSM и он начинает слать их постоянно, понимаю, что проблема в первом if, где проверяю порт GSM модуля, но не понимаю как решить её

#include <TinyGPS++.h>
#include <SoftwareSerial.h>
SoftwareSerial Serial1(2, 3); // RX, TX
SoftwareSerial mySerial(8, 9);
static const uint32_t GPSBaud = 9600;

// The TinyGPS++ object
TinyGPSPlus gps;
bool flag = true;
void setup()
{
Serial.begin(9600);
mySerial.begin(19200); // Инициализация последовательной связи с Arduino и SIM800L
Serial.println("Initializing..."); // Печать текста
delay(10000); // Пауза 1 с

mySerial.println("AT"); // Отправка команды AT
updateSerial();
mySerial.println("AT+CMGF=1"); // Выбирает формат SMS
updateSerial();
mySerial.println("AT+CNMI=1,2,0,0,0"); // Обработка вновь поступившие SMS
updateSerial();
}

void loop()
{
if(mySerial.available() > 0)
{
mySerial.end();
Serial1.begin(GPSBaud);
flag = true;
while(flag)
{
while (Serial1.available() > 0)
{
//Serial.println(Serial1.available());
if (gps.encode(Serial1.read()))
{
displayInfo();
mySerial.println("AT+CMGF=1"); // Выбирает формат SMS
updateSerial();
mySerial.println("AT+CNMI=1,2,0,0,0"); // Обработка вновь поступившие SMS
updateSerial();
flag = false;
break;
}
}
}
delay(5000);
}
updateSerial();
}

void displayInfo()
{
if (gps.location.isValid())
{
Serial1.end();
mySerial.begin(19200);
//Serial.println(1);
mySerial.println("AT+CMGF=1"); // Выбирает формат SMS
updateSerial();
mySerial.println("AT+CMGS=\"+7xxxxxxxxxx\""); // Отправка СМС на указанный номер
updateSerial();
mySerial.print("http://maps.yandex.ru/");
mySerial.print("?ll=");
mySerial.print(gps.location.lng(), 5);
mySerial.print(F(","));
mySerial.print(gps.location.lat(), 5);
mySerial.print("&pt=");
mySerial.print(gps.location.lng(), 5);
mySerial.print(F(","));
mySerial.print(gps.location.lat(), 5);
mySerial.print("&l=");
mySerial.print("map");
mySerial.print("&z=");
mySerial.print("18");
mySerial.print("\r\n");
updateSerial();
mySerial.write(26);
}
}

void updateSerial()
{
delay(500); // Пауза 500 мс
while (Serial.available())
{
mySerial.write(Serial.read()); // Переадресация с последовательного порта SIM800L на последовательный порт Arduino IDE
}
while(mySerial.available())
{
Serial.write(mySerial.read()); // Переадресация c Arduino IDE на последовательный порт SIM800L
}
}