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 
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.
}
}