Задержка / задержка Sim800L перед тем, как входящие вызовы будут видны arduino - PullRequest
0 голосов
/ 20 июня 2019

Я использую GSM-модуль SIM800L для обнаружения входящих вызовов, и в целом он работает нормально.Единственная проблема заключается в том, что иногда требуется до 8 звонков, прежде чем модуль GSM сообщает arduino, что кто-то звонит (до появления звонка в последовательном соединении).Это похоже на перегрузку сети GSM, но у меня нет таких проблем с обычными звонками (я имею в виду звонки между людьми).Это случается часто - поэтому это не может быть перегрузка сети / провайдера.У кого-нибудь еще была такая проблема?Интернет-провайдер / провайдер: Plus GSM в Польше

Я не ставлю код, потому что проблема в другом слое, я думаю

Ответы [ 2 ]

0 голосов
/ 01 июля 2019

Кажется, я нашел решение для своей проблемы. Я просто посылаю простую команду «AT» каждые 20 секунд на SIM800L (она отвечает «OK»). Я использую таймер для подсчета 20-секундного интервала (вместо простой функции задержки)

TimerObject *timer2 = new TimerObject(20000); //AT command interval 
....
timer2->setOnTimer(&SendATCMD);  
....

void SendATCMD () {
  mySerial.println("AT");
  timer2->Stop();
  timer2->Start();
 }

С этой простой модификацией Arduino всегда видит входящий вызов немедленно (после 1 звонка)

0 голосов
/ 24 июня 2019

извините, что я не ответил ранее. Я проверил это, и оказалось, что в минимальном коде это работало хорошо! Я имею в виду, я могу видеть «RING» на последовательном мониторе сразу после набора номера. Так что это не проблема с оборудованием!

//bare minimum code:
void loop() {
  if(serialSIM800.available()){
    Serial.write(serialSIM800.read());
  }
  if(Serial.available()){    
    serialSIM800.write(Serial.read());
  }
}

В моем реальном коде мне нужно сравнить вызывающий номер со списком доверенных. Для этого я сохранил все доверенные номера в списке контактов на сим-карте (с общим префиксом «mytrusted»). Итак, в основном цикле есть оператор if:

   while(mySerial.available()){
     incomingByte = mySerial.read();
     inputString += incomingByte;

   }

   if (inputString.indexOf("mytrusted") > 0){
    isTrusted = 1;
    Serial.println("A TRUSTED NUMBER IS CALLING");
   }

После добавления этого условия «if» Arduino иногда распознает доверенный номер после 1-го вызова, а иногда после 4-го или 5-го. Я не подозреваю сам оператор if, а предыдущий цикл while, в котором входящие байты объединяются в одну строку.

Есть идеи, что можно улучшить в этом простом коде?

...