Ich denke, ich hab es:
if (a==0)// NUR dann!
{
a=1;//wird auf 1 gesetzt , UND wo wird a jemals zurück gesetzt?
Kanalzaehler++;//den Kanalzähler (Ausgang) um 1 erhöhen
if (Kanalzaehler>7)//Wenn der Kanalzäler größer als 7...
{Kanalzaehler=0;}// ...ist wird er auf 0 zurückgesetzt
}
Ich habe nichts gefunden, wo a jemals wieder zurückgesetzt wird.
Damit ist a nach dem allerersten Durchlauf für _immer_ 1, und somit wird nichts mehr getan in dem Teil.
Unabhängig davon, dass ich den Sinn von a nicht wirklich verstehe (hab das ganze Programm allerdings auch nur überflogen), solltest du dann weiter unten in dem switch/case-Teil zumindest jedes mal (oder einmal, am Schluss) a auch wieder auf 0 setzen.
Nebenbei bemerkt: Die Failsave-Routine ist "unfein" gelöst- delay() sollte man nur benutzen, wenn es gar nich anders geht.
Zum blinken gibt es ein wunderschönes Beispielprogramm namens BlinkWituotDelay- schau dir mal an, wie man sowas _richtig_ macht.
Und: ich glaub, insgesamt ist dein Progrämmchen nicht soo clever gelöst- oder willst du, dass die Schaltfunktionen, wenn du den Schalter längere Zeit AN lässt, der Reihe nach eingeschalten werden?
Ich würds anders lösen: bei jedem Mal EINschalten wird eine Stelle weiter gerückt. Dabei wird alles verriegelt, bis wieder AUSgeschalten wurde.
So kannst du ohne jede Zeitverzögerung (naje, minimale) jeden Schaltzustand einzeln aufrufen, in dem du einfach oft genug den Schalter betätigst.
Aber ist natürlich Ansichtssache-würde jedoch das ganze Getüdele mit den Zeiten völlig ersparen.
Lesezeichen