Pages: [1]   Go Down
Author Topic: "Attaccare" una lettera ad un int  (Read 420 times)
0 Members and 1 Guest are viewing this topic.
Fidenza, Parma
Offline Offline
God Member
*****
Karma: 8
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: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
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

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Fidenza, Parma
Offline Offline
God Member
*****
Karma: 8
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)
Offline Offline
Brattain Member
*****
Karma: 234
Posts: 20221
+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: 8
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: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
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

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21624
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: