我正在写一个应用程序与Android手机通过蓝牙来控制我的机器人,一切都顺利的话,数据是呼应和确认,但我有一些麻烦的协议,特别是我希望我的机器人的轮子转动时,我送一个命令,例如s,10,100
或s,-30,-10
...(百分比值)。
我的问题是,当我想在我的Arduino的解析我的车轮转速命令我必须从多达4个独立解析bytes
来int
,例如s,-100,-100
,使我的机器人全速后退去,但我该怎么办解析这让我可以调用setSpeed(left, right);
与left
和right
等于-100?
我知道我可以分别分析每一个字节,并把它们放在一起得到一个整数,但它不是很优雅,很可能有一个更好的解决这一切已经,不幸的是我还没有发现它。
编辑
下面是我的分析我的命令Arduino的功能:
void parseCommand(char* command, int* returnValues)
{
// parsing state machine
byte i = 2, j = 0, sign = 0;
int temp = 0;
while(*(command + i) != '\0')
{
switch(*(command + i))
{
case ',':
returnValues[j++] = sign?-temp:temp;
sign = 0;
temp = 0;
break;
case '-':
sign = 1;
break;
default:
temp = temp * 10 + *(command + i) - 48;
}
i++;
}
// set last return value
returnValues[j] = sign?-temp:temp;
}
解析类似,当你把它叫做这样s,100,-100
(必须是\0
终止):
char serialData[16];
void loop()
{
if(Serial.available() > 0)
{
Serial.readBytesUntil('\0', serialData, 15);
switch(serialData[0])
{
case 's':
int speed[2];
parseCommand(serialData, speed);
setSpeed(speed[0], speed[1]);
break;
}
// always echo
Serial.write(serialData);
// end of message is maked with a \0
Serial.print('\0');
// clear serialData array
memset(serialData, 0, sizeof(serialData));
}
}