Aiuto Composizione numeri a piu' cifre con keypad.

Buonasera a tutti scrivo qui per chiedere aiuto a riguardo un progetto che sto facendo.

Premetto che sono giorni e giorni che cerco online e non sono riuscito a trovare una risposta al primo mio problema.

Sto realizzando un progetto che mi permetta di visualizzare su un display a matrice, dei numeri a singola o doppia cifra che io vado a digitare in un keypad.

Il programma che vorrei fare dovrebbe funzionare cosi:

Quando io premo un numero lui lo associa ad una variabile (key1) e contemporaneamente apre una finestra temporale che va a controllare se viene digitato un altro numero (key2). Se non viene digitato niente, lui mostra sul display solo una cifra mentre se vengono digitati 2 numeri li unisce e li mostra entrambi sul display.

Su YouTube ho trovato un video di Paolo Aliverti che mostrava esattamente quello che mi serviva solo che lui non usava un keypad ma dei semplici pulsanti.
Del video ho usato la struttura di creare una finestra temporale per vedere se vengono premuti più pulsanti.

Ci tengo a precisare che a scuola non abbiamo studiato Arduino, quindi essendo autodidatta mi mancano le basi della programmazione e mi scuso in anticipo se magari il mio è un problema stupido di base della programmazione. Inoltre nel programma manca il print sul display matrix perchè finquando non finisco il programma lavoro sulla seriale.

Ora il mio "primo" problema è che non riesco ad ottenere la 2 cifra che viene letta dalla finestra temporale. Cioè lui mi legge e mi stampa la prima cifra (key1) mentre la seconda (key2) rimane vuota. Ho provato a controllare se la finestra si aprisse correttamente facendo stampare su seriale un numero fisso e lo stampa correttamente.

Grazie in anticipo a tutti.

Keypad_Display_Matrix.ino (2.74 KB)

Buonasera,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. :wink:

Buonasera, errore mio non avevo letto tutto il regolamento procedo subito a presentarmi.
Grazie Mille.

Ciao, non credo che ti serva tutta quella complessità, la getKey dovrebbe già fare quello che vuoi tu, ovvero restituirti il tasto premuto.
Hai due possibili modi di procedere, il primo è quello di leggere i vari tasti premuti, infilarli in un array e quando l'utente ha finito di inserire i valori analizzare l'array e calcolare il valore inserito, ovvero primo valore+secondo_valore10+terzo_valore100 ecc.
Oppure se non vuoi dare la possibilità di correggere eventuali errori puoi anche usare una sola variabile e sommare i vari valori inseriti moltiplicando per 10,100,1000 in base a quanti ne sono già stati inseriti.
Io preferirei la prima strada.
Fossi in te partirei riscrivendo da zero limitandomi a leggere il tasto premuto e a scriverlo sulla seriale, quando tutto funziona (ovvero sulla serile vedi una sola volta il tasto premuto non ripetuto finché lo tieni premuto ecc.) fatto quello introdurrei la gestione con l'array, nel tuo caso può essere un array di byte visto che hai un tastierino numerico

Grazie alla fine ho usato un' array.
Però il problema rimane, il getkey mi fa tutto e mi ottiene i numeri, il problema è che rispetto un display lcd il display matrix ogni volta che gli do un valore lo sostituisce e non lo mette uno di fianco l' altro, per questo mi serviva ottenere e memorizzare le due cifre premute singolarmente per poi unirle e mostrarle una volta sola sul display. Ora riscrivendo da capo il programma sono riuscito a tenermi da parte i due numero in un array oppure solo uno se non si vogliono visualizzare 2 poi premendo l' asterisco visualizzo quello che ho memorizzato nell' array. Il problema ora è che i caratteri che poi vado ad unire per visualizzarli sul display me li mostra in ASCII (perchè la libreria legge i caratteri in ASCII) e a me essendo numeri mi servirebbero in decimale. Come posso fare per avere i numeri in decimale?

Il programma per ora è questo:

#include <Key.h>
#include <Keypad.h>
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>

#define RIGHE 4
#define COLONNE 3
#define MAX_DEVICES 2
#define CLK_PIN   13
#define DATA_PIN  11
#define CS_PIN    10



char tasti [RIGHE][COLONNE]  // ARRAY PER IMPOSTARE SU ARDUINO LA STRUTTURA DELLA TASTIERA
{
  {'1', '2', '3'},
  {'4', '5', '6'},
  {'7', '8', '9'},
  {'*', '0', '#'}
};

