Go Down

Topic: "Attaccare" una lettera ad un int (Read 652 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: La mappa degli utenti del Forum Arduino

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: La mappa degli utenti del Forum Arduino

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: La mappa degli utenti del Forum Arduino

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