Wo habe ich den denk Fehler?

Ich möchte das wenn der Knopf gedrückt wird. Es 1 mal pipt. Wenn ich ihn los lasse, dann 2 mal.
Nach dem Spannung anlegen Pipt er 2 mal.
Beim Drücken 1 mal

Dann passiert nichts mehr.
Wo ist da der Fehler?

int buzzer = 8;
const int taster = 12;
int buttonState = 0;
int buzzertimer = 1; 
int buzzertimer2 = 2; 

void setup() 
{
pinMode(taster, INPUT);
Serial.begin(9600);
}
 
  
  void loop(){
buttonState = digitalRead(taster);

if (buttonState == HIGH) 
    {
        while (buzzertimer>0)
        {
        buzzertimer--;
        
        tone(buzzer, 4000, 1000);
        delay(1000);
        Serial.println(buzzertimer2);
        }
        int buzzertimer2 = 2;
    }
else 
    {
        while (buzzertimer2>0)
        {
        buzzertimer2--;
        
        tone(buzzer, 4000, 500);
        delay(1000);
        Serial.println(buzzertimer);
        }
        int buzzertimer = 1;
    }
}

Du hast hier die Software gezeigt, wie sieht die Hardware aus? Zeig' mal die Beschaltung.

Beide buzzertimer sind bereits deklariert worden. Warum in der loop() noch einmal?

Mit dem "buzzertimer--" Zählt er die buzzertimer auf 0.

Ich möchte die mit dem buzzertimer im loop wieder zurücksetzen.

Hardware Arduino Nano

Speaker an Pin D8

D12 -Taster-+5V
| Widerstand 4,7 - Massen

Du hast Variablen doppelt definiert. Die existieren zweimal in unterschiedlichen Scopes/Gültigkeitsbereichen.

Mach mal spaßhalber das:

int test =  1;

void loop()
{
    int test = 2;
    Serial.println(test);
    Serial.println(::test);
    delay(2000);
}

Das wird dir "2" und "1" ausgeben. Die globale Variable steht immer noch auf "1", weil du lediglich eine lokale Variable gleichen Namens anlegst.

Lass einfach das "int" weg wenn du die Variable beschreibst. Dann ist es auch die gleiche.

EDIT:
Wenn du das machst:

else 
{
    int buzzertimer = 1;
}

Ist das eine lokale Variable die nur zwischen den geschweiften Klammern existiert. Oben fragst du dann die globale Variable ab, die nie geändert wurde.

So ist es richtig:

else 
{
    buzzertimer = 1;
}

Super, danke.

Auf nur "buzzertimer = 1;" bin ich gar nicht gekommen.