从Arduino中的AT命令中提取数字
所以我在做一个AT命令,回答是从Arduino中的AT命令中提取数字,arduino,at-command,esp32,Arduino,At Command,Esp32,所以我在做一个AT命令,回答是 AT+CGDCONT? +CGDCONT: 1,"IP","hologram","0.0.0.0",0,0,0,0 +CGDCONT: 13,"IP","hologram","0.0.0.0",0,0,0,0 +CGDCONT: 14,"IP","hologram","0.0.0.0",
AT+CGDCONT?
+CGDCONT: 1,"IP","hologram","0.0.0.0",0,0,0,0
+CGDCONT: 13,"IP","hologram","0.0.0.0",0,0,0,0
+CGDCONT: 14,"IP","hologram","0.0.0.0",0,0,0,0
OK
我需要得到写在“IP”前面的数字(在这个例子中,它们是1,13,14)。数字范围为1-24,行数也是如此
我正在读取命令的回复,并将其保存为字符串
字符串输入;
SerialAT.println(“AT+CGDCONT?”);
延迟(500);
if(SerialAT.available()){
input=SerialAT.readString();
Serial.println(输入);
}
现在我正在读取流回复并将其保存为字符串。然后在换行符(\n)处剪切字符串,并将片段存储在数组中。在那之后,我让它读取数组,一旦它碰到数字后面的“,”就停止。然后,它标识包含“:”的部分,该部分位于数字的正前方,并获取“:”的索引位置,并使用该部分获取左边的子字符串,即数字。
对于我的示例,它将第一行放入数组,如下所示
+CGDCONT: 1,"IP","hologram","0.0.0.0",0,0,0,0
+
+C
+CG
+CGD
+CGDC
+CGDCO
+CGDCON
+CGDCONT
+CGDCONT:
+CGDCONT:
+CGDCONT: 1
它将一次读取一个字符,直到第一个“,”被这样标识
+CGDCONT: 1,"IP","hologram","0.0.0.0",0,0,0,0
+
+C
+CG
+CGD
+CGDC
+CGDCO
+CGDCON
+CGDCONT
+CGDCONT:
+CGDCONT:
+CGDCONT: 1
然后将识别“:”的位置,对于本例,它将是9。所以数组中第9个位置之后的所有内容都是输出,即1
这是完美的工作方式,我甚至在+CGDCONT之前发送了乱码文本:因为有时,如果调制解调器没有时间完全处理命令,并且它总是正确地向我发送数字,那么它就会回复
我的代码是
字符串输入;
SerialAT.println(“AT+CGDCONT?”);
延迟(500);
if(SerialAT.available()){
input=SerialAT.readString();
Serial.println(输入);
}否则{
Serial.println(“未能获取PDP!”);
}
常数int numberOfPieces=10;
弦件[件数];
int计数器=0;
int lastIndex=0;
对于(int i=0;i)=0){
data=readString.substring((readString.indexOf(“:”)+1));
D=data.toInt();
序列号println(D);
PDP[PDPcounter]=D;
Serial.print(“PDPcounter=”);Serial.println(PDPcounter);
PDPcounter++;
readString=“”;
数据=”;
打破
}
readString=“”;
数据=”;
}
否则{
readString+=c;
}
}
}
最后,我尝试使用
for(int i=0;i<10;i++){
连载印刷(一);
序列号。打印(“-”);
Serial.println(PDP[i]);
}
我得到以下信息
0 - 1
1 - 13
2 - 14
3 - 0
4 - 0
5 - 0
6 - 0
7 - 0
8 - 0
9 - 0
这正是我需要的
我想我现在需要的唯一帮助是代码清理建议。你应该试着展示你的代码,并解释为什么它不工作或混乱,而不仅仅是让别人为你写代码。顺便说一句,你应该试着展示你的代码,并解释为什么它不工作或混乱,而不仅仅是要求别人为你写代码。顺便说一句,见