Ligne 18 : |
Ligne 18 : |
| | | |
| }} | | }} |
− | === Envoi d'une valeur décimale === | + | === Envoi d'une valeur décimale (double) === |
| | | |
| {{bloc-etroit|text=L'envoi d'une valeur décimale (ex: 5.67) se fait à l'aide du type '''Double''' qui est décomposé en 4 octets. | | {{bloc-etroit|text=L'envoi d'une valeur décimale (ex: 5.67) se fait à l'aide du type '''Double''' qui est décomposé en 4 octets. |
Ligne 24 : |
Ligne 24 : |
| La magie se passe dans la fonction Wire_SendDouble() qui utilise un struct de type union entre Double et byte[4]. Cela permet d'accéder à un même espace mémoire de feux façons différentes: | | La magie se passe dans la fonction Wire_SendDouble() qui utilise un struct de type union entre Double et byte[4]. Cela permet d'accéder à un même espace mémoire de feux façons différentes: |
| * une fois pour y stocker une valeur sous le type double, | | * une fois pour y stocker une valeur sous le type double, |
− | * Une autres fois pour lire chacun des bytes/octets (tronçons de 8 bits) ''composant ce type double'' stockant la valeur numérique. | + | * Une autres fois pour lire chacun des bytes/octets (tronçons de 8 bits) ''composant ce "type double"'' qui stock la valeur numérique. |
| | | |
− | Les 4 octets/bytes sont accessibles comme un tableau... ou un buffer. Il est donc possible d'utiliser directement la méthode Wire.write() pour envoyer le ''buffer'' sur le bus I2C. | + | Grâce à cette structure, il est possible de saucissonner un espace mémoire pour l'envoyer sur le bus I2C. |
| + | |
| + | Les 4 octets/bytes sont accessibles comme un tableau... ou un buffer. Il est donc possible d'utiliser directement la méthode Wire.write() pour envoyer le ''buffer'' de 4 octets de long sur le bus I2C. |
| }} | | }} |
− | | + | |
| + | === Envoi d'une valeur décimale (float) === |
| + | |
| + | Si votre valeur décimale est contenue dans un type '''float''', il faudra faire un transtypage du pointeur (casting) avant l'envoi sur le bus I2C. |
| + | |
| + | Le code d'envoi I2C pour un type '''double''' ressemble à ceci |
| + | <nowiki>double valeurDouble; |
| + | ... |
| + | valeurDouble = 123.57; |
| + | Wire_SendDouble( &valeurDouble );</nowiki> |
| + | |
| + | Le code d'envoi I2C pour un type '''float''' ressemble à ceci |
| + | <nowiki>float valeurFloat; |
| + | ... |
| + | valeurFloat = 312.777; |
| + | Wire_SendDouble( (double*)&valeurFloat );</nowiki> |
| + | |
| + | {{ambox|text=Sur un ATMEGA, les types double et float sont rigoureusement identiques (4 bytes).<br /> |
| + | Cette opération de transtypage ne sera pas valide sur un DUE ou un double fait 4 bytes et un float 8 bytes!}} |
| + | |
| + | === Code source === |
| | | |
| <nowiki>// === ArduPi-I2C ================================================ | | <nowiki>// === ArduPi-I2C ================================================ |