Sortir d'une boucle For

Bonsoir,

J'ai un programme tout simple qui consiste à allumer une LED en fondu. J'aimerais pouvoir sortir de la boucle quand la LED est totalement allumée.

int led = 9;
 
void setup()  {
  pinMode(led, OUTPUT);
}
 

void loop()  {
  for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {   
    
    analogWrite(led, fadeValue);  
    delay(50);                           
  }
}

J'ai essayé en rajoutant un IF :

int led = 9;
 
void setup()  {
  pinMode(led, OUTPUT);
}
 

void loop()  {
  for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {   
    
    analogWrite(led, fadeValue); 
    delay(50);      

    if( fadeValue == 255){
         analogWrite(9, LOW);
                    
   }
 }
}

Avec un booléen :

  if (stop = true);
  for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) {  
    analogWrite(9, fadeValue);       
    delay(30); 
   stop = false;
  }

En attente d'une réponse de votre part je vous souhaite une bonne soirée.

J'aimerais pouvoir sortir de la boucle

De la boucle loop? on ne peut pas vraiment, il faut que le microcontrôleur fasse quelque chose. Il ne peut pas ne rien faire. Pour lui demander de ne rien faire, on l'enferme dans une autre boucle dont il ne peut sortir. En général;
while(true);
C'est à dite "tant que true est vrai, tu recommence".

Setup est exécuté une fois. Puis loop est exécutée en boucle. Si tu veux que ton programme ne s'exécute qu'une seule fois, met le dans le setup, ou met le while(true)

Cela répond à ta question?

Salut ,

si la boucle for n ' est pas dans la loop , pour interrompre il faut placer un break ;

un truc comme ca :

for ( byte i = 0; i < 10; i++ ) {
	
	Serial.print (i);
	if ( i == 5 ) break;
}

olivier_pecheux:
De la boucle loop? on ne peut pas vraiment, il faut que le microcontrôleur fasse quelque chose. Il ne peut pas ne rien faire. Pour lui demander de ne rien faire, on l'enferme dans une autre boucle dont il ne peut sortir. En général;
while(true);
C'est à dite "tant que true est vrai, tu recommence".

Setup est exécuté une fois. Puis loop est exécutée en boucle. Si tu veux que ton programme ne s'exécute qu'une seule fois, met le dans le setup, ou met le while(true)

Cela répond à ta question?

De la boucle FOR j'aurais du préciser :slight_smile:

iznobe:
Salut ,

si la boucle for n ' est pas dans la loop , pour interrompre il faut placer un break ;

un truc comme ca :

for ( byte i = 0; i < 10; i++ ) {

Serial.print (i);
if ( i == 5 ) break;
}

J'ai essayé, le "break" fait sortir de la boucle for quand "i==5" mais ré-entre de nouveau dans la boucle for.

J'aimerais avoir un boucle for qui se répète juste une fois ou un équivalent, je peux peu être en prenant l'exemple ci-dessus, ajouter à chaque ligne +1 jusqu'à que la valeur atteigne 10 avant de stagner à 10 sans repartir à zéro ?

Bonjour,

Tu sors de la boucle for quand la condition limite est atteinte. Dans ton premier programme tu sors quand fadeValue devient >255. Il n'y a rien d'autre à faire.
Le problème c'est que comme la boucle for est dans la loop() elle est exécutée indéfiniment. Si tu veux l'exécuter qu'une seule fois mets la sans le setup()

Il vaut mieux que tu crées deux fonctions hors de la loop: un Fade IN, un Fade Out, que tu appelleras depuis ta boucle principale avec des conditions.

karistouf:
Il vaut mieux que tu crées deux fonctions hors de la loop: un Fade IN, un Fade Out, que tu appelleras depuis ta boucle principale avec des conditions.

Je pense que c'est la meilleure façon, merci de votre aide je vais essayer de me débrouiller.

bon aller , je met le code complet ...

c ' est dur de lire parfois :grin:

il faut faire comme ca :

//////////////////// mettre la boucle for EN DESSOUS de cette ligne : void setup () { 
void setup() {
    // put your setup code here, to run once:
//// ICI
for ( byte i = 0; i < 10; i++ ) {
    
    Serial.print (i);
    if ( i == 5 ) break;
}
//// ICI 
}
//////////////////// mettre la boucle for EN DESSUS de cette ligne : void loop () { 
void loop() {
    // put your main code here, to run repeatedly:

}

si là tu ne comprends pas ce que tout le monde dis depuis le depart , je pense que ca va etre compliqué pour la suite , ni quoi ecrire pour te faire comprendre !!!

C'est bon j'ai résolu mon problème, c'était trèèèèèèès bête !

Je voulais avoir une lumière progressive dont on peut régler la durée et qui s’arrête une fois qu'elle a atteint la valeur max soit 255.

Voilà une solution simple et efficace :

int led = 9;
int lumiere_progressive = 0;

 
void setup()  {
  pinMode(led, OUTPUT);
  Serial.begin(9600);
  
}
void loop() {
while(lumiere_progressive < 255){

lumiere_progressive++ ; 
analogWrite(led, lumiere_progressive);
Serial.println(lumiere_progressive);
delay(30);
}

}

il n ' y a meme plus de boucle for là !! :o

iznobe:
il n ' y a meme plus de boucle for là !! :o

Oui haha, j'en avais marre elle me posait trop de problème hahaha

Bonjour aquajon,

aquajon:
C'est bon j'ai résolu mon problème, c'était trèèèèèèès bête !

Je voulais avoir une lumière progressive dont on peut régler la durée et qui s’arrête une fois qu'elle a atteint la valeur max soit 255.

Voilà une solution simple et efficace :

int led = 9;

int lumiere_progressive = 0;

void setup()  {
 pinMode(led, OUTPUT);
 Serial.begin(9600);
 
}
void loop() {
while(lumiere_progressive < 255){

lumiere_progressive++ ;
analogWrite(led, lumiere_progressive);
Serial.println(lumiere_progressive);
delay(30);
}

}

Comme une boucle while c'est quasi la même chose qu'une boucle for , votre code ci-dessus a exactement le même effet que votre code de votre premier post.

Cordialement,
bidouilleelec