[Résolu] Diviser un nombre en deux octets

Bonjour,

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 ?

Cordialement,
Koala

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);

P'tin, là, c'est pas une boule de cristal qui faut... C'est une congrégation de voyants extralucides. :~

Emession :

unsigned int MaValeur=analogRead(A0);
byte Byte1 = MaValeur & 0b11111111;
byte Byte2=MaValeur>>8;

Réception :

// a supposer que les deux byte envoyés sont reçus sur Byte1 et Byte2
unsigned int Reception = Byte2<<8 | Byte2;

Je me suis peut être mal exprimé...

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.

EDIT : Merci B@tto !

En fait je coupais bien mais je recollais mal ^^

Sinon j'avais trouvé ça aussi qui peut dépanner :

map(analogRead(LIGHT_PIN), 0, 1023, 0, 255);

mais ce n'était pas exactement ce que je voulais faire.

Encore merci B@tto

Bonjour,

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 :wink: