Serial port 当我从西门子TC35 GSM模块和Arduino读取SMS时,它被截断

Serial port 当我从西门子TC35 GSM模块和Arduino读取SMS时,它被截断,serial-port,sms,arduino,gsm,at-command,Serial Port,Sms,Arduino,Gsm,At Command,我正在使用Arduino+西门子TC35 GSM模块进行一些实验,我希望能够读取发送到此设备的短信 我已经按照这个方案组装了我的设备: 不同的是,我不使用蜂鸣器也不使用继电器,只使用LCD显示屏。你可以在这里看到全貌: 该方案应该能起作用,因为例如,我可以从Arduino向我的手机发送短信,但我在解析发送给Arduino的短信时遇到了一些问题 (注意:我将隐藏我的号码,用***替换一些号码) 我按如下方式初始化GSM模块: mySerial.print("AT+CMGF=1\r\n");

我正在使用Arduino+西门子TC35 GSM模块进行一些实验,我希望能够读取发送到此设备的短信

我已经按照这个方案组装了我的设备:

不同的是,我不使用蜂鸣器也不使用继电器,只使用LCD显示屏。你可以在这里看到全貌:

该方案应该能起作用,因为例如,我可以从Arduino向我的手机发送短信,但我在解析发送给Arduino的短信时遇到了一些问题

注意:我将隐藏我的号码,用***替换一些号码)

我按如下方式初始化GSM模块:

mySerial.print("AT+CMGF=1\r\n");
void readSMS()
{
  mySerial.print("AT+CMGR=6\r\n");
  delay(1000);

  char c;

  while (mySerial.available()>0){
     c = (char)mySerial.read(); 
     Serial.print(c);
  }
}
我试着这样读我的短信:

mySerial.print("AT+CMGF=1\r\n");
void readSMS()
{
  mySerial.print("AT+CMGR=6\r\n");
  delay(1000);

  char c;

  while (mySerial.available()>0){
     c = (char)mySerial.read(); 
     Serial.print(c);
  }
}
但我总是收到截短的短信。这是我在串行监视器中看到的:

AT+CMGF=1
OK
AT+CMGR=6
+CMGR: "REC READ","AT+CMGR=6
+CMGR: "REC READ","+4475********",,"14/04/25,21:08:AT+CMGR=6
+CMGR: "REC READ","+4475********",,"14/04/25,21:08:AT+CMGR=6
+CMGR: "REC READ","+4475********",,"14/04/25,21:08:AT+CMGR=6
+CMGR: "REC READ","+4475********",,"14/04/25,21:08:AT+CMGR=6
我的代码怎么了

非常感谢你的帮助

p、 s:还有其他应该可以工作的命令(例如删除所有SMS:AT+CMGD=1,4)根本不工作,并给我错误


p、 注:我希望我能使用Arduino可用的GSM.h库,但我想它只与最初的Arduino GSM屏蔽兼容。

我不是Arduino的任何方面的专家,所以在API中可能有更好的方法来实现这一点,但我会尝试类似的方法(延迟可能会降低)


另一个可能更好的选择是不加延迟地循环,直到你得到一个完整的答案。当然,这是假设您知道要查找什么(
OK
在这里似乎是这样,但我对Hayes规范太弱了,无法确定)

我不是Arduino专家,所以在API中可能有更好的方法来实现这一点,但我会尝试类似的方法(延迟可能会降低)


另一个可能更好的选择是不加延迟地循环,直到你得到一个完整的答案。当然,这假设您知道要查找什么(
OK
在这里似乎是这样,但我对Hayes规范的理解太弱,无法确定)

Arduino上的串行缓冲区非常小,CMGR的响应可能大到足以在您等待1秒时溢出缓冲区。请尝试在输入字符时读取它们。@JoachimIsaksson不是我在代码中已经在做的事情吗?我在串行接口上打印每个字符……假设Arduino有一个50个字符的缓冲区,对CMGR的响应是200个字符。如果没有握手,等待的第二个字符中的前50个字符将存储在串行缓冲区中,接下来的150个字符将被丢弃。一旦你醒来,只有前50个字符可以阅读,其余的就永远消失了。@JoachimIsaksson好的,我想我理解这个问题,但我的问题是:我如何阅读所有200个字符?非常感谢。p.s:我已经尝试过这个解决方案,但不起作用:(Arduino上的串行缓冲区非常小,当您等待1秒时,CMGR的响应可能大到足以使缓冲区溢出。请尝试在字符进入时读取它们。@JoachimIsaksson不是我在代码中已经在做的事情?我在串行接口上打印每个字符……假设Arduino有50个字符缓冲区,对CMGR的响应是200个字符。如果不握手,您等待的第二个缓冲区中的前50个字符将存储在串行缓冲区中,接下来的150个字符将被丢弃。一旦您醒来,只有前50个字符可用于读取,其余的将永远消失。@JoachimIsaksson好的,我想我理解这个问题嗯,但我的问题是:我如何读取所有200个字符?非常感谢。p.s:我尝试过这个解决方案,但它不起作用:(