Buzzer System Problem mit Blink Frequenz

Hallo alle zusammen,
ich bin noch ganz neu in der Arduino Welt und habe mich jetzt mal damit versucht einen Buzzer zu bauen. Soweit funktioniert auch alles, wie ich es mir gedacht habe. Die LEDs sollen alle blinken und wenn ein Buzzer gedrückt wurde sollen alle LEDs ausgehen, bis auf die, zu der der Buzzer gehört. Doch wenn alle LEDs leuchten blinken sie in einer relativ hohen Frequenz und wenn ich dann den Buzzer betätige blinkt wie gewollt nur noch eine LED, aber mit einer viel kleineren Frequenz.
Ich habe noch zur Veranschaulichung ein Video auf Youtube hochgeladen: - YouTube

Hier ist noch mein Code:

int buttonState[] = {0 ,0 ,0 ,0 ,0 ,0 ,0 ,0};
int State[] = {1 ,1 ,1 ,1 ,1 ,1 ,1 ,1};
int stopp = 0;
int zaeler = 0;
int richtung = 0;
long interval = 40;
long previousMillis = 0;

const int PWMTabelle [32] =
{
    0, 1, 2, 2, 2, 3, 3, 4, 5, 6, 7, 8, 10, 11, 13, 16, 19, 23,
    27, 32, 38, 45, 54, 64, 76, 91, 108, 128, 152, 181, 220, 255
};



void setup() {
  for (int i = 0; i <=7; i++) {
    pinMode(30+i,INPUT);
    pinMode(4+i,OUTPUT);
  }
}



void blinken(int ledPin) {
  
    analogWrite(ledPin, PWMTabelle[zaeler]);
    if (richtung == 0) {
      zaeler++;
    }
    else if (richtung == 1) {
      zaeler--;
    }
    if (zaeler == 31) {
    richtung = 1;
    }
    if (zaeler == 1) {
    richtung = 0;
    }
}



void loop() {
 
  //////////////gucken wer gedrückt, alle anderen werden auf 0 gesetzt uns somit auf aus///
  for (int i = 0; i <= 7; i++) {
    buttonState[i] = digitalRead(30+i);
    if ((buttonState[i] == HIGH) && (stopp == 0)) {
      State[i] = 1; 
      for (int j = 0; j <=7; j++) {
        if (j != i) {
          State[j] = 0;
        }
      }
      stopp = 1;
    }
  }
 
 ////////////////LEDs ausschalten///////////////
  for (int i = 0; i <= 7; i++) {  
    if ((State[i] == 0) && (stopp == 1)) {
      digitalWrite(4+i, LOW);
    }
  }
  
  ////////////LED blinken/////////////////
 
  unsigned long currentMillis = millis();
  
  if(currentMillis - previousMillis > interval) {
    previousMillis = currentMillis;
    
    for (int i = 0; i <= 7; i++) {
      if (State[i] == 1) {
        blinken(4+i);
      }
    }
  }
}

Ich hoffe ihr könnt mir weiterhelfen und vielen Dank schonmal :wink:

Nachtrag:
In dem Testaufbau auf dem Video habe ich erstmal nur 3 anstatt 8 LEDs benutzt, aber das sollte ja eigentlich keinen Unterschied machen oder?

ktec99:
Doch wenn alle LEDs leuchten blinken sie in einer relativ hohen Frequenz und wenn ich dann den Buzzer betätige blinkt wie gewollt nur noch eine LED, aber mit einer viel kleineren Frequenz.

Das hast Du doch genau so programmiert!

    for (int i = 0; i <= 7; i++) {
      if (State[i] == 1) {
        blinken(4+i);
      }
    }
  }

Da die PWM-Intensität immer in der "blinken" Funktion auf den nächsten Wert gesetzt wird, ist es so, dass während eines einzigen Intervalls mit 8 blinkenden LEDs die PWM-Intensität um 8 Schritte vorwärts gesetzt wird, und wenn nur eine LED blinkt, dann wird auch nur für diese eine LED die blinken-Funktion aufgerufen. Und demzufolge während eines Intervalls die PWM-Intensität nur um einen Schritt vorwärts gesetzt. Daher blinken 8 geschaltete LEDs insgesamt 8mal schneller als eine geschaltete LED.

Wenn die Änderung der LED-Leuchtintensität immer gleich schnell bleiben soll, mußt Du Deinen "zaeler" einmal pro Intervall ändern und nicht für jede einzelne LED im selben Intervall. Also immer weiterzählen am Ende der zitierten for-Schleife und nicht in der blinken-Funktion.

OK vielen Dank jetzt funktioniert es wunderbar. Hatte irgendwie den Wald vor lauter Bäumen nicht gesehen :smiley: