arduino可以看到来电之前的Sim800L延迟/延迟

时间:2019-06-20 07:08:12

标签: arduino sim800

我使用SIM800L GSM模块检测来电,通常情况下工作正常。唯一的问题是,有时GSM模块告诉arduino某人正在呼叫之前,它最多需要8个RING(在RING出现在串行连接上之前)。看起来好像是GSM网络的拥塞,但是普通通话(我的意思是人与人之间的通话)没有这种问题。它经常发生-因此它不可能是网络/提供程序过载。还有其他人有这样的问题吗? ISP /提供商:波兰加上GSM

我没有输入任何代码,因为问题出在我认为的不同层

2 个答案:

答案 0 :(得分:0)

抱歉,我没有早些回答。我已经对其进行了测试,结果证明,在最低限度的代码中它可以正常工作!我的意思是,拨打号码后,我可以在串行监视器上立即看到“ RING”。因此,这不是硬件问题!

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

在我的真实代码中,我需要将呼叫号码与受信任列表进行比较。为此,我将所有受信任的号码都保存在sim卡的联系人列表中(通用前缀名为“ mytrusted”)。因此,在主循环中有if语句:

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

   }

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

添加此“如果条件”后,Arduino有时会在第1次通话后,有时是在第4次或第5次通话后识别受信任的号码。我不是在怀疑if语句本身,而是在前面的while循环中,将传入的字节组合成一个字符串。

任何想法,用这个简单的代码可以改善什么?

答案 1 :(得分:0)

看来,我找到了解决问题的方法。我只是每20秒向SIM800L发送一个简单的“ AT”命令(它以“ OK”回复)。我使用计时器来计算这20秒的间隔(而不是简单地延迟功能)

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

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

通过这种简单的修改,Arduino总是能够立即看到传入呼叫(在1声振铃之后)