Envoi messages sur CAN Bus

Bonjour,

Je suis nouveau dans la programmation arduino et je sèche.

Je vous explique.

Sur un CAN Bus, lorsque j'actionne un bouton d'un keypad, je souhaite envoyer un message sur 2 adresses différentes.

Par exemple, lorsque je presse sur "C", je voudrai envoyer :
msg0 = 0x0 sur l'ID 0x20
msg1 = 0x20 sur l’ID 0x21

J’ai réussi à déclarer ma 1ere adresse, mais comment je dois procéder pour déclarer la seconde, et surtout envoyer le bon message sur la bonne adresse ?

image

image

image

image

Quelqu'un peu m'aider ?

Merci !!!

Fred

:warning:
Post mis dans la mauvaise section, on parle anglais dans les forums généraux. ➜ déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans "Les bonnes pratiques du Forum Francophone”

parce que tu l'envoi seulement sur un ID et non pas deux id,

tu doit faire deux fois la meme chose pour deux id different..
Et puis evite d'apeler tes variable msg0,msg1 ect.... appel les data0, data1 ect...
c'est plus facile a comprendre
tu as un exemple ici:

can.send(0x55, 0, 0, 8, dta); // SEND TO ID:0X55
il envoi les donnée sur ID55,
donc tu doit appeler deux fois la commande send pour chaque ID.

Bonjour Hazerty565,

Merci pour ton aide.
J'ai modifié mon code en ajoutant la ligne pour mon second iD (et renommé mes Msg et Data comme tu me l'as suggéré).

Maintenant, j'arrive bien à envoyer les messages, mais ils sont dupliqués sur mes adresses.
Ce que je veux dire c'est que, dans le cas ou j'appuie sur ma touche (*), j'envoie le message sur les adresses 0x20 et 0x21, alors que je voudrai qu'il soit seulement sur 0x20.
De même. si j'appuie sur la touche (7) j'envoie le message sur les 2 id au lieu de l'envoyer seulement sur l'id 0x21.

image

J'ai un checksum et counter aussi
image

As-tu une idée sur la raison de ce problème, j'ai pas mal fouillé sur le net, mais je n'ai pas trouvé la solution pour le moment.

Fred

le raisonement can est bon, par contre au lieux des condition if, j'aurais vu une machine a etat sur le keypads...

Bonjour Hazerty565,

Merci pour cette info, je vais étudier cette solution et reviendrai donner des nouvelles.
Mais tu penses que ceci aurait un lien avec le fait que je ne sois pas capable de broadcaster les bons messages sur les bons iD ?

Bonne journée

Bonjour Hazerty565,

Je me suis remis au travail sur mon programme et réussi à le faire fonctionner sans problème (checksum, counter, etc...), mais sans utiliser la machine à état.

J'ai maintenant une autre fonction à faire qui pour moi, doit faire appel à un sous-programme.
Lorsque j'appuie sur la touche "G" de mon keypad, je veux effectuer un cycle test qui simulerait les fonctions réalisées lorsque j'appuie manuellement sur les autres boutons :

  • Simulation appui sur "1" --> Action associé à ce bouton
    PUIS après 1sec
  • Simulation appui sur "6" --> Action associé à ce bouton
    PUIS après 1sec
  • Simulation appui sur "C" --> Action associé à ce bouton
    etc...

Pour cela, j'ai créé un sous-programme void Sequence() { qui est démarré lorsque j'appuie sur "G".
J'ai simulé ça par des LEDS pour debugger mon fonctionnement (donc ma séquence devrait être : j'allume LED1, puis après 2sec je l'éteins et allume la LED2, puis après 2sec je l'éteins et allume la LED3, puis je sors de cette void pour re-rentrer dans void loop).

Mais ce qui se passe, c'est que lorsque j'appuie sur "1", je suppose bien rentrer dans mon void Sequence puisque ma LED1 s'allume.
Seulement, ma boucle s'arrête là et mes actions LED2 et LED3 ne se font pas (il faut que je rappuie à chaque fois sur "1" de mon keypad.

Est-ce que cela viendrait du fait qu'il faut que je mémorise l'appui sur la touche "1" (ETAT 1) pour rentrer dans void Sequence, puis que je retombe cette memorisation à ETAT 0) pour en ressortir et reprendre mon void Loop ?
Si oui, comment faire ca ?

Sinon, connais-tu une solution plus adaptée ?

Voici les bouts utiles de mon code :

image

image

Merci pour votre aide

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.