Ok, 2. Runde

Im Pr: Unterprog. fehlt das Return, und generell müssen Unterprogramme, die mit Gosub angesprungen werden auch mit Return verlassen werden, sonst hängt sich dein Controller auf. Bei einem Gosub "merkt" sich der Controller, woher er kam - und sprint mit dem Return wieder zu der Adresse zurück. Erfolgt kein Return, so merkt er sich die ganzen Ursprungsadressen bis ihm irgendwann der RAM ausgeht, und das kann je nach Programm in einigen Stunden oder auch nach wenigen Millisekunden der Fall sein.

Übrigens können Sinnvolle Namen für Unterprogramme enorm die Lesbarkeit verbessern

Generell würde ich das Programm anders aufbauen. Der jetzige Nachteil ist der, das dein Programm die Taster nicht mehr abfragt, sobald eine Aktion wie das Dimmen erfolgt.
Besser wäre es, in den Unterprogrammen nur über Variablen festzulegen wohin (z.b. 0 oder 255) und wie schnell gedimmt werden soll und das eigentliche Dimmen im Hauptprogramm zu machen.
So bleibt das System immer "am Ball" und wertet ständig die Sensoren (Taster, später vielleicht auch Helligkeits- und Temperatursensoren) aus.

Gruß und nie entmutigen lassen

MeckPommER