Salut,
Je suppose que tu envoies tes commandes séries par le terminal de l'IDE? tu es sûr que tu travailles des deux côtés à la même vitesse? si oui, il n'y a pas de raison...
Pourquoi ne pas commencer simplement avec des caractères visibles? le '\n' n'est pas facilement débuggable.
Je te propose de remplacer '\n' par ';' , ça se fait beaucoup dans les commandes de ce type. la touche entrée ne renvoie pas toujours la même séquence selon le terminal utilisé, et un retour charriot complet comporte deux caractères. Tu peut prendre exemple sur le format HPGL dont les commandes sont du genre "XX123,456,75.2,9.95,0,1;", où XX sera toujours deux lettres majuscules (commande), suivi d'arguments séparés par une virgule (ici, 6 arguments : 123 , 456 , 75.2 , 9.95 , 0 et 1), et un caractère de terminaison (le fameux ';').
Autre possibilité, le protocole que j'utilise tout le temps, qui oublie les interminables chaînes de caractère, mais impossible à tester avec l'IDE car j'envoie des valeurs de 0 à 255. Cette méthode impose de définir un nombre fixe d'argument pour chaque commande, et ne protège pas d'une éventuelle éventuelle perte d'un octet :
void loop() {
byte n0, n1, n2, n3, n4;
while(!Serial.available()); // attend le prochain octet
n0 = Serial.read();
switch(n0){
case 48: // comande '0', pas d'argument : réinitialisation
setup();
break;
case 49: // Commande '1', 2 arguments
while(!Serial.available()); // attend le prochain octet
n1 = Serial.read();
while(!Serial.available()); // attend le prochain octet
n2 = Serial.read();
action1(n1, n2);
break;
case 50: // led 13 on/off, 1 argument
while(!Serial.available()); // attend le prochain octet
n1 = Serial.read();
if (n1 == 0) { // 0 : extinction led
digitalWrite(13, LOW);
} else {
digitalWrite(13, HIGH);
break;
}
}
Pour revenir à ton code, tu devrais essayer de déclarer ton " char command[50] = ""; " en global et non en local (c'est à dire en dehors de loop())... puis de mettre ton Serial.println(command); juste après ton command = in;
Pense à réinitialiser i dès la fin d'une commande pour revenir au début de ton tableau, car tu risques de déborder...