byte pinRighe [RIGHE] = {2, 3, 4, 5}; // ASSEGNAZIONE PIN DOVE SONO COLLEGATI I CAVI DELLE RIGHE.
byte pinColonne [COLONNE] = {6, 7, 8}; // ASSEGNAZIONE PIN DOVE SONO COLLEGATI I CAVI DELLE COLONNE.


Keypad kpd = Keypad (makeKeymap(tasti), pinRighe, pinColonne, RIGHE, COLONNE); // MAPPATURA DELLA TASTIERA, ASSEGNAZIONE DEI PIN DOVE SONO COLLEGATE RIGHE E COLONNE, DEFINIZIONE NUMERO RIGHE E COLONNE.
MD_Parola display = MD_Parola(CS_PIN, MAX_DEVICES);

char key;
char numero[2];
bool lettura_key1;
bool lettura_key2;



void setup() {

  Serial.begin(9600);                                          // INIZIALIZZO LA COMUNICAZIONE SERIALE.
  display.begin();                                             // INIZIALIZZO IL DISPLAY A MATRICE.
  display.print("00");                                         // VISUALIZZO SUL DISPLAY INIZIALMENTE I NUMERI 00.
  lettura_key1 = 1;
  lettura_key2 = 0;


}


void loop() {

  key = kpd.getKey();                             

  if (key && lettura_key1 == 1) {                
    numero[0] = key;                              
    Serial.print("IL PRIMO NUMERO E': ");
    Serial.println(numero[0]);                    
    lettura_key2 = 1;                             
    lettura_key1 = 0;                            
  }

  key = kpd.getKey();                            


  if (key != '*' && key && lettura_key1 == 0 && lettura_key2 == 1) {   
    numero[1] = key;
    Serial.print("IL SECONDO NUMERO E': ");
    Serial.println(numero[1]);
    lettura_key2 = 0;
  }

  
  key = kpd.getKey();

  if (key == '*' ) {
    Serial.print("IL NUMERO FINALE E': ");
    Serial.println(numero[0] + numero[1]);        // QUI MI SERVIREBBE IL DECIMALE MA OTTENGO IL RISULTATO IN ASCII
    lettura_key2 = 0;

  }
}

Hai usato l'array ma il programma fa esattamente quello che faceva prima, ovvero sai che devi leggere il primo valore con una variabile, il secodo con na variabile,ecc. Se devi leggere 100 valori in questo modo devi farti cento variabili con cento if ecc. decisamente scomodo direi.
Prova a seguire questa traccia, SE l'utente ha premuto qualcosa verifichi se non è l'asterisco, nel caso metti il valore nell'array nella posizione che hai memorizzato in una (ed una sola) varibile ed incrementi il valore di quest'ultima di uno. E tutto si ripete, quando arriva un altro tasto premuto se non è l'asterisco memorizzi il valore nell'aray ed incrementi la variabile e così via.
Quando l'utente preme l'asterisco devi ciclare sul tuo array dalla prima posizione (zero) all'ultima che hai valorizzato (che lo sai in base alla variabile che di volta in volta hai incrementato di uno) e sommare i vari valori premuti moltiplicandoli per il peso (il base decimale il primo per uno, il secondo per dieci, il terzo per cento, ecc.).
Alla fine stampi sul display il valore calcolato.
Esiste un modo più "furbo" di fare la stampa sull'lcd che ti consente di visualizzare i valori introdotti man mano che vengono premuti i tasti, ma finché non hai compreso la logica di come leggere i tatsi e metterli in un array nel mdoo correto ti andrebbe a creare solo confusione

Scusa se rispondo tardi ma con i vari impegni non riesco a lavorarci sempre al progetto! Comunque si so che il programma è abbastanza scritto male perché essendo neofita del mondo di Arduino mi manca la tecnica! Comunque non ho ben capito il discorso di incrementare la variabile! cosa intendi?

Il tuo array di caratteri numero ha due posizioni (zero ed uno) che tu vai a valorizzare cablando nel programma dove andare a scrivere:

numero[0] = key;
numero[1] = key;

al posto di zero ed uno devi usare una variabile inizializzata a zero che incrementi ogni volta che un tasto viene premuto

Grazie mille con il tuo suggerimento è più pulito e semplice il programma.
nonostante abbia comunque dovuto creare delle condizioni per ottimizzare il programma, spero essere riuscito ad elaborarlo come avevi suggerito tu.

