Problema con Display 16x2 collegato a PIN Analogico

Buongiorno, sono nuovo del Forum…
Sto creando un circuito che legga da tastierino un codice numerico…
Per non usare tutti i PIN Digitali ( che mi serviranno per altre cose ) ho collegato il KeyPad a un PIN Analogico con resistenze da 10 KOhm e 2,2 K Ohm.
A funzionare funziona, ma il problema è se uno tiene premuto troppo un pulsante mi legge più volte quel valore.

ho provato ad ovviare inserendo un delay(100), e se clicchi e rilasci subito ok, ma se uno ha il dito pesante e ci mette più tempo?

Come risolvere?

La funzione è del tipo:

char funzione_tasto ( int valore )
{
  char tasto = ' '; 
  if (valore < 10 ) tasto = 'N';
  else if (valore < 450 ) tasto = '*';
  else if (valore < 472 ) tasto = '7';
  else if (valore < 496 ) tasto = '4';
  else if (valore < 523 ) tasto = '1';
  else if (valore < 571 ) tasto = '0';
  else if (valore < 607 ) tasto = '8';
  else if (valore < 647 ) tasto = '5';
  else if (valore < 694 ) tasto = '2';
  else if (valore < 780) tasto = '#';
  else if (valore < 848 ) tasto = '9';
  else if (valore < 931) tasto = '6';
  else if (valore < 1031 ) tasto = '3'; 
  return tasto;
}

...


  tasto_A0 = analogRead(tastierino_A0);
  delay(150);
  Tasto_Premuto = funzione_tasto (tasto_A0);

qualche consiglio?

Grazie…

Togli il delay e crea un’altra variabile old_tasto alla quale assegni il valore del tasto premuto.
Al turno successivo, se tasto premuto = old_tasto vuol dire che hai ancora il dito sul tasto, quando togli il dito invece sarà tasto premuto = niete e old_tasto = quello che hai premuto per ultimo.
Prendi il valore di old_tasto per farne l’uso che ti serve e contemporaneamente assegna niente ad old_tasto.

ho provato come hai detto è sembra andare bene...
ho però dovuto mettere un delay(50), altrimenti non funzionava bene mi prendeva valori a caso, invece con un piccolo ritardo mi dà esattamente quello che premo...

Grazie

Il delay dovresti inserirlo solo se viene premuto il pulsante, ovvero se cambia sensibilmente il valore in lettura.
Se non viene premuto nessun pulsante salta il delay e rilegge lo stato dell'ingresso analogico.

EDIT: Un buona guida anche se riguarda i PIC.
--> http://www.settorezero.com/wordpress/corso-programmazione-picmicro-in-c-–-approfondimenti-studio-su-come-controllare-16-pulsanti-con-un-solo-io/