well66:
ho riprovato più volte con lo stesso codice, ricaricandolo più volte e il risultato era sempre quel valore strano, poi ricollegato tutto il valore è cambiato magicamente
Scusa, ma anche a me era poco chiara la tua domanda (i "pin configurati ma non collegati") e soprattutto non si capisce neanche ora cosa intendi con "ricollegato tutto il valore è cambiato magicamente".
Tra l'altro avevi anche scritto in precedenza cose che sembravano intendere che quel problema tu lo avessi risolto:
adesso però ho ricablato tutto e mi sono accorto con mia sorpresa che adesso il valore è corretto, perche prima avevo scollegato display rtc e sensori.
Se (sembra) risolto ma vuoi comunque capire perché in precedenza ci sia stato quel problema credo che tu debba ricercarlo in cosa tu abbia fatto quando hai "ricablato tutto", come pensi che noi ti si possa rispondere, al di là delle varie cose che ti hanno detto sugli interrupt ad esempio? 
Al di là di questo, nel codice la variabile "Stato" la imposti a 0 od 1 (questo nell'ISR) quindi intanto io lo definirei "bool", non "int".
ma vedrei anche la Output. Nella ISR ReadData() vedo che fai questo:
Output = 0;
Output = Output | digitalRead(10);
Output = Output << 1;
Output = Output | digitalRead(11);
Output = Output << 1;
Output = Output | digitalRead(3);
Di fatto tu stai cercando di "impacchettare" le letture di 3 ingressi ed avere un valore bitmapped ossia sommando 1 per il pin 3, 2 per il pin 11 e 4 per il pin 10. Intanto visto che ci sono le costanti, perché non dai un nome a questi pin così si capisce meglio a cosa servano? Tu hai queste belle costanti, quindi usale:
const byte PIN_A = 10; // PIN A tastiera
const byte PIN_B = 11; // PIN B tastiera
const byte PIN_C = 3; // PIN C tastiera
E tra l'altro nell'ISR puoi anche usare questo:
Output = digitalRead(PIN_A)*4 + \
digitalRead(PIN_B)*2 + \
digitalRead(PIN_C);
Comunque sia, con questa codifica avresti 7=ABC, 6=AB, 5=AC, 4=A, 3=BC, 2=B, 1=C, 0= nessuno.
Ma tu nel codice intanto lo inizializzi al valore 8 che non è tra quelli previsti, poi hai una lunghissima (e sinceramente illeggibile) sequenza di if() che confrontano Output con tutti i valori tra 0 e 7 (misteriosamente tranne il 6) per cui la variabile "Output" mi pare gestita malissimo.
Se tu assumi che venga premuto solo un tasto alla volta (visto che non sei un polipo ;)) dovresti considerare solo i valori A=4, B=2, C=1, se invece vuoi prevedere più tasti premuti contemporaneamente ti consiglierei di definire dei simboli appositi per questo o almeno dei commenti e rendere così il codice più leggibile e gestibile.
Ad esempio:
...
#define TASTO_A 4
#define TASTO_B 2
#define TASTO_C 1
...
//if (Output == 1) Cursore ++;
if (Output == TASTO_C) Cursore ++;
...
//if (Output == 2) Stato2 == Cursore + 1 ;
if (Output == TASTO_B) Stato2 == Cursore + 1 ;
}
if (Output == TASTO_A+TASTO_B+TASTO_C)
{
...
Sempre se questa è la codifica che intendevi realizzare.
Fermo restando comunque che a me appare inspiegabile quel valore 13622 per Stato, l'unica spiegazione che in genere c'è è nello sforamento dell'indice di qualche array. Faccio un esempio: la variabile "j" a cosa serve? Vedo che viene usata come indice per alcuni array, però dovrebbe avere valori tra 0 e 2 (?), però mentre qui c'è questa verifica:
if (j == 2)
{
Stato3 = 4;
j = 0;
}
else j++;
vedo questa riga che non ha alcun controllo di sforamento:
if (Output == 2) j++;
Vedi tu...