Consiglio uso interrupt()

Salve ragazzi, ho 26 pulsanti da usare su un arduino due e diciamo li devo interfacciare con un lcd...alcuni li utilizzeró come frecce per spostare il cursore e selezionare la voce dal menu quindi ho messo attachInterrupt e ho assegnato la funzione up() che mi incrementa una variabile che mi indicherà la posizione del cursore solo che ho problemi di debouncing(dico bene?) ovvero per esempio anziche di incrementare di un valore mi incrementa di un numero sempre diverso e casuale...come fare?consigli?su internet ho letto del debouncing hardware ma penso passeró al software ma non mi è chiaro...

Grazie a chi mi aiuterà

Un interrupt agganciato ad un pulsantino raccoglie qualche centinaio di attivazioni ad ogni pressione ;) Se cerchi nelle vecchie discussioni si è parlato di interrupt e lettura pulsantin non più di 2 settimane fa.

Per le interfacce uomo macchina puoi usare benissimo un polling con un tempo di scansione delle centinaia di millisecondi, non serve l'interrupt. Inoltre per ridurre il numero di pin utilizzati magari prova a pensare di utilizzare una tastiera a matrice http://www.adrirobot.it/arduino/tastiera/Arduino_tastiera.htm: in pratica puoi impostare le righe come out e le colonne come read, attivi una riga per volta e leggendo quali su quali colonne hai il segnale puoi risalire a quali tasti sono premuti. Attennto però ai tasti fantasma: facendo riferimento alla foto del link sopra, se te premi contemporaneamente i tasti P1, P2 e P5, quando scansioni la riga R2 il segnale te lo ritrovi anche sulla colonna C2 perché fa il giro dai tasti P5->P1->P2 e quindi leggeresti che hai il tasto P6 premuto. Per ovviare a questo si inseriscono un diodo su ogni tasto.

Io adotto questo sistema:

boolean DigInVal;  // stato pulsante
...
void GetDigIn() {

  boolean Status;
  const unsigned long Debounce = 20;                // antirimbalzo 20ms - 100ms

  Status = digitalRead(DigInPin); 
  if (Status != DigInVal) {
    delay(Debounce);
  }
  DigInVal = digitalRead(DigInPin);
}