variable nach ablauf des loops wieder auf ursprungswert zurücksetzen

Hi,

ist mein erster beitrag zum forum und hoffe ihr könnt mir mit meinem kleinen problem schnell weiterhelfen damit ich es anderen beibringen kann :wink:

also:

ich habe eine ampelschaltung mit einem 16-bit schieberegister. ich realisiere die (8) phasen mit while-schleifen und am ende jeder phase habe ich ein i++. das heisst wenn i zB 2 ist gehe in die "while (i==2) phase.

alles funktioniert tadellos nur am ENDE, wenn alle phasen durch sind kapiere ich nicht wie ich bei arduino sauber und schick mein "i" wieder auf "1" damit die schleife wieder von vorne anfängt. habe das problem vorrübergehend mit einem i++ ganz am ende gelöst was aber definitv keine schicke lösung ist.

zudem brauche ich den befehl um einer variable einen festen wert zu zuweisen im loop in meherern fällen :S

ich kann euch ja mal einen ausschnitt zeigen:

 while (i==7)
      {
          {
          TasterState3 = digitalRead(TasterPin3);
          if (TasterState3 == LOW)
                    {
                      bitClear(Nord,   3);       
                      bitClear(Nord,   2);       
                      bitSet  (Nord,   1);                   
                      updateShiftRegister();
                      delay(2000);
                      i++;
                    }
               {   
               TasterState3 = digitalRead(TasterPin3);
                  if (buttonState3 == HIGH)
                     {
                     bitClear(Nord,   3);       
                     bitClear(Nord,   2);       
                     bitSet  (Nord,   1);                   
                     updateShiftRegister();
                     delay(15000);
                     i++;
                     }
                }
            }
  while(i==8)
      {
          bitSet  (Nord,  2);       
          bitClear(Nord,  1);
          bitSet  (Nord,  5); 
          bitClear(Nord,  4);          
          bitSet  (Ost,   3);           
          updateShiftRegister();
          delay(3000);
          i++;
      }
    i++;  
  }     
}
}

Setze Deinen Code bitte in Codetags (</>-Button im Forumseditor), dann ist er besser lesbar. Wenn Du einmal dabei bist, formatiere ihn bitte auch ordentlich. +T in der IDE hilft Dir dabei.

Gruß Tommy

Du möchtet kein while verwenden!

Tipp:

  1. Ersetze alle while durch if
    Oder baue ein switch/case Konstrukt
    Oder ein Array mit Funktionen/Objekten

2 Ersetze das letzte i++ durch:

if(i>8) i=1;

Aber wirklich helfen, kann dir nur unsere "Nachtwächter Erklärung"!
Denn die ganzen delay() stehen dir nur im Weg rum.

ois klar, ich schreibs mal um :wink: melde mich später wieder.

vielen dank!

VIELEN DANK!

alles super jetzt :wink: