boucle for

Bonjours, J'essaie de faire clignoter un led 5 fois avec une boucle for et je ne comprends pas pkoi sa ne fonctionne pas
voici mon code

merci

int ledpin = 13;

void setup() {
pinMode(ledpin, OUTPUT);

}

void loop() {
  for (int compteur = 0; compteur < 5; compteur++) {
    digitalWrite(ledpin, compteur);
    delay(150);
    
  
    }

}

2 grosses erreurs :

  • avec digitalWrite(), le second paramètre doit être digital (1 ou 0). Ça ne sert à rien d'envoyer compteur qui va de 0 à 5.

  • dans la boucle, il faut allumer, attendre, éteindre puis à nouveau attendre avant de boucler. Tu as besoin de 2 digitalWrite() et deux delay().

bonjour,
sinon utilise boolean
un truc de ce genre

int LEDpin = 13;     


boolean running = false;

void setup()
{
  pinMode(LEDpin, OUTPUT);

}

void loop()
{
for (int compteur = 0; compteur < 5; compteur++) {
  { 
    delay(150);                        
    running = !running;              
    digitalWrite(LEDpin, running)      
  }
}

merci de vos réponse, j'ai refait ceci

int ledpin = 13;

void setup() {
pinMode(ledpin, OUTPUT);

}

void loop() {
  for (int compteur = 0; compteur < 5; compteur++) {
    digitalWrite(ledpin, HIGH);
    delay(500);
    digitalWrite(ledpin,LOW);
   delay(500);
  
    }

}

mon led clignote en continu et ne s'arrête pas après 5 fois.

Salut,

C'est normal que le clignotement de la led ne s’arrête pas après 5 fois, car le for sera à nouveau executé, principe de la boucle loop.

Si tu souhaites faire seulement une exécution de la boucle for, il faut modifier le programme avec un test de type if compteur > 5 ne rien faire sinon exécuter boucle ou passer par un boolean, voir code ci-dessous.
@+

int ledpin = 13;
boolean execution = false;

void setup() {
pinMode(ledpin, OUTPUT);

}

void loop() 
{
  if (execution==false)
  {
  for (compteur; compteur < 5; compteur++)
    {
    digitalWrite(ledpin, HIGH);
    delay(1000);
    digitalWrite(ledpin,LOW);
    delay(1000);
 
    }
    execution=true;
   }

}

minuit001:
merci de vos réponse, j'ai refait ceci

int ledpin = 13;

void setup() {
pinMode(ledpin, OUTPUT);

}

void loop() {
  for (int compteur = 0; compteur < 5; compteur++) {
    digitalWrite(ledpin, HIGH);
    delay(500);
    digitalWrite(ledpin,LOW);
  delay(500);
 
    }

}




mon led clignote en continu et ne s'arrête pas après 5 fois.

Sinon place ta boucle for dans le setup(), elle sera executée une seule fois

Merci votre aide m'es infiniment précieuse
J'ai refait ceci

const int boutonpin = 2;
const int ledpin = 13;
boolean buttonstate = 0;
boolean execution = false;

void setup() {
  pinMode(boutonpin, INPUT);
  pinMode(ledpin, OUTPUT);

}

void loop() {
  buttonstate = digitalRead(boutonpin);
  
  if (buttonstate == HIGH) {
    if (execution == false) {
      for (int i; i < 5; i ++) {
        digitalWrite(ledpin, HIGH);
        delay(500);
        digitalWrite(ledpin, LOW);
        delay(500);
        }
        execution = true;
        }
        }
    

}

Mon problème est que je ne comprends pourquoi quand j'appuie sur le bouton mon led clignote 5 fois comme je le désire mais quand je ré-appuie sur mon bouton mon led ne clignote plus... pourquoi la séquence ne recommence pas?

Merci!

Bonjour,

Quand tu as exécuté le clignotement une fois tu mets excution à true, il ne revient jamais à false -> tu n'exécutes plus le for

De plus dans le for il faut initialiser i
for (int i**=0**; i < 5; i ++) {

logique,
tu lui dis après la première exécution que execution = true;
donc execution n'est plus en false même si tu appuie sur le bouton.

ceci devrait inverser à chaque appuie la valeur de execution

if (buttonstate == HIGH) {
    if (execution == false) {
      for (int i; i < 5; i ++) {
        digitalWrite(ledpin, HIGH);
        delay(500);
        digitalWrite(ledpin, LOW);
        delay(500);
        }
        execution = !execution;
        }
        }

autre solution, sans boolean puisque tu as changé d'idée

si appuie sur bouton
faire la boucle for

if (digitalRead(boutonpin) == HIGH) {

      for (int i; i < 5; i ++) {
        digitalWrite(ledpin, HIGH);
        delay(500);
        digitalWrite(ledpin, LOW);
        delay(500);
        }

        }

slt tu peux aussi rajouter "else execution = false;" à la fin du "if (buttonstate == HIGH) {}" comme ça quand tu lache le bouton "execution" retombe à zéro et tu peux recommencer ça s'appelle un anti-rebond cela permet d'exécuter une tache qu'une seule fois, ici en l'occurrence ton "for"

const int boutonpin = 2;
const int ledpin = 13;
boolean buttonstate = 0;
boolean execution = false;

void setup() {
  pinMode(boutonpin, INPUT);
  pinMode(ledpin, OUTPUT);

}

void loop() {
  buttonstate = digitalRead(boutonpin);
  
  if (buttonstate == HIGH) {
    if (execution == false) {
      for (int i; i < 5; i ++) {
        digitalWrite(ledpin, HIGH);
        delay(500);
        digitalWrite(ledpin, LOW);
        delay(500);
        }
        execution = true;
        }
        } else execution = false;
    

}