Bonjour a tous
Je viens a vous car le bloque sur une étape, qui je pense sera simple pour vous j'espère que vous pourrez m'aider
Alors j'ai un Ecu moteur qui possède une voie série (RS232) qui a la possibilité d'envoyé en boucle des données moteur préalablement défini par le logiciel
j'arrive sans problème a les réceptionné avec un MAX3232 (convertisseur RS232 - TTL)
j'aimerais pouvoir automatiquement pouvoir identifié chaque trame et remplir un tableau avec ses valeurs, par la suite je vais convertir ses valeurs et les affiché sur un écran mais ça j'ai pas de problème j'arrive a le faire.
Mon blocage se situe bien sur le filtrage des info entrant pour rentré chaque valeur dans une case d'un tableau
la séquence de Transmission : Header byte, stream data, checksum byte
pour mon exemple j'ai simulé une séquence type avec une seule valeur, mais je peu en paramétré entre 1 et 19
Voici le programme :
#include <SoftwareSerial.h>
SoftwareSerial mySerial(0, 1); // RX, TX
void setup() {
mySerial.begin (9600);
}
void loop() {
mySerial.write (0x55);
mySerial.write (0xff);
mySerial.write (0xff);
}
0x55 étant le Header byte
0xff étant la valeur qui évoluera entre 0 et 255 en Hex
0xff étant le checksum byte, qui lui es dépendant de la ou des valeurs précédente
Loop
exemple de trame avec par plusieurs valeurs :
0x55 Header
0x ?? valeur 1 (entre 0-255 Hex)
0x ?? Valeur 2 (entre 0-255 Hex)
0x ?? Valeur 3 (entre 0-255 Hex)
0x ?? Checksum (dépendant des 3 valeurs précédente)
Loop
Merci d'avance a toutes Âme charitable qui pourra m'éclairé, j'ai essayer une nuit entière sans succès, ça remplissais les cases aléatoirement
Sinon un amis m'a conseillé aussi de faire un buffer, mais la je suis encore plus perdu j'ai fait quelque recherche mais j'ai rien compris
Voici mon programme foireux, enfin l'un de mes programme foireux :
je reçois sur la voie série simulé
je remplis les cases
et je renvoi les valeurs des cases sur le Serial monitor du pc
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
int trame[3]={10,20,30};
int n=0;
void setup() {
mySerial.begin(9600);
Serial.begin(9600);
}
void loop() {
if (mySerial.read() == 0x55) {
n = 0;
}
if (mySerial.available() && n<3) {
trame [n] = mySerial.read();
n++;
}
else {
Serial.print (" Case 1 : ");
Serial.println(trame[0]);
Serial.print (" Case 2 : ");
Serial.println(trame[1]);
Serial.print (" Case 3 : ");
Serial.println(trame[2]);
}