Aller au contenu


pierre92037

Inscrit(e) (le) 19 sept. 2012
Déconnecté Dernière activité sept. 19 2012 09:17
-----

Messages que j'ai postés

Dans le sujet : Arduino : Reception chaine de caractère entière

19 septembre 2012 - 09:20

L'instruction switch ne fonctionne qu'avec des entiers, donc tu ne peux pas utiliser de switch pour tester la valeur d'un string

tu peux par contre utiliser la fonction:

if (strcmp(command, "STOP")  == 0) {
    // whatever
}


Au sujet du protocole (commandes), si tu a peu de commandes, c'est plus simple de ne lire qu'un seul caractere pour identifier la commande: tu peux alors eviter de faire une boucle pour lire jusqu'au \n et tu pourais utiliser ton switch statement

Si vraiment tu tiens a utiliser une string, tu peux jeter un oeil sur la methode readBytesUntil de Serial qui te permet de lire jusqu'a ce qu'un caractere particulier soit lu.

Par exemple, tu pourrais ecrire qqchose comme:

char buffer[132];

    int len = Serial.readBytesUntil('$', buffer, sizeof(buffer));
Tu peux voir un exemple dans cette librairie:
https://github.com/p.../arduino-serial

Bon courage

Pierre

Bonsoir à tous,

Pour l'instant le code que j'ai fait foncionne bien mais comme ma variable commande est en String le switch case ne fonctionne plus ...
Que puis je faire ?

// Moteur A
int dir1PinA = 13;
int dir2PinA = 12;
int speedPinA = 10;

// Moteur B
int dir1PinB = 11;
int dir2PinB = 8;
int speedPinB = 9;

// Vitesse Moteur
int speed = 0;

String commande;
int i = 0;
int octetR = 0;


void setup() {
  Serial.begin(57600);

  pinMode(dir1PinA, OUTPUT);
  pinMode(dir2PinA, OUTPUT);
  pinMode(speedPinA, OUTPUT);
  pinMode(dir1PinB, OUTPUT);
  pinMode(dir2PinB, OUTPUT);
  pinMode(speedPinB, OUTPUT);

  speed = 80;
}

void loop() 
{
  while (Serial.available())   
  {
    octetR = Serial.read();
    i++;
     
    
    if (octetR ==10){
    Serial.println(commande);
    i=0;
    commande="";
    delay(50);
    break;
    } 
    else {
    
    commande=commande+char(octetR);
    }
    }
    
    /*
    switch (commande)
    {
    case 'L':
      analogWrite(speedPinA, speed);
      analogWrite(speedPinB, speed);
      digitalWrite(dir1PinA, LOW);
      digitalWrite(dir2PinA, HIGH);
      digitalWrite(dir1PinB, HIGH);
      digitalWrite(dir2PinB, LOW);
      break;
    case 'STOP':
      digitalWrite(dir1PinA, LOW);
      digitalWrite(dir2PinA, LOW);
      digitalWrite(dir1PinB, LOW);
      digitalWrite(dir2PinB, LOW);
      break;
    default:
      Serial.print("commande : ");
      Serial.print(commande);
      Serial.println(" non reconnue.");
      break;
    }
    */

}

Cordialement,
bypbop