Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino在GSM sim900中发送sms错误_Sms_Arduino_Gsm_At Command - Fatal编程技术网

Arduino在GSM sim900中发送sms错误

Arduino在GSM sim900中发送sms错误,sms,arduino,gsm,at-command,Sms,Arduino,Gsm,At Command,我有一个Arduino Mega 2560和一个sim900 gsm模块。 我成功地与他们接口并编写了代码。它的工作,但我只能发送1条短信在一个时间在while循环。这意味着当我编写一个while循环时,使用while循环执行sendsms()5次。只发送一条短信。。它停止了 代码如下: #include <SoftwareSerial.h> #include <String.h> SoftwareSerial mySerial(52, 53); void setup(

我有一个Arduino Mega 2560和一个sim900 gsm模块。 我成功地与他们接口并编写了代码。它的工作,但我只能发送1条短信在一个时间在while循环。这意味着当我编写一个while循环时,使用while循环执行sendsms()5次。只发送一条短信。。它停止了

代码如下:

#include <SoftwareSerial.h>
#include <String.h>
SoftwareSerial mySerial(52, 53);

void setup()
{
     mySerial.begin(19200);      // the GPRS baud rate   
     Serial.begin(19200);    // the GPRS baud rate 
     delay(500);

}

int x = 0;

loop()
{

    while (x<5)
    {
     SendTextMessage();  
     x++;
     }  

 }


void SendTextMessage()
{
 mySerial.print("AT+CMGF=1\r");
 delay(100);
 mySerial.println("AT + CMGS = \"+94776511996\"");
 delay(100);
 mySerial.println("hey wow");
 delay(100);
 mySerial.println((char)26);
 delay(100);
 mySerial.println();
}
#包括
#包括
软件序列mySerial(52,53);
无效设置()
{
mySerial.begin(19200);//GPRS波特率
Serial.begin(19200);//GPRS波特率
延迟(500);
}
int x=0;
循环()
{

而(x您不能仅以100mS的延迟在SIM900上转储AT命令,并期望它工作。SIM900响应AT命令(通常为“OK”),您应该等待此响应,然后再发出下一个命令。只有在AT命令之间提供足够的延迟,以确保每个命令仅在SIM900有足够的时间响应前一个命令后发送,您才能忽略这些响应。为了快速验证这一点,我将添加延迟(10000)-10秒延迟-在sendTextMessage()函数的末尾。这将(可能)给SIM900足够的时间来完成SMS传输,然后再进行下一次传输。

确保仅为测试目的而尝试10秒延迟。对于真正的代码,您必须(如回答开头所述)读取并解析从调制解调器接收到的所有信息。绝不,绝不,绝不,绝不使用延迟等待任何AT命令响应。这就像踢挡在你面前的狗以让它们移动一样有用。是的,有时它可能确实有效,但在某个时候,你会为采用这种方法感到抱歉……了解有关如何使用此道具的更多提示呃,请参阅第一部分或与之相关的部分以了解更多详细信息。先生,实际上,我的程序在执行时应该发送10个数字的短信。同时,连接到arduino的rfid阅读器也应该工作。因此,如果我需要在每个短信命令后等待10秒,我的系统就没用了。hlovdal>你说的是什么意思“读取并解析从调制解调器接收到的所有内容。”请用代码示例进行解释。谢谢
void SendTextMessage(){
  mySerial.write("AT+CMGF=1\r\n");
  delay(1000); 
  mySerial.write("AT+CMGS=\"+94776511996\"\r\n");
  delay(1000);
  mySerial.write("Test");
  delay(1000);   
  mySerial.write((char)26);
  delay(2000);
  }