Go Down

Topic: "Attaccare" una lettera ad un int (Read 529 times) previous topic - next topic

Guglio

May 28, 2012, 11:21 pm Last Edit: May 28, 2012, 11:27 pm by Guglio Reason: 1
Ciao a tutti, sto impazzendo con questo codice.. Vorrei aggiungere uno "'0" prima dei minuti se sono minori di 10, in modo da avere  01 e non 1 sull' lcd...
Code: [Select]

   int minuti = rtc.getMinutes();
   if (minuti<10){
     char minuti2[5];
     sprintf(minuti2, "0%d", minuti);
     render_big_number(atoi(minuti2),9,0);
   }
   else{
     render_big_number(minuti,9,0);
   }


Tentativo 2:
Code: [Select]

    int minuti = rtc.getMinutes();
    String tmp = "";
    if (minuti<10){
      tmp = "0";
    }
    tmp += minuti;
    render_big_number(Str2int(tmp),9,0);

Non capisco, perchè mai non funziona?!
Compila senza problemi ma alla fine lo "0" non c'è, forse non riesce a capire se è minore di 10? Sto usando a libreria di Leo ma dubito influisca... a meno che non mi abbia lanciato qualche sortilegio  :smiley-mr-green:
Grazie mille!
ArduMAP: Mappa degli utenti che utilizzano Arduino.
http://www.guglio.net/ArduMAP

lesto

perchè rinconvertendo ad intero (atoi) perdi di nuovo lo zero...
devi convertire il numero in stringa
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Guglio

D'oh, ho provato con questo codice:

Code: [Select]

    minuti = rtc.getMinutes();
    String tmp = "";
    if (minuti<10){
      tmp = "0";
    }
    tmp += minuti;
    char buffer[3]; //max length is three units
    tmp.toCharArray(buffer, 3);
    render_big_number(buffer,9,0);



E mi da questo errore, però non riesco ad interpretarlo, Significa che può prendere come input solo int?

LCD:98: error: invalid conversion from 'char*' to 'int'
LCD:98: error: initializing argument 1 of 'void render_big_number(int, byte, byte)'
ArduMAP: Mappa degli utenti che utilizzano Arduino.
http://www.guglio.net/ArduMAP

uwefed

Devi lavorare con stringe o array di char oppure stampare subito lo zero sul display.
Ciao Uwe

Guglio

Code: [Select]

    if (minuti<10){
      render_big_number(0,9,0);//printo prima lo 0
      render_big_number(minuti,13,0);
    }else{
      render_big_number(minuti,9,0);
    }


Soluzione non tanto pulita ma funziona... intanto che ci sono sulla formattazione ho un piccolo dubbio, usando sprintf le lettere che metto dopo ai "%" sono a mia discrezione? Cioè una cosa come sprintf(var, "Ciao %ambarabbaciccicoco", var2); funziona ugualmente o c'è un ordine logico?

Grazie mille ;)
ArduMAP: Mappa degli utenti che utilizzano Arduino.
http://www.guglio.net/ArduMAP

lesto

san google, primo risultato cercando printf:
Quote
La seguente tabella mostra i possibili formati dei caratteri per le
  istruzioni printf/scanf:

   Formato (%)    Tipo            Risultato
  --------------------------------------------------------------------------
       c          char            singolo carattere
      i,d         int             numero decimale
       o          int             numero ottale
      x,X         int             numero esadecimale
                                  (notazione maiuscola o minuscola)
       u          int             intero senza segno
       s          char *          stampa una stringa terminata con \0
       f          double/float    formato -m.ddd...
      e,E           "             formato scientifico
              -1.23e002
      g,G           "             "e" o "f" ma piu' compatti
       %            -             stampa il carattere %
  --------------------------------------------------------------------------

  Tra il simbolo % ed il carattere di formato, e' possibile mettere:

     - (segno meno)         - giustificazione a sinistra;
     numero intero          - ampiezza del campo
     m.d                    - m=ampiezza del campo, d=precisione del numero
                              di cifre dopo il punto decimale, o numero di
                              caratteri da una stringa

  Cosi', ad esempio, potremo avere:

     printf("%-2.3f\n",17.23478);

  e l'output a video sara':

     17.235

  e:

     printf("VAT=17.5%%\n");

  dove l'output sara':

     VAT=17.5%
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

leo72


Devi lavorare con stringe o array di char oppure stampare subito lo zero sul display.
Ciao Uwe

Quoto.
E' il sistema che uso anch'io. printf & co. sono nati per l'output su terminale, non vanno per il sottile in quanto a consumo di risorse

Go Up