Pages: [1]   Go Down
Author Topic: "Attaccare" una lettera ad un int  (Read 498 times)
0 Members and 1 Guest are viewing this topic.
Fidenza, Parma
Offline Offline
God Member
*****
Karma: 9
Posts: 783
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
   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:
    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!
« Last Edit: May 28, 2012, 04:27:21 pm by Guglio » Logged

ArduMAP: Mappa degli utenti che utilizzano Arduino.
http://www.guglio.net/ArduMAP

0
Offline Offline
Shannon Member
****
Karma: 132
Posts: 10502
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

perchè rinconvertendo ad intero (atoi) perdi di nuovo lo zero...
devi convertire il numero in stringa
Logged

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

Fidenza, Parma
Offline Offline
God Member
*****
Karma: 9
Posts: 783
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

D'oh, ho provato con questo codice:

Code:
    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)'
Logged

ArduMAP: Mappa degli utenti che utilizzano Arduino.
http://www.guglio.net/ArduMAP

BZ (I)
Online Online
Brattain Member
*****
Karma: 271
Posts: 21881
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Fidenza, Parma
Offline Offline
God Member
*****
Karma: 9
Posts: 783
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
    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 smiley-wink
Logged

ArduMAP: Mappa degli utenti che utilizzano Arduino.
http://www.guglio.net/ArduMAP

0
Offline Offline
Shannon Member
****
Karma: 132
Posts: 10502
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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%
Logged

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

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 333
Posts: 22995
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged


Pages: [1]   Go Up
Jump to: