[英]How do I read the output of an AT command in Arduino?
如何在Arduino上捕获AT命令的输出?
我正在使用带有GSM屏蔽的Arduino Uno R3。 我有所有的AT命令( 它们可以在这里看到 ),如果我使用终端并获得输出,我可以输入它们。 但是,如何通过代码捕获结果输出? 下面的代码显示了我尝试过的但它不起作用。 特别是在我尝试获取模拟输入然后打印出结果的地方。
#include <SoftwareSerial.h>
SoftwareSerial mySerial(7, 8);
void setup()
{
char sensorValue[32] ="";
Serial.begin(9600);
mySerial.begin(9600);
Serial.println("\r");
//Wait for a second while the modem sends an "OK"
delay(1000);
//Because we want to send the SMS in text mode
Serial.println("AT+CMGF=1\r");
delay(1000);
mySerial.println("AT+CADC?"); //Query the analog input for data
Serial.println(Serial.available());
Serial.println(Serial.read()); //Print out result???
//Start accepting the text for the message
//to be sent to the number specified.
//Replace this number with the target mobile number.
Serial.println("AT+CMGS=\"+MSISDN\"\r");
delay(1000);
Serial.println("!"); //The text for the message
delay(1000);
Serial.write(26); //Equivalent to sending Ctrl+Z
}
void loop()
{
/*
if (mySerial.available())
Serial.write(mySerial.read());
if (Serial.available())
mySerial.write(Serial.read());
*/
}
我得到了输出:
AT + CMGF = 1
AT + CADC? 21 13
要么
AT + CMGF = 1
AT + CADC? 18 65
无论我的模拟源发生什么变化
请在此处查看 SoftwareSerial read
功能的文档。
当您从GSM设备串行接口读取时,您不能理所当然地认为缓冲区中有要读取的字节。
mySerial.read()
很可能返回-1
(没有可用的字节),因为Arduino在GSM设备可以在串行端口上提供某些内容之前运行该代码。
您应该使用available
功能( 此处的文档)来测试串行接口的传入字节。 您可以在超时时使用它以避免无限等待。
你可以尝试的最好的事情是编写一个单独的class
来处理串行操作(读,写,超时,延迟等)。
另外,我曾为Arduino写过一次GPRS驱动程序。 我的电源问题要求我在GPRS设备上安装一个额外的电容,并使用输出电流超过2A的电源。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.