Explication d'une commande

Bonsoir,

Pourriez-vous m'aider à comprendre la commande ci-dessous ?

    sprintf(buf, "%d:%c%d.%d\337C",sensor,SignBit ? '-' : '+', Whole, Fract < 10 ? 0 : Fract);

Elle affiche la température d'un DS1820 sous cette forme :
0:+22.0C

Je ne sais pas comment supprimer le "0:".

Merci d'avance.

Chaque %xx dans la chaine correspond à une variable dans la liste
donc
%d -> sensor
: littéral
%c -> SignBit ? '-' : '+'
%d -> Whole
. littéral
%d -> Fract < 10 ? 0 : Fract
\337 -> littéral en octal signe °
C -> littéral lettre 'C'

donc pour enlever le 0: tu enlèves dans la chaine %d: et dans la liste tu enlèves sensor

A+ Teiva


www.Zartronic.fr : Votre source Arduino en France

Tout à fait, ce qui donne :

 sprintf(buf, "%c%d.%d\337C",SignBit ? '-' : '+', Whole, Fract < 10 ? 0 : Fract);

Merci pour vos explications => fonctionnement OK !
Pourriez-vous m'éclairer sur deux questions subsidiaires :

  1. L'affichage des dixièmes se fait sur deux digits :
    24.50 °C
    24.00 °C
    => Comment limiter à 1 digit ?

  2. Je n'arrive pas à afficher '°C"
    GLCD.Puts("°C");se traduit par "C".
    => Comment afficher le signe ° ?

Merci.

  1. A vu de nez :slight_smile:
    tu remplaces : Fract < 10 ? 0 : Fract
    par : Fract/10

  2. Le signe ° doit pas exister dans la lib GLCD, à toi de le dessiner et le rajouter, va voir dans le dossier de la lib, il y a des fichiers avec le "dessin" bit/pixel des caractères, tu peux le mettre à la place d'un que utilise pas, genre '$' .

A+ Teiva
www.Zartronic.fr : Votre source Arduino en France

Tu as eu le nez creux, c'est OK :wink:
Pour le "°", je vais aller jouer avec la lib.

Merci pour tout.