Arduino en série les données d'analyse des

Je suis en train d'écrire une application pour contrôler mon robot avec mon téléphone Android via Bluetooth, tout va bien, les données sont fait l'écho et vérifiés, mais je vais avoir quelques problèmes avec le protocole, plus précisément je veux que mon robot de roues de tourner lors de l'envoi d'une commande telle que s,10,100 ou s,-30,-10... (valeurs en pourcentage).

Mon problème est que lorsque je veux analyser ma vitesse de roue de commande sur mon Arduino, je dois analyser jusqu'à 4 séparé bytes à int, par exemple s,-100,-100 fait mon robot revenir en arrière à toute vitesse, mais comment dois-je analyser ce que je puisse appeler setSpeed(left, right); avec leftet right égal à -100?

Je sais que je peux analyser séparément chaque octet et les mettre ensemble pour obtenir un entier, mais ce n'est pas très élégant et il y a sans doute une meilleure solution à tout cela, déjà, malheureusement, je n'ai pas encore trouvé.

MODIFIER

Voici mon Arduino fonction pour l'analyse de mes commandes:

void parseCommand(char* command, int* returnValues)
{
  //parsing state machine
  byte i = 2, j = 0, sign = 0;
  int temp = 0;
  while(*(command + i) != '
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;
}
') { 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; }

Vous appelez cela de cette façon lors de l'analyse de quelque chose comme s,100,-100 (doit être \0 fin):

char serialData[16];
void loop()
{
  if(Serial.available() > 0)
  {
    Serial.readBytesUntil('
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));
}
}
', 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
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));
}
}
Serial.print('
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));
}
}
'); //clear serialData array memset(serialData, 0, sizeof(serialData)); } }

OriginalL'auteur Solenoid | 2012-08-28