Absoluter aber begeisteter Beginner / habe ein Problem mit einem Code

Hallo liebes Gemeinde.

Bin absoluter Anfänger (seit einer Woche) und stecke schon fest. Ich Versuche gerade einen Code zu schreiben, der beim Tasterdruck die Led blinken soll und beim nächsten Tasterdruck die Led ausgehen soll. Das ist kein Problem. Das habe ich hinbekommen und es ist sogar eine Entprellung des Tasters dabei.

Nur soll der i=0, i++, delay (1); und wenn i 3000 erreicht hat, also 3 Sekunden verstrichen sind, soll erst die Led angehen.

Ich habe sogar eine serielle Ausgabe gemacht. Die funktioniert auch.

Meine Frage ist, warum der die 3000 mal in der for-Schleife mit delay(1) jeweils immer, nicht macht und die Led sofort anspringt und ausspringt? Das verstehe ich nicht.

Gut mit delay(3000) hätte ich das gelöst. Das funktioniet dann auch. Aber will verdammt nochmal wissen, warum die for-Schleife nicht ihre Arbeit macht.

Bitte um Hilfe.

Hier der Code:

int pinLed = 13;
int pinTaster = 10;
int i=0;
int Flag;
int druck1, druck2;

void setup() {
 // put your setup code here, to run once:
Serial.begin(9600);
pinMode(pinLed,OUTPUT);
pinMode(pinTaster, INPUT_PULLUP);
}

void loop() {
 // put your main code here, to run repeatedly:

druck1 = digitalRead(pinTaster);            // erste Tasterabfrage
if (!druck1){
 delay(50);
 druck2 = digitalRead(pinTaster);         // zweite Tasterabfrage
 if (!druck2){
  
   if (Flag!=0)Flag=0;else Flag=1;       // soll den letzten Tasterzustand speichern und ändern, um einmal Led einzuschalten und beim 
 }}                                      // Druck auszuschalten
while(!digitalRead(pinTaster));          // weitermachen erst wenn Taster losgelassen ist


   if(Flag==1){                                    // bei 1. Tasterdruck soll die Led angehen, aber nach 3 Sekunden warten
     Serial.println("Die LED geht in 3 Sek an");
     for(i=0;i++;i>3000){                            // dafür soll i von 0 bis 3000 zählen 
       delay(1);                                     // einr Milisekunde delay bei jedem Zählen
      }
     if(i==3000);{                                   // bei 3000 also led an
     digitalWrite(pinLed,HIGH);
     }
     do{}
     while(digitalRead(pinTaster));
   }
 if(Flag==0){                                        // hier beim nächsten Tasterdruck soll led nach 3 sekundne aus gehen.
     Serial.println("Die LED geht in 3 Sek aus");
     i=0;
     for(i=0;i++;i>3000){
       delay(1);
      }
     if(i==3000);{
     digitalWrite(pinLed,LOW);
      }   
       do{}
     while(digitalRead(pinTaster));  
  }
}

Bitte setze Deinen Sketch in Codetags (oben links </> im Foreneditor oder [code] davor und [/code] dahinter - ohne die *).
Das kannst Du auch noch nachträglich durch Editieren tun. Bitte mach das, der Sketch ist besser zu lesen, besonders auf mobilen Geräten.

Wenn Du Zeitsteuerungen machen willst, dann löse Dich am Besten gleich von delay().
Schau Dir BlinkWithoutDeley an und die Nachtwächtererklärung (kein Witz).

Ansonsten ist Deine For-Schleife falsch:

// Dein Code
for(i=0;i++;i>3000)
// die Bedeutung
for(Initialisierung; solange wie; Änderung)
// also
for(int i=0;i <= 3000; i++)

Gruß Tommy

BigMemo:
Aber will verdammt nochmal wissen, warum die for-Schleife nicht ihre Arbeit macht.

Die Schleife funktioniert genau so verquer wie sie von Dir programmiert wurde.
Aber weil die von Dir programmierte Schleifenbedingung Quatsch ist, macht sie nicht das, was Du erwartest

Du möchtest die Schleife 3000 mal durchlaufen, das würde so funktionieren:

  for(i=0;i<3000;i++){                        // Schleife 3000 mal durchlaufen von i==0 bis i==2999

Die generelle Syntax einer for-Schleife ist:

for(Initialisierung;Bedingung;Inkrementierung) Statement;

Vielen Dank für die Antworten. Ich habe die for-Schleife falsch gelesen. Ich habe nicht solange i<3000, sondern bis i>3000 gelesen. Gut Fehler erkannt, Fehler gebannt.

Aber neues Problem:

for(i=0;i<3000;i++){
delay(1);
if(i==3000){
digitalWrite(pinLed,LOW);
}
}

Wieso geht er hier nicht in die if Funktion? Die Led leuchtet nicht.

BigMemo:
Vielen Dank für die Antworten. Ich habe die for-Schleife falsch gelesen. Ich habe nicht solange i<3000, sondern bis i>3000 gelesen. Gut Fehler erkannt, Fehler gebannt.

Aber neues Problem:

for(i=0;i<3000;i++){

delay(1);
if(i==3000){
digitalWrite(pinLed,LOW);
}
}




Wieso geht er hier nicht in die if Funktion? Die Led leuchtet nicht.

Weil er nur bis 2999 zählt. Er kommt nicht auf 3000 !

Ich bin so blöd...

Vielen lieben Dank. Super dass es so ein Forum gibt!