digitalRead() in Interrupt Service Routine

Hallo Forum,

ich möchte innerhalb einer ISR heraus finden welche Drucktaster getrückt wurden.
Alle sind als Inputs mit internem Pull-Up deklariert. Ich Messe auch 5V an allen Pins.
BestButton zieht nur Pin2 auf GND,
Hoch- und RunterButton ziehen gleichzeitig Pin 2 und einen weiteren digitalen Pin auf GND.

Wenn ich in der loop die Funktion

void btPressed()  {
      Serial.print("HochButton: ");
      Serial.println(digitalRead(HochButton));
      Serial.print("RunterButton: ");
      Serial.println(digitalRead(RunterButton));
      Serial.print("BestButton: ");
      Serial.println(digitalRead(BestButton));
}

aufrufe bekomme ich wenn kein Button gedrückt ist für jeden Wert eine 1.
Wenn ich die Funktion aus der ISR aufrufe, egal welchen Button ich drücke sind alle Werte 0.

Ich habe irgendwo gelesen, dass die frühen Arduino IDEs evtl. probleme haben und habe die Version 1.6.7 installiert, gleiches Problem.

Jemand einen Tipp?

Es fehlt noch etwas zum entprellen aber da ich auch die Buttons abfrage, welche nicht gedrückt werden und auch dort kein sinnvoller Wert angezeigt wird, kann es daran nicht liegen.

Was wäre der schönste weg zum entprellen in einer ISR?

digitalRead() geht in einer ISR. Serial dagegen nicht richtig.

Taster per Interrupt abfragen ist generell keine so gute Idee. Das geschieht langsam genug dass man einfach in loop() ständig abfragen kann. Dann ist auch das Entprellen einfacher.

Serial funktioniert halt wenn man genug Zeit lässt die Daten zu übermitteln hab ich immer das Gefühl.

Ich muss den Arduino durch einen Interrupt überhaupt erst Wecken, deshalb dachte ich, ich mach es gleich mit allen so.