Communication Arduino et RS232

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

http://www.bwsensing.com/details_SEC295-232.html
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.

#include  <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // Rx, Tx

void setup() {
  Serial.begin(9600); // SEC295
  while (!Serial) {
    ; 
  }


  mySerial.begin(9600); 
} 

void loop() { 
  
   
  if (mySerial.available() > 0) {
    Serial.write(mySerial.read());     
  }
  
  if (Serial.available() > 0) {
    mySerial.write(Serial.read());       
  }
 
} 

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

  1. faire une boucle d’attente jusqu’à recevoir le 0x77
  2. lire l’octet suivant pour connaitre la taille de la trame
  3. lire le nombre d’octets (moins 1 car l’octet de taille fait parti de la trame) et les placer dans un tableau
  4. interpréter la trame
  5. 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.

Merci de m’avoir répondu, j’ai essayé le code sans aucun résultat, il faut dire aussi que je ne maitrise pas ce coté serial de arduino, pouvez vous m’aider d’avantage, car je ne sais pas écrire le terminateur faire la boucle etc… je suis un gros novice de ce coté la, par contre si j’ai un exemple je comprends vite…Le SEC295 fonctionne bien en 9600 baud

en faite il faut envoyer les commandes suivantes au SEC295:

Serial.write(0x77);
Serial.write(0x04);
Serial.write(0x00);
Serial.write(0x04);
Serial.write(0x08);

et on devrais recevoir des lignes comme ceci:
77 0D 00 84 10 26 80 00 33 65 03 13 71 66

Pouvez vous m’aider ?

Cordialement,
Fred