这是我的第一篇文章,请耐心等待。让我从代码开始:
#include<stdio.h>
#include<string.h>
char inp[80], cmd[80];
char address[80],value[80];
boolean stringComplete = false;
void setup() {
Serial.begin(9600);
}
void loop() {
serialEvent();
if (stringComplete) {
parse_cmd(inp);
Serial.println(cmd);delay(1000);
Serial.println(address);delay(1000);
Serial.println(value);delay(1000);
memset(inp, 0, strlen(inp));
stringComplete = false;
}
}
void serialEvent() {
int i=0;
while (Serial.available()) {
char inChar = (char)Serial.read();
inp[i] = inChar;delay(250);
if (inChar == ';') {stringComplete = true;}
i++;
}
}
void parse_cmd(char *string){
int i=0,j=0;
for (i;i<strlen(string);i++) {
if (string[i]==';' || string[i]==' ') break;
else cmd[i] = string[i];
}
i++;j=0;
for (i;i<strlen(string);i++) {
if (string[i]==';' || string[i]==' ') break;
else address[j] = string[i];
}
i++;j=0;
for (i;i<strlen(string);i++) {
if (string[i]==';' || string[i]==' ') break;
else value[j] = string[i];
}
}
该程序采用三个字的字符串,并创建三个单独的字符数组。
问题在于,当我尝试打印三个char变量时,由于某些原因,其中只有一个打印好了。
说我输入:1234 5678 90; 我希望看到回报: 1234 5678 90
相反,我得到: 1234 8 0
仅打印第二个和第三个单词的最后一个字符。
这三个单词的代码完全相同,所以我无法理解为什么第二和第三次打印错误。
非常感谢,
MR
答案 0 :(得分:1)
在加载地址和值的缓冲区时,您没有递增j。
请注意,如果数据太多,输入例程(serialEvent)也不会停止,并且会超出缓冲区。