Arduino:AT命令-使用serial.Read()读取串行输出的最后一行
Arduino: AT Commands - Read the last line of the serial output using Serial.read()
我不断传递AT命令以获得GSM信号强度我的代码复制了整个串行输出请告知如何读取最新的串行输出(最后一行)
找到下面的输出,其中我需要将最后一行(21,0)的输出分配给变量"信号"
我的输出:
AT
OK
AT+CREG?
+CREG: 0,1
ok
AT+CSQ
+CSQ: 21,0
我的代码:
byte gsmDriverPin[3] = {
3,4,5};
char signal[10];
char inChar;
int index;
char inData[200];
void setup()
{
//Init the driver pins for GSM function
for(int i = 0 ; i < 3; i++){
pinMode(gsmDriverPin[i],OUTPUT);
}
digitalWrite(5,HIGH);//Output GSM Timing
delay(1500);
digitalWrite(5,LOW);
digitalWrite(3,LOW);//Enable the GSM mode
digitalWrite(4,HIGH);//Disable the GPS mode
delay(2000);
Serial.begin(9600); //set the baud rate
delay(5000);//call ready
delay(5000);
delay(5000);
start_GSM();
}
void loop()
{
Signal_Strength();
Serial.println("AT+CMGF=1");
delay(1000);
Serial.println("AT+CMGS="1234567890"");//Change the receiver phone number
delay(1000);
Serial.println(signal);
delay(1000);
Serial.write(26);
}
void Signal_Strength(){
Serial.println("AT+CSQ");
delay(2000);
read_String();
strtok(inData, ",");
strcpy(signal,strtok(NULL, ","));
}
void read_String() {
index=0;
while(Serial.available() > 0) // Don't read unless
// there you know there is data
{
if(index < 199) // One less than the size of the array
{
inChar = Serial.read(); // Read a character
inData[index] = inChar; // Store it
index++; // Increment where to write next
inData[index] = ' '; // Null terminate the string
}
}
}
void start_GSM(){
//Configuracion GPRS Claro Argentina
Serial.println("AT");
delay(2000);
Serial.println("AT+CREG?");
delay(2000);
}
首先,您必须认真地将AT命令处理重做为
- 读取并分析调制解调器返回的每个响应行,直到得到最终结果代码。这适用于每一个命令行调用,没有任何例外。有关详细信息,请参阅此答案
- 永远不要在任何处理AT命令的代码中调用
delay
。有关中止下一个命令的风险的更多详细信息,请参阅此答案
在解决这些根本问题之前,你不能指望任何成功的行为。解析AT命令响应并没有那么复杂,请查看atinout的源代码作为示例。
相关文章:
- 我没有得到产量最低的产品.我该如何纠正它?最后一行是最低销售产品的输出.谢谢
- 按升序输出整数时,将最后一个整数放在新行上
- 为什么当 while 循环中的 if 条件变为 false 时,我的函数不输出最后一条语句?
- 最后推迟标准输出
- 带有文件结束函数的 while 循环重复输出文件中的最后一个数字两次
- Codelite构建仅呈现最后一行的输出
- 输入文件中的第一个字符是输出文件中的最后一个字符,反之亦然
- C++:为什么最后一个输出不是地址以及如何获取值 9
- 如何在C 中输出集合的最后一个元素
- C++ 输出在读取文本文件时跳过最后一个单词
- 为什么在浮点比较中,最后一个小数位数为5的浮点值能给出正确的输出,而在其他情况下却不是
- 最后一行欧普特两个组合输出问题?如果其他语句
- 排序为最后一个位置的元素提供错误的输出
- scanf() 为最后一行输入提供错误的输出
- 输出流中的第一个字符将替换为该流中被删除的最后一个字符.为什么会这样
- 输出字符串使用 C++ 覆盖 Linux 终端上的最后一个字符串
- 为什么 *(pa-1) 的输出是 'a' 的最后一个元素
- Arduino:AT命令-使用serial.Read()读取串行输出的最后一行
- 为什么我的重载<<运算符没有输出最后一行?
- 最后一个函数未显示正确的输出