protocole de communication série bi-directionnel entre carte

Ok, donc je pense faire ceci:

Tout étant constituer d'octets, j'aurais la trame suivante:
[Start][Lenght][Data 1][Data 2][Data x][End]

1 - Cas ou j'ai des PWM: 3 octets.
2 - Cas ou j'ai des tout ou rien: 2 octets.

Principe de fonctionnement:
Au démarrage, je force chaque sorties avec des valeurs de base leurs correspondant. Ici c'est des PWM allant de 1 à 2ms.
On entre dans la boucle et toute les 18 à 20ms on prends chaque sorties les une derrières les autres et on écrit ce que l'on a dans les variables.

A partir de là, si on reçois quelque-chose sur RX, on passe en mode interruption, et on y reste le temps qu'on a pas reçu toute la trame de start + lenght à stop.
0x01 = Start
0x02 = Stop
Attention, un timer est quand même mis par sécurité afin de ne pas rester sur une erreur d'envoie. Charger la variable avec la donnée reçu. Revenir de l'interruption vers le programme principal.

Je pense codé sur 3 octets mes pulses. En effet, un octet pour choisit la sortie, un octet pour le premier chiffre, et un octet pour se second chiffre. Ainsi: si j'ai 1ms, 0x01 0x03 0x01 0x01 0x00 0x02.
Si j'ai 1,5ms, 0x01 0x03 0x01 0x01 0x05 0x02.
Et pour 2 ms : 0x01 0x03 0x01 0x02 0x00 0x02.

Soit une trame (S)(L)(var1)(var2)(var3)(E) donc varPwm = var2,var3 donc sortie var1 (varPwm). Je me trompe peut-être en mettant ça. C'est très théorique pour le moment afin de m'organiser. Je veux dire par la que je cherche à comprendre comment je vais faire pour que ce soit compréhensible. En même temps, là, il n'y a plus qu moi qui comprends.. Non ?

Pour mes lights c'est beaucoup plus simple bien sûr. Grâce au lenght, je peux lui dire je te place tel sortie à 0x01 ou 0x00. En 2 octets... Comme ceci:
0x01 0x02 0x08 0x01 0x02 soit (S)(L)(var1)(var2)(E) avec var1 la pin light et var2 la valeur 1 ou 0. Ici on allume la light.

Un détail me chagrine! Avons nous besoin d'un caractère d'espacement entre chaque valeurs d'octet ? :cold_sweat:

Et bien maintenant, je vais commencer à travailler une une ébauche de tableau correspondant à mes varX, un tableau par sorties à affectés. En espérant que ce soit faisable sans trop de cafouillage.

AlienArea51, je suis bien d'accord avec toi. D'autant plus que c'est pas si compliqué mais que la représentation que l'on en fait dans le code peut-être difficile. Comme j'ai dit même si appeler Paul pour savoir ce que contient Jack est facile à comprendre, je ne sait toujours pas faire la différence entre * Paul et *. Peut être que si titi * fait référence à Jack alors titi * peut aussi faire référence à Martin, pour peu que l'on ai mis aussi un *Martin quelque-part. C'est ça qui me bloque et je pense ne pas être le seul :wink:

Merci en tout cas pour votre aide à la fois sur la compréhension de pointeur et pour ce qui est de ma communication entre carte. XD