使用 Arduino IDE,我试图从 Serial 中读取一个字符串,在我需要处理它之后,从中分离一些字节。字符串以 开头@
和结尾;
。数据的“部分”是:
- 字节 0:“@”
- 字节 1 到 3:节 A,它是一个整数
- 字节 3 到 6:部分 B,它是一个整数
- 字节 7 到 63:C 部分,它是一个浮点数
例如,如果我有字符串@002001100.0;
,A 部分是 002,B 部分是 001,C 部分是 100.0。
为了从 Serial 中读取整个字符串,我正在做
char UsartBuffer = 0;
char UsartString[64];
boolean commandReceived = false;
if (Serial.available() >0) {
UsartBuffer = Serial.read();
UsartString[0] = UsartBuffer;
int counter = 0;
if (UsartBuffer == '@'){
while (UsartBuffer != ';'){
if (Serial.available() >0){
UsartBuffer = Serial.read();
if (UsartBuffer != ' '){
counter++;
UsartString[counter] = UsartBuffer;
}
}
}
UsartString[counter+1]='\0';
commandReceived = true;
}
}
为了分割我所做的字符串
char* getClass(String command){
char returnStr[3];
for (int i = 0; i < 3; i++){
returnStr[i] = command[i+1];
}
return returnStr;
}
char* getSubClass(String command){
char returnStr[3];
for (int i = 0; i < 3; i++){
returnStr[i] = command[i+4];
}
return returnStr;
}
char* getDataValue(String command){
char returnStr[56];
int lastByte = 56;
for (int i=0; i<56; i++){
if (command[i+7]==';'){
lastByte = i;
break;
}
}
for (int i = 0; i < lastByte; i++) returnStr[i] = command[i+7];
for (int i = lastByte; i < 56; i++) returnStr[i] = '/0';
return returnStr;
}
当我这样做的时候
if (commandReceived){
Serial.println(UsartString);
Serial.println(getClass(UsartString));
Serial.println(getSubClass(UsartString));
Serial.println(getDataValue(UsartString));
}
我得到了甚至奇怪的结果:
@002000107.0;
a
!œ
107.0Ñ
因此,同样,我做错了什么?
提前致谢。