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中的AT命令中提取数字_Arduino_At Command_Esp32 - Fatal编程技术网

从Arduino中的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命令,回答是

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
这正是我需要的



我想我现在需要的唯一帮助是代码清理建议。

你应该试着展示你的代码,并解释为什么它不工作或混乱,而不仅仅是让别人为你写代码。顺便说一句,你应该试着展示你的代码,并解释为什么它不工作或混乱,而不仅仅是要求别人为你写代码。顺便说一句,见