Ora resta un altro problema finale:
Per ricavare i valori sommati stampo direttamente l' array senza specificare l' indice perchè il getkey() mi estrae i valori dal keypad in ASCII. Solo che alla fine i numero finale è accompagnato da un punto esclamativo che non so da dove arriva.

il programma è questo:

#include <Key.h>
#include <Keypad.h>
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>

#define RIGHE 4
#define COLONNE 3
#define MAX_DEVICES 2
#define CLK_PIN   13
#define DATA_PIN  11
#define CS_PIN    10



char tasti [RIGHE][COLONNE]  // ARRAY PER IMPOSTARE SU ARDUINO LA STRUTTURA DELLA TASTIERA
{
  {'1', '2', '3'},
  {'4', '5', '6'},
  {'7', '8', '9'},
  {'*', '0', '#'}
};

byte pinRighe [RIGHE] = {2, 3, 4, 5}; // ASSEGNAZIONE PIN DOVE SONO COLLEGATI I CAVI DELLE RIGHE.
byte pinColonne [COLONNE] = {6, 7, 8}; // ASSEGNAZIONE PIN DOVE SONO COLLEGATI I CAVI DELLE COLONNE.


Keypad kpd = Keypad (makeKeymap(tasti), pinRighe, pinColonne, RIGHE, COLONNE); // MAPPATURA DELLA TASTIERA, ASSEGNAZIONE DEI PIN DOVE SONO COLLEGATE RIGHE E COLONNE, DEFINIZIONE NUMERO RIGHE E COLONNE.
MD_Parola display = MD_Parola(CS_PIN, MAX_DEVICES);

char key;
char numero[2];
byte cifra = 0;     // MI SERVE PER SAPERE LA CIFRA DA LEGGERE ex: PRIMA CIFRA, SECONDA CIFRA, ecc...


void setup() {

  Serial.begin(9600);                                          // INIZIALIZZO LA COMUNICAZIONE SERIALE.
  display.begin();                                             // INIZIALIZZO IL DISPLAY A MATRICE.
  display.print("00");                                         // VISUALIZZO SUL DISPLAY INIZIALMENTE I NUMERI 00.

}


void loop() {

  key = kpd.getKey();

  if (key != '*' && key && cifra == 0) {
    numero[cifra] = key;
    Serial.print("IL PRIMO NUMERO E': ");
    Serial.println(numero[cifra]);
    display.print(numero[cifra]);
    cifra++;
  }

  key = kpd.getKey();

  if (key != '*' && key && cifra == 1) {
    numero[cifra] = key;
    Serial.print("IL SECONDO NUMERO E': ");
    Serial.println(numero[cifra]);
    display.print(numero[cifra]);
    cifra = 10;                                // IMPOSTO LA VARIABILE CIFRA A 10 COSI CREO LA CONDIZIONE PER LEGERE IL RISULTATO SOLAMENTE DOPO AVER SCANSIONATO TUTTE LE CIFRE.
  }

  key = kpd.getKey();

  if (key == '*' && cifra == 10 ) {
    Serial.print("IL NUMERO FINALE E': ");
    Serial.println(numero);
    display.print(numero);
    cifra = 0;                                // IMPOSTO LA VARIABILE CIFRA A 0, PERCHE' AVENDO OTTENUTO IL NUMERO FINALE RICOMINCIO LA SCANSIONE DELL PRIMA CIFRA.
  }

}

EDIT:

Ho risolto convertendo la variabile numero da carattere ad intero scrivendo cosi: int num_int = atoi(numero);

Ora credo che il programma sia concluso.

Grazie Mille per l' aiuto :smiley:

PROGRAMMA AGGIORNATO:

#include <Key.h>
#include <Keypad.h>
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>

#define RIGHE 4
#define COLONNE 3
#define MAX_DEVICES 2
#define CLK_PIN   13
#define DATA_PIN  11
#define CS_PIN    10



char tasti [RIGHE][COLONNE]  // ARRAY PER IMPOSTARE SU ARDUINO LA STRUTTURA DELLA TASTIERA
{
  {'1', '2', '3'},
  {'4', '5', '6'},
  {'7', '8', '9'},
  {'*', '0', '#'}
};

byte pinRighe [RIGHE] = {2, 3, 4, 5};                           // ASSEGNAZIONE PIN DOVE SONO COLLEGATI I CAVI DELLE RIGHE.
byte pinColonne [COLONNE] = {6, 7, 8};                          // ASSEGNAZIONE PIN DOVE SONO COLLEGATI I CAVI DELLE COLONNE.


