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.