J'ai un arduino mini pro sur lequel j'ai branché une LDR pour mesurer la lumière ambiante dans une pièce.
Quand j'affiche le résultat dans le terminal, je mesure 15 volets fermés et environ 630 volets ouvert en utilisant analogRead(LIGHT_PIN);
Maintenant j'ai relié mon arduino mini pro à un arduino mega 2560 en utilisant le bus CAN, j'essaye d'envoyer la valeur mesurée sous forme de trame standard composée de 8 octets qui sera affichée dans le terminal via le mega.
C'est là que ça coince, la valeur mesurée doit être sur 10 bits (je pense ) et je me mélange avec les masques si bien qu'a l'arrivé j'ai un résultat aléatoire...
Comment je dois m'y prendre pour couper la valeur mesurée par analogRead(LIGHT_PIN); en deux octets et ensuite, comment retrouver ma valeur sur le mega 2560 à partir des deux octets reçus ?
Je mesure une tension qui varie en fonction de la résistance de ton humour qui est ensuite convertie en valeur numérique sur 10 bits que je récupère via la fonction analogRead();
Sauf que, je ne peux envoyer 10 bits d'un coup dans une trame CAN car celle ci est composée de 8 octets (soit 8 x 8 bits).
Comment je peux faire pour stocker dans une variable les 2 premiers bits de mon résultat, puis dans une seconde variable, les 8 derniers bits du résultat retourné par analogRead();
J'ai essayé d'utiliser les masques pour sélectionner les 8 derniers bits puis de faire un décalage vers la droite pour selectionner les deux premiers bits mais je me perd.
Voir la solution de @Botto pour la manipulation de bit (bitwise en english).
Remarque importante quand même :
La valeur en sortie de AnalogRead() couvre 10 bits, OK, MAIS, la valeur est contenue dans une valeur 16 bits.
Toujours bien différencier taille logique et taille physique