Go Down

Topic: Question a deux balles (Read 578 times) previous topic - next topic

syris

Bonsoir,

Lorsque que j'écris sur le port série 0x02b avec cette commande : Serial.print(0x02b , HEX);
Cela m'écrit 2B

Quand je fais une opération simple avec :

x = 0xff - 0x2b
Serial.print(x , HEX);

Sa m'écrit FFFFFFD4 au lieu de D4, comment faire pour empêcher sa ?


pl88

Pour la première question, tu veux écrire dans la liaison série "0x02b" tel quel ou bien le caractère ascii correspondant ("+") ?
Si tu veux écrire 0x02b utilise simplement les guillemets pour écrire la chaîne de caractères,
si c'est pour écrire '+', écrit directement la donnée en binaire avec Serial.write().

En revanche si c'est pour écrire le contenu d'une variable en hexadécimal comme pour la deuxième question, c'est effectivement Serial.print(x, HEX) qu'il faut utiliser.

À mon avis s'il écrit six 'F' devant c'est à cause du type de la variable, un hexadécimal sur deux caractères est un octet, essaie avec Serial.print((byte)x, HEX).

Sinon tu peux aller voir du côté des fonctions de formatage qui permettent une meilleur maîtrise de l'affichage des chaînes, mais qui sont plus complexes (et en plus je ne sais pas du tout comment elles se comportent avec l'arduino).

http://www.nongnu.org/avr-libc/user-manual/group__avr__stdio.html

Si tu utilises ces fonctions, je crois qu'il faudra plutôt passer par une chaine  temporaire en utilisant sprintf car elles ne permettent pas d'écrire directement dans la liaison série.

skywodd

Bonjour,

Sinon il suffit d'utiliser sprintf

Code: [Select]

char str[16] ;
int x = 0xff - 0x2b;
sprintf( str, "%08x", x ) ;
Serial.print(str);
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

syris

Oui, c'est pour écrire directement en hexa.

Merci pour vos réponses, j'essaie tout sa demain :)

Go Up