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