So was programmiert sich komfortabler als State-Machine (finiter
Automat).
Also kein linearer Algorithmus, der hin und her hüpft, sondern eine
Funktion, die periodisch aufgerufen wird und dann abhängig vom Status
die Eingangswerte auswertet und ggf. den Status wechselt.
Wenn man nur ein/aus hätte, dann würde der "aus" Status, also State 0,
prüfen, ob die Taste gedrückt wurde. Wenn das so ist, schaltet er die
Lampe ein und wechselt zum nächsten Status (1), der dann jedes mal beim
Aufruf prüft, ob die Taste wieder losgelassen wurde, dann wechselt er
zum Status 2, der guckt, ob die Taste wieder gedrückt wurde, dann die
Lampe ausschaltet, zum Status 3 wechselt, der auf das Loslassen wartet
und zum Status 0 zurück kehrt.
Solche State-Machines kann man beliebig komplex machen. Am Besten ruft
man die in einem Interrupt auf, wenn etwas passiert ist, oder periodisch
über einen Timer. Die einzelnen States sind in einem switch/case was die
Funktionen klein, handlich und übersichtlich macht.
ggf. mal was über finite Automaten lesen. Das ist ein sehr praktisches
Werkzeug.