Keypad kpd = Keypad (makeKeymap(tasti), pinRighe, pinColonne, RIGHE, COLONNE); // MAPPATURA DELLA TASTIERA, ASSEGNAZIONE DEI PIN DOVE SONO COLLEGATE RIGHE E COLONNE, DEFINIZIONE NUMERO RIGHE E COLONNE.
MD_Parola display = MD_Parola(CS_PIN, MAX_DEVICES);

char key;
char numero[2];
byte cifra = 0;                                                 // MI SERVE PER SAPERE LA CIFRA DA LEGGERE ex: PRIMA CIFRA, SECONDA CIFRA, ecc...
bool risultato;


void setup() {

  Serial.begin(9600);                                           // INIZIALIZZO LA COMUNICAZIONE SERIALE.
  display.begin();                                              // INIZIALIZZO IL DISPLAY A MATRICE.
  display.print("00");                                          // VISUALIZZO SUL DISPLAY INIZIALMENTE I NUMERI 00.

  risultato = 0;                                                // USO UNA VARIABILE BOOLEANA PER GESTIRE LA CONDIZIONE DEL RISULTATO.

}


void loop() {

  key = kpd.getKey();

  if (key != '*' && key != '#' && key && cifra == 0) {         // ESCLUDO DALLA LETTURA I CARATTERI SPECIALI E LEGGO LA PRIMA CIFRA.
    numero[cifra] = key;                                       // COPIO LA PRIMA CIFRA NELL' ARRAY.
    Serial.print("IL PRIMO NUMERO E': ");
    Serial.println(numero[cifra]);                             // STAMPO LA CIFRA SU SERIALE.
    display.print(numero[cifra]);                              // STAMPO LA CIFRA SUL DISPLAY.
    cifra++;                                                   // INCREMENTO DI UNO LA VARIABILE CIFRA PER PASSARE ALLA LETTURA DELLA SECONDA CIFRA.
  }

  key = kpd.getKey();

  if (key != '*' && key != '#' && key && cifra == 1) {          // ESCLUDO DALLA LETTURA I CARATTERI SPECIALI E VERIFICO SE POSSO LEGGERE LA SECONDA CIFRA.
    numero[cifra] = key;                                        // COPIO LA SECONDA CIFRA NELL' ARRAY.
    Serial.print("IL SECONDO NUMERO E': ");                     
    Serial.println(numero[cifra]);                              // STAMPO LA CIFRA SU SERIALE.
    risultato = 1;                                              // APRO LA CONDIZIONE RISULTATO.       
  }

  

  if (risultato == 1 ) {
    int num_int = atoi(numero);                                // CREO UNA VARIABILE INTERA LOCALE CHIAMATA num_int PER CONVERTIRE LA VARIABILE NUMERO DA CHAR A INT.
    Serial.print("IL NUMERO FINALE E': ");
    Serial.println(num_int);                                   // STAMPO IL NUMERO SU SERIALE.
    display.print(num_int);                                    // STAMPO IL NUMERO SUL DISPLAY.
    cifra = 0;                                                 // IMPOSTO LA VARIABILE CIFRA A 0, PERCHE' AVENDO OTTENUTO IL NUMERO FINALE RICOMINCIO LA SCANSIONE DELL PRIMA CIFRA.
    risultato = 0;                                             // STAMPATO IL NUMERO CHIUDO RISULTATO PER INIZIARE UN NUOVO CICLO.
  }

  key = kpd.getKey();

  if (key == '#') {                                            // CONDIZIONE DI RESET.
    display.print("00");                                       // STAMPO SU DISPLAY ILNUMERO INIZIALE.
    cifra = 0;                                                 // IMPOSTO LA VARIABILE CIFRA A 0, PER LEGGERE PRIMA CIFRA.
     
  }


}

Bene, ma non benissimo :smiley: ottimo che ti sei documentato per usare la atoi ma questa parte di codice

if (key != '*' && key != '#' && key && cifra == 0) {         // ESCLUDO DALLA LETTURA I CARATTERI SPECIALI E LEGGO LA PRIMA CIFRA.
    numero[cifra] = key;                                       // COPIO LA PRIMA CIFRA NELL' ARRAY.
    Serial.print("IL PRIMO NUMERO E': ");
    Serial.println(numero[cifra]);                             // STAMPO LA CIFRA SU SERIALE.
    display.print(numero[cifra]);                              // STAMPO LA CIFRA SUL DISPLAY.
    cifra++;                                                   // INCREMENTO DI UNO LA VARIABILE CIFRA PER PASSARE ALLA LETTURA DELLA SECONDA CIFRA.
  }

