Problem beim Ersatz von mehrfachem delay durch millis

Hallöchen

Ich möchte per Portmanipulation mehrere LED-Muster blinken lassen (ein Kreis mit 10 LEDs). Testweise habe ich es mit delay aufgebaut, bis ich die Muster und das delay gefunden habe, die ich wollte. Nun, da der Sketch erweitert werden soll, möchte ich gerne das delay durch millis ersetzen, aber es ruckelt sehr und wirkt nicht so, wie es sein soll.

Hier der Teil mit delay:

PORTD = B10001001;
  PORTB = B00000000; 
  delay(del);
  PORTD = B00010010;
  PORTB = B00100000; 
  delay(del);
  PORTD = B01000100; 
  PORTB = B01000000;  
  delay(del);
  PORTD = B00001010; 
  PORTB = B00010000;
  delay(del);
  PORTD = B00010100; 
  PORTB = B00100000;
  delay(del);

Hier mit millis:

if ( millis() - previousMillis >= interval ) {
    PORTD = B10001001;
    PORTB = B00000000;
    previousMillis = millis();} 
  if ( millis() - previousMillis >= interval ) {
    PORTD = B00010010;
    PORTB = B00100000;
    previousMillis = millis();} 
  if ( millis() - previousMillis >= interval ) {
    PORTD = B01000100; 
    PORTB = B01000000; 
    previousMillis = millis();} 
  if ( millis() - previousMillis >= interval ) {
    PORTD = B00001010; 
    PORTB = B00010000;
    previousMillis = millis();}
  if ( millis() - previousMillis >= interval ) {
    PORTD = B00010100; 
    PORTB = B00100000;
    previousMillis = millis();}

Wo liegt hier mein Denkfehler? Brauche ich bei jeder Verwendung ein anderes interval (int1, int2 etc)?

Interval kann derselbe bleiben, previousMillis musste für jedesmal neuen erstellen.
Also zB previousMillis1, previousMillis2, previousMillis3.

Habe ich ausprobiert, ändert leider nichts.

Du brauchst eine Statusvariable, z.B. byte Status. Bei jedem Intervalablauf wird sie eins erhöht.

if (( millis() - previousMillis >= interval )&&(Status==0)) {
    PORTD = B10001001;
    PORTB = B00000000;
    Status=1;
    previousMillis = millis();} 
  if (( millis() - previousMillis >= interval )&&(Status==1)) {
    PORTD = B00010010;
    PORTB = B00100000;
    Status=2;
    previousMillis = millis();} 

    .... usw.

Ohne Statusvariable wird nur die Bedingung ausgeführt, wo der Controller zufällig in der Dauerschleife ist, wenn das Interval abgelaufen ist.

Danke, jetzt läufts!

Schön, freue mich über Karma

Sorry, war schon lange nicht mehr hier....