Arduino IDEを使用して、Serialから文字列を読み取ろうとしていますが、処理する必要があった後、いくつかのバイトを分離しています。文字列はで始まり、@
で終わります;
。データの「部分」は次のとおりです。
- バイト0:「@」
- バイト1から3:整数であるセクションA
- バイト3から6:整数であるセクションB
- バイト7から63:フロートであるセクションC
たとえば、文字列がある場合@002001100.0;
、セクションAは002、セクションBは001、セクションCは100.0です。
シリアルから文字列全体を読み取るために、私はやっています
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Ñ
したがって、また、私は何を間違えましたか?
前もって感謝します。