Se noti è identica alla parte che gestisce la seconda cifra, se tu dovessi leggere un numero di cento cifre in questo modo duplicheresti cento volte questo if, scomodo non trovi? Eliminando la possibilità di indicare prima, seconda cifra, ecc (tanto serve solo a scopo di debug) puoi semplificare il tutto così:

if (key != '*' && key != '#' && key) {         // ESCLUDO DALLA LETTURA I CARATTERI SPECIALI
    numero[cifra] = key;                                       // COPIO LA PRIMA CIFRA NELL' ARRAY.
    Serial.print(F("IL NUMERO INSERITO E': "));
    Serial.println(numero[cifra]);                             // STAMPO LA CIFRA SU SERIALE.
    display.print(numero[cifra]);                              // STAMPO LA CIFRA SUL DISPLAY.
    cifra++;                                                   // INCREMENTO DI UNO LA VARIABILE CIFRA PER PASSARE ALLA LETTURA DELLA SECONDA CIFRA.
    risultato++;   //INCREMENTO IL NUMERO DI CIFRE MEMORIZZATO
  }

  if (risultato == maxCifre ) {  //MaxCifre può essere una costante, una define o una variabile

In questo modo che tu debba legegre una, due, cento o mille cifre ti basta cambiare dimensione dell'array e maxCifre

Per la precisione se leggi un numero di due cifre l'array che conterrà i vari caratteri dovrà essere di tre posizioni in quanto tutte le funzioni standard (atoi, strncmp, ecc.) richiedono che nell'ultima posizione vi sia messo il terminatore di riga \0 quindi per rendere il programma perfetto e coerente con le specifiche del linguaggio dovresti definire:

char numero[3];

quando hai termiato di leggere mettere il terminatore alla fine Es.

if (risultato == maxCifre ) {
numero[cifra] = '\0';  //può anche essere scritto numero[cifra] = 0;
pippo = atoi(numero);

Ho dovuto fare qualche modifica al programma perchè quando premevo un numero, sul display non appariva quasi mai al primo colpo quello che scrivevo,dovevi premere sempre più di una volta.

All' inizio pensavo fosse difettoso il keypad ma cambiandolo il problema non si risolveva, poi ho compreso che il problema era nel programma.

Praticamente io avevo messo direttamente nel loop 2 volte il getkey, quindi succedeva che il secondo getkey andava in conflitto col primo getkey, infatti solo col primo getkey i numeri li scriveva immediatamente ma ovviamente mi scriveva solo una cifra per volta.

Il programma (SPERO) finito è questo.

Ho aggiunto pure il terminatore di riga come mi hai suggerito, però non ho ben capito a che serve e che importanza ha!

#include <Key.h>
#include <Keypad.h>
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>

#define RIGHE 4                                                 // COSTANTE PER SETTARE IL NUMERO DI RIGHE DEL KEYPAD.
#define COLONNE 3                                               // COSTANTE PER SETTARE IL NUMERO DI COLONE DEL KEYPAD.
#define MAX_DEVICES 2                                           // COSTANTE PER IMPOSTARE IL NUMERO DI DISPLAY CHE STO USANDO.
#define CLK_PIN   13                                            // COSTANTE PER SETTARE IL PIN CLK.
#define DATA_PIN  11                                            // COSTANTE PER SETTARE IL PIN DATA.
#define CS_PIN    10                                            // COSTANTE PER SETTARE IL PIN CS.



char tasti [RIGHE][COLONNE]                                     // ARRAY PER IMPOSTARE LA STRUTTURA DELLA TASTIERA.
{
  {'1', '2', '3'},
  {'4', '5', '6'},
  {'7', '8', '9'},
  {'*', '0', '#'}
};

byte pinRighe [RIGHE] = {2, 3, 4, 5};                           // ASSEGNAZIONE PIN DOVE SONO COLLEGATI I CAVI DELLE RIGHE.
byte pinColonne [COLONNE] = {6, 7, 8};                          // ASSEGNAZIONE PIN DOVE SONO COLLEGATI I CAVI DELLE COLONNE.


Keypad kpd = Keypad (makeKeymap(tasti), pinRighe, pinColonne, RIGHE, COLONNE);                 // MAPPATURA DELLA TASTIERA.

MD_Parola display = MD_Parola(CS_PIN, MAX_DEVICES);                                            // SETTAGGIO DISPLAY

char key;                                                       // USO UNA VARIABILE DI TIPO CHAR DOVE CI SCRIVO QUELLO CHE STRAGGO DAL KEYPAD.
char numero[3];                                                 // USO UN' ARRAY DI TIPO CHAR CHE MI SERVE PER COMBINARE E MOSTRARE IL NUMERO FINALE.
byte cifra = 0;                                                 // MI SERVE PER SAPERE LA CIFRA DA LEGGERE ex: PRIMA CIFRA, SECONDA CIFRA, ecc...
bool risultato;                                                 // USO UNA VARIABILE BOOLEANA PER ATTIVARE LA CONDIZIONE CHE MI ESTRARE E MOSTRA IL RISULTATO.




void setup() {

  display.begin();                                              // INIZIALIZZO IL DISPLAY A MATRICE.
  display.print("00");                                          // VISUALIZZO SUL DISPLAY INIZIALMENTE I NUMERI 00.
  risultato = 0;                                                // USO UNA VARIABILE BOOLEANA PER GESTIRE LA CONDIZIONE DEL RISULTATO.
}


void loop() {

 
  key = kpd.getKey();


  if (key != '*' && key != '#' && key && cifra == 0) {         // ESCLUDO DALLA LETTURA I CARATTERI SPECIALI E LEGGO LA PRIMA CIFRA.
    numero[cifra] = key;                                       // COPIO LA PRIMA CIFRA NELL' ARRAY.
    display.print(numero[cifra]);                              // STAMPO LA CIFRA SUL DISPLAY.
    cifra++;                                                   // INCREMENTO DI UNO LA VARIABILE CIFRA PER PASSARE ALLA LETTURA DELLA SECONDA CIFRA.
  }


  while (cifra == 1) {                                         // FINCHE' LA VARIABILE KEY RIMANE VUOTA LOOPO QUI DENTRO, QUANDO KEY ASSUMNE UN VALORE ESEGUO LA CONDIZIONE IF.
    key = kpd.getKey();                                        // SE NON PREMO NIENTE LA VAIABILE KEY SI SVUOTA, NEL MOMENTO IN CUI PREMO UN NUMERO SUL KEYPAD KEY NE ASSUME IL VALORE.
    if (key) {                                                 // QUANDO KEY ASSUME UN VALORE,SI AVVERA LA CONDIZIONE IF.
      numero[cifra] = key;                                     // COPIO LA SECONDA CIFRA NELL' ARRAY.
      risultato = 1;                                           // APRO LA CONDIZIONE RISULTATO.
      cifra = 0;                                               // SCRIVO SULLA VARIABILE CIFRA  "0", PERCHE' AVENDO OTTENUTO LA SECONDA CIFRA NE ESTRAGGO IL RISULTATO.
    }
  }


  if (risultato == 1) {
    numero[3] = '\0';                                          // TERMINATORE DI RIGA DELL' ARRAY.
    int num_int = atoi(numero);                                // CREO UNA VARIABILE INTERA LOCALE CHIAMATA num_int PER CONVERTIRE LA VARIABILE NUMERO DA CHAR A INT.
    display.print(num_int);                                    // STAMPO IL NUMERO SUL DISPLAY.
    risultato = 0;                                             // STAMPATO IL NUMERO CHIUDO RISULTATO PER INIZIARE UN NUOVO CICLO.
  }


  if (key == '#') {                                            // CONDIZIONE DI RESET.
    display.print("00");                                       // STAMPO SU DISPLAY IL NUMERO INIZIALE.
    cifra = 0;                                                 // SCRIVO SULLA VARIABILE CIFRA  "0", PER RICOMINCIARE IL CICLO E LEGGERE PRIMA CIFRA.
    risultato = 0;                                             // CHIUDO LA CONDIZIONE RISULTATO.

  }

}

MrFrancesco961:
Ho aggiunto pure il terminatore di riga come mi hai suggerito, però non ho ben capito a che serve e che importanza ha!

In C una stringa è definita come una sequenza di codici ASCII seguiti da uno zero binario, E le funzioni che operano sulle stringhe si aspettano di trovare un tale formato. Quindi per usarle bisogna costruire una stringa C corretta, altrimenti senza il terminatore le funzioni non sanno dove la stringa finisce.