Programme pour calculer le checksum automatiquement

Bonjour à toutes et à tous,

J'ai en ma possession un journal led lumineux défilant CONRAD :
http://www.conrad.fr/ce/fr/product/590996/Journal-lumineux-a-LED-3-couleurs

J'ai un début de programme qui me permet d'afficher ce que je veux sur l'afficheur, tant que je connais le checksum c'est le suivant :

void setup () {
 
 Serial.begin(9600); //Début de la liaison série
 
}

void loop () {

  Serial.print("<ID00><L1><PA><FE><MA><WC><FE>");
  Serial.print("Archer 1 :24");
  Serial.print("56");
  Serial.println("<E>");
  delay(5000);
    }

J'aimerais maintenant concevoir un programme Arduino pour calculer le checksum automatiquement, si quelqu'un pouvait me mettre sur la piste ça m'aiderait vraiment énormément.

Merci d'avance.
Math

pas la peine d'ouvrir plusieurs posts pour ton checksum
http://forum.arduino.cc/index.php?topic=466798.msg3234952#msg3234952
autant continuer sur le premier

Si personne me répond je vais pas beaucoup avancer donc autant faire un nouveau post.

Cordialement

Bonjour,

Non, tu peux faire un petit up.
Bon comme c'est mon jour de bonté, je vais répondre.
Il faut que tu compose (presque) entièrement le message dans un buffer. Ensuite tu calcules le checksum dans ce buffer et tu le mets à la fin.

Pour faire ça, il faut que ru crées une fonction à laquelle tu passes le message à afficher et qui compose le message, calcule le checksum et envoie le message.

Ca donne quelquechose comme ça:

void setup () {

Serial.begin(9600); //Début de la liaison série

}

void loop () {
 display("Archer 1 :24");
 delay(5000);
}

// affiche un message sur l'afficheur
//
void display(const char *msg)
{
 char buf[100];
 strcpy(buf,"<ID00><L1><PA><FE><MA><WC><FE>");
 strcat(buf,msg);
 byte chk=0;
 char *p;
 for (p=buf+6; *p; p++) // calcule le checksum
   chk^=(byte) *p;
 sprintf(p,"%02X<E>",chk); // ajoute le checksum et le code de fin
 
 Serial.println(buf);
}

Bonjour Kamill, tu m'sauves tout simplement la vie, je te remercie infiniment, j'ai une dernière petite question si ça te dérange pas :

j'utilise un arduino uno avec un shield avec un port série connecté sur l'arduino, et à chaque fois que je téléverse sur arduino je dois retirer les deux cavaliers et les replacer après pour afficher sur le journal défilant, ma question est la suivante : existe il une commande pour intervertir les broches ?

J'espère être arrivé à me faire comprendre, merci d'avance :slight_smile:

Il faudrait voir si ton shield pour la liaison série peut utiliser d'autres pins.
Si c'est le cas tu dois pouvoir utiliser un SoftwareSerial à la place du serial hardware.

Oui mon shield pour la liaison série peut utiliser plusieurs pins, tu n'as pas un exemple pour le software serial?

#include <SoftwareSerial.h>

const int TXPIN=5;
const int RXPIN=6;
SoftwareSerial serialAff(RXPIN,TXPIN);  // port série pour l'afficheur

void setup () {
  serialAff.begin(9600);
}

void loop () {
  display("Archer 1 :24");
  delay(5000);
}

// affiche un message sur l'afficheur
//
void display(const char *msg)
{
  char buf[100];
  strcpy(buf, "<ID00><L1><PA><FE><MA><WC><FE>");
  strcat(buf, msg);
  byte chk = 0;
  char *p;
  for (p = buf + 6; *p; p++) // calcule le checksum
    chk ^= (byte) * p;
  sprintf(p, "%02X<E>", chk); // ajoute le checksum et le code de fin

  serialAff.println(buf);
}

Tu remplaces les valeurs TXPIN et RXPIN par les pins utilisées par ton shield.

Je te remercie beaucoup Kamill, j'suis content d'être ici pour ton jour de bonté ahah :stuck_out_tongue_closed_eyes:
Bonne journée, cordialement

Je suis content que tu sois content :slight_smile:

Non mais vraiment tu m'as beaucoup aidé merci infiniment ! :smiling_imp:

Kamil, merci, moi aussi ca m'a aidé, ca fait des heures que je cherche comment faire un checksum et hop, je tombe sur ta solution, je teste et ca marche...

Bonjour luckymaxou,

Le forum est fait pour ça.