robo_wolf,

nur nicht hetzen ! Ich habe ja auch ziemlich viel daran herumgetüftelt.

Angefangen hatte ich mit dem naheliegenden Ansatz: Einem Algorithmus, der brav die verschiedenen Stadien des Einschaltens der Menusteuerung und später das Verhalten im eingeschalteten Zustand durchbuchstabiert.

Diese Lösung gefiel mir aber nicht, weil sie in einen Wust von Fallunterscheidungen ausuferte. Besonders verwirrend fand ich, dass während des Einschaltvorgangs einmal die Tastenflanke das auslösende Ereignis ist, und dann wieder das Ablaufen eines Warteintervalls. Auch die Zeitintervalle, die überwacht werden müssen, unterscheiden sich, abhängig vom Zustand der Menusteuerung: Beim Einschalten sind es T0, T1 und T2. Nachdem die Steuerung eingeschaltet ist, braucht man nur noch die Totmannzeit T2 überwachen.

Wie sich nach einigem Herumprobieren herausstellte, wird das Ganze übersichtlicher, wenn man die Zeitmessung (T0 -> T1 ->T2) immer gleich ablaufen lässt; sie also davon unabhängig macht, ob die Menusteuerung eingeschaltet ist oder nicht. Ganz entscheidend ist es, die Zeitmessung bei jeder Tastenflanke neu zu starten: Eine neue Tasteflanke wird dann durch das Zurückspringen des Zeitzählers auf Null angezeigt, bzw. dadurch, dass T0 (oder T1) abläuft. Dadurch braucht man nur noch die Zeitmessung zu überwachen, nicht die Tastenflanken.

Das ist die wesentliche Vereinfachung .

Um festzustellen, was der Bediener mit seiner Eingabe bezweckte, braucht man nur noch bei T0 bzw. T1 den statischen (nicht den dynamischen) Zustand der Tasten abfragen: Die Tatsache, dass T0 bzw. T1 erreicht werden, zeigt ja schon an, dass mindestens eine der Tasten neu betätigt wurde. Bei Erreichen von T2 geht's immer auf direktem Weg zurück nach "Los" (Schrittnummer 0x00).

Viel Spass beim Nachtüfteln .

Ciao,

mare_crisium