Bonjour a tous, je sollicite votre aide car je suis perdu, j'ai acheté un compas électronique SEC295 qui demande une connexion avec arduino en RS232.
J'ai acheté un convertisseur RS232 vers TTL pour arduino, je voudrais juste recuperer les données de ce capteur qui sont en HEX comme suit: 77 0D 00 84 10 26 80 00 33 65 03 13 71 66
Je voudrais recuperer les blocs 10 26 80 00 33 65 03 13 71 uniquement car les données sont ici
Pouvez vous m'aider car je n'y comprends rien........
Merci par avance
Fred
Il y a également le manuel dans le site pour plus d'informations sur les commandes
Ce code fonctionne car je vois les trames sur un logiciel terminal HTerm en envoyant les commandes HEX: 0x77, 0x04, 0x00, 0x04, 0x08.
Tu dois stocker les octets reçus dans un tableau de char de dimension suffisante.
Disons :
char message[60];
int indice = 0;
bool termine = false;
Ensuite tu reçois les octets et tu les stockes :
void loop() {
if (mySerial.available() > 0) message[indice] = mySerial.read();
if (message[indice] == '\n') { // fin de message
termine = true;
message[indice] = 0;
} else indice++;
if (indice == 60) {
termine = true;
Serial.println("Message trop long, augmenter la taille du tableau");
}
if (termine) { // traitement de la chaine reçue
// je suppose qu'elle se situe à la 12ème position
for (int i=12; i < indice; i++) Serial.print(message[i]);
indice = 0; // au cas où on reçoit un autre message ensuite
}
}
Bien sûr tu conserves le setup que tu as déjà.
Voilà, à tester et améliorer, je l'ai juste écrit à la volée...
Oui mais ça ne va pas marcher.
Le protocole n'a pas de terminateur.
La trame commence par 0x77, suivi par la taille de la trame.
Il faut donc
faire une boucle d'attente jusqu'à recevoir le 0x77
lire l'octet suivant pour connaitre la taille de la trame
lire le nombre d'octets (moins 1 car l'octet de taille fait parti de la trame) et les placer dans un tableau
interpréter la trame
revenir au pas 1
ATTENTION: il faut vérifier le checksum car 0x77 peut se trouver dans le corps de la trame et donc on peut très bien se désynchroniser si on est en mode émission continue.
Je pense que ce n'est pas une bonne idée de conserver 9600 bauds si tu utilises la trame complète. Cela va limiter le taux de rafraîchissement, te faire passer beaucoup de temps dans la fonction de lecture et te laisser peut de temps pour exploiter les données.