Changer les valeurs dans un tableau

Bonsoir tout le monde.

J'utilise deux cartes de programmation. La première est un Nano qui envoie par Bluetooth des valeurs de plusieurs potentiomètres et la deuxième est celle qui récupère ces informations pour les envoyer à des servos moteurs.

J'ai donc un problème avec le code de réception. En effet il reçois bien les valeurs des potentiomètres mais quand je les fais varier, le code de réception ne le prend pas en compte et reste sur les valeurs qu'il avait au moment d'ouvrir le moniteur série. Je suis donc obligé de fermer et d'ouvrir tout le temps le moniteur série pour qu'il se réinitialise. J'aimerais éviter de faire ça car dans l'usage de cette carte il n'y auras plus aucun ordinateurs à côté et que cette manipulation est très longue et ennuyeuse a faire. Auriez-vous une idée de comment je dois faire pour que mon tableau dans lequel je mets mes valeurs se réinitialise tout seul ?

Voici le code de réception que j'utilise:

/*carte Uno RECEPTRICE
 arduino v1.0.1
 
 donnees (trame) recus : <1;-3;16;2294;531>
 '<' = le debut de la trame
 '>' = la fin de la trame
 ';' = delimitateur des donnees
*/
 
//----------
String Trame;              // Chaine pour contenir la Trame entrante
boolean TrameRecu = false; // si la Trame a ete recue dans son integralité
int NbrData = 5;           // Nombre de donnes qui seront recus   exemple: 5 valeurs : 1;-3;16;2294;531
 
#include <Servo.h>
Servo Servopouce, ServoIndex, Servomajeur, Servoannulaire, Servoauriculaire;
 
 
void setup() {
  Servopouce.attach(9);
  ServoIndex.attach(7);
  Servomajeur.attach(5);
  Servoannulaire.attach(6);
  Servoauriculaire.attach(8);
  Serial.begin(9600); // Port Tx / Rx par défaut
}
//========================
void loop() {
  handleCommand();
 
 
 
} //FIN LOOP
//=======================
 
 
//************************* routines
void serialEvent(){
  while (Serial.available()) {           // si on recoit des donnes
    char incomingByte = (char)Serial.read();
    if (incomingByte == '>') { // Fin de la Trame
       TrameRecu = true;
       return;
    }else if (incomingByte == '<'){ // Debut d une nouvelle Trame
       Trame = "";
       TrameRecu = false;
       return;
    }else{
      Trame += incomingByte;
      return;
    }
  }
}
 
void handleCommand() {
  if (!TrameRecu) return; // aucune Trame a parser
  int data[NbrData];     // un maximum de 5 nombres entiers de donnees
  char cmd[Trame.length()+1];
  Trame.toCharArray(cmd, Trame.length()+1);
  char *token = strtok(cmd, ";");
 
  for (int i = 0; i < NbrData+1; i++) { // mettre datas dans tableau
    if (token) {
      data[i] = atoi(token);
      token = strtok(NULL, ";");
    }
 }
 {
   // Controlling the servo motor
  Servopouce.write(data[0]);
  ServoIndex.write(data[1]);
  Servomajeur.write(data[2]);
  Servoannulaire.write(data[3]);
  Servoauriculaire.write(data[4]);         
      }
//---Pour verif sur monitor de ce qui a ete recu
  Serial.print("data[0] = ");Serial.print(data[0]);Serial.print("   ");
  Serial.print("data[1] = ");Serial.print(data[1]);Serial.print("   ");
  Serial.print("data[2] = ");Serial.print(data[2]);Serial.print("   ");
  Serial.print("data[3] = ");Serial.print(data[3]);Serial.print("   ");
  Serial.print("data[4] = ");Serial.print(data[4]);Serial.print("   ");
  Serial.println();
 }
//************************Fin routines

Merci d'avances.

hello
j'ai du mal avec ta fonction "serial event"

pourquoi ces "return"
c'est une boucle while. tant que tu as des données, tu y restes et lorsque tu as lu toutes les données tu en sors.

là, si tu détectes un début de trame, tu vides la chaine tampon, tu baisses ton flag et tu sors par "return"
mais tu sors de quoi ?

j'ai cherché sur le net. dans un if, s'il y a un return, c'est pour retourner quelque chose
et en plus, tu es dans une boucle while

je pense que tes "return n'ont rien à faire là.
peux tu tester en les virant ?

Salut
Déjà merci de me répondre :slight_smile:

Et je viens de faire le test en en enlevant les "return", le programme reçois toujours les données mais le problème est toujours le même, les valeurs ne change pas. Ce sont toujours les valeurs que la carte reçois au moment de l'ouverture du moniteur série...