Die Lösung mit dem Interrupt von Timer, also mit einer festen Zeit zum Abtasten würde ich vorziehen. Das mit dem Pinchange Interrupt geht auch, aber bei kleinen Störungen bekommt man da ggf. schnell hintereinander mehrere Interrupts - für den kurzen Zeitraum sind dann auch schon mal 3 Interrupts in kurzer Zeit möglich wo der Timer nur 1 hätte. Falls die 3 Interrupts sehr schnell kommen, gibt es dabei ggf. sogar Zählfehler. Damit ist der worst case mit dem Pinchange Interrupt ungünstiger als mit dem Timer.
Die Programmierung mit einem Case über einen String ist auch eher wenig Effektiv. Günstiger wäre es da 2 Bits in einem Byte zu nutzen. Wenn die Eingänge günstig liegen, geht es z.B. mit Zahlen von 0 bis 3 und dann mit einer konstanten Tabelle statt dem Case Statement. Die jetzige Lösung geht auch deshalb nicht gut weil das Auslesen der Sensoren noch im Hauptpogramm stattfindet, und nicht im Interrupt.
Lesezeichen