Hi,
Würde für mein verstzändnis der stopwatches bedeuten, dass man diese an einer beliebigen stelle im vorderen bereich des programmes startet (einmal) und dann im ersten durchlauf der while(true) schleife auf null stellt und dann im zweiten durchlauf den Ir-empfang prüft...
Ja... Das startStopwatchX(); brauchst du nur EINMAL am Programmanfang, d.h. später normalerweise nicht wieder.

Die Benutzung geht dann so:
if(getStopwatchX() > 100) // mach was alle 100ms
{
// Was alles zu tun ist ...
setStopwatchX(0); // Stopwatch auf Null stellen
}

Die software reagiert sehr eigenartig auf das drücken der buttons: mal garnicht, mal mit kurzem start mit sofort erfolgtem break, mal richtig. Wie könnte ich da was verbessern? Verzögerungen in der tastenabfrage z.b.?
Ich würde 2 Sachen ändern:
1. In der SWITCH-CASE-Struktur sieh dir die while(true) Schleifen an: Alle Pausen (mSleep) dort und im Bereich "anzeige gedrückter buttons" müssen raus,- d.h.: Die Haupt-while(true)-Schleife muss ohne Unterbrechungen/Pausen ablaufen. Wenn man Texte länger lesen soll, müßte man das auch mit einer weiteren Stopwatch machen.
2. Die Zeile uint8_t key_1 = getMultiIOPressedButtonNumber(); brauchst du nicht. Es reicht: uint8_t key_1; (Grund: Weiter unten wird die Taste ja wieder eingelesen: key_1 = getMultiIOPressedButtonNumber(); )