使用 arduino 从 sd 卡解析 G-code
Parsing G-code with arduino from an sd card
如标题所示,我正在使用以下函数读取 SD 卡上存在的一些 g-code 文件的参数:
long parseParameters(String data, char* c){
int offset = data.indexOf(c);
int offset1 = data.lastIndexOf(" ", offset + 1);
return offset1 > 0 ? data.substring(offset + 1, offset + offset1 + 1).toInt() : data.substring(offset + 1).toInt();
}
void setup(){
Serial.begin(9600);
String q = "P3 S255"; // input
Serial.println(parseParameters(p, "S")); // output
}
void loop(){
}
直到今天,在试图读取字符串P3 S255中S的值时出现了一个小bug:
INPUT -> OUTPUT
P3 S255 -> 25 (wrong)
A20 P3 S255 -> 255 (Correct)
S255 -> 255 (Correct)
为什么?然而代码对我来说似乎是正确的..我哪里出错了?
在此先感谢大家..:)
这就是解释:
int offset = data.indexOf(c); //in your example S
"P3 S255";
^
offset = 3
然后您解析 offset1,但在偏移量之后采用另一个参数,即 " " - 但在来自 offset+1 的字符串中没有 " ",请参阅上面的索引所在的位置,所以它 returns -1 为什么?
myString.lastIndexOf(val, from) The index of val within the String, or -1 if not found. But we find something:
offset = 3;
offset1 = 2 ==> offset1 > 0 ==> data.substring(offset + 1, offset + offset1 + 1).toInt()
这导致
data.substring(3 + 1, 3 + 2 + 1).toInt()
"P3 S*4*25*6*5"; which results to 25 as you already know
to (optional): the index to end the substring before.
所以你把开头的 S 改为
是对的
data.substring(offset + 1, offset + 1 + offset1 + 1).toInt()
说明:您从偏移量 + 1 开始,这必须在 from 和 to 中相等(= 相同的计算起点)
如标题所示,我正在使用以下函数读取 SD 卡上存在的一些 g-code 文件的参数:
long parseParameters(String data, char* c){
int offset = data.indexOf(c);
int offset1 = data.lastIndexOf(" ", offset + 1);
return offset1 > 0 ? data.substring(offset + 1, offset + offset1 + 1).toInt() : data.substring(offset + 1).toInt();
}
void setup(){
Serial.begin(9600);
String q = "P3 S255"; // input
Serial.println(parseParameters(p, "S")); // output
}
void loop(){
}
直到今天,在试图读取字符串P3 S255中S的值时出现了一个小bug:
INPUT -> OUTPUT
P3 S255 -> 25 (wrong)
A20 P3 S255 -> 255 (Correct)
S255 -> 255 (Correct)
为什么?然而代码对我来说似乎是正确的..我哪里出错了?
在此先感谢大家..:)
这就是解释:
int offset = data.indexOf(c); //in your example S
"P3 S255";
^
offset = 3
然后您解析 offset1,但在偏移量之后采用另一个参数,即 " " - 但在来自 offset+1 的字符串中没有 " ",请参阅上面的索引所在的位置,所以它 returns -1 为什么?
myString.lastIndexOf(val, from) The index of val within the String, or -1 if not found. But we find something:
offset = 3;
offset1 = 2 ==> offset1 > 0 ==> data.substring(offset + 1, offset + offset1 + 1).toInt()
这导致
data.substring(3 + 1, 3 + 2 + 1).toInt()
"P3 S*4*25*6*5"; which results to 25 as you already know
to (optional): the index to end the substring before.
所以你把开头的 S 改为
是对的data.substring(offset + 1, offset + 1 + offset1 + 1).toInt()
说明:您从偏移量 + 1 开始,这必须在 from 和 to 中相等(= 相同的计算起点)