[RESOLU] Led qui ne veulent pas s'éteindre

Bonjour,

J'ai des leds témoins que j'allume ou éteint selon certains critères avec le code suivant qui fonctionne :

{
      if (HProg >= 1100 && HProg <= 1130)
        {
          analogWrite(LedBleue, valupLedBleue); digitalWrite(LedEclLedBleue, HIGH); lcd.setCursor(9,1); lcd.print("OK"); c = 1; // Allumage progressif de l'éclairage Led Bleue et allumage de la led témoin
        }
        
      else if (HProg > 1130 && HProg <= 1200)
        {
          analogWrite(LedBleue, 255); digitalWrite(LedEclLedBleue, HIGH); lcd.setCursor(9,1); lcd.print("OK"); c = 1;
        }
      else if (HProg > 1200 && HProg <= 1230)
        {
          analogWrite(LedBleue, valdownLedBleue); digitalWrite(LedEclLedBleue, HIGH); lcd.setCursor(9,1); lcd.print("OK");  c = 1;  
        }
      else if (HProg >= 2115 && HProg <= 2145) // Si il est 21h15
        {
          analogWrite(LedBleue, valupLedBleue); digitalWrite(LedEclLedBleue, HIGH); lcd.setCursor(9,1); lcd.print("OK"); c = 1;
        }
      else if (HProg > 2145 && HProg <= 2230) 
        {
          analogWrite(LedBleue, 255); digitalWrite(LedEclLedBleue,HIGH); lcd.setCursor(9,1); lcd.print("OK"); c = 1;
        }
      else if (HProg > 2230 && HProg <=2300)
        {
          analogWrite(LedBleue, valdownLedBleue); digitalWrite(LedEclLedBleue,HIGH); lcd.setCursor(9,1); lcd.print("OK"); c = 1; 
        }
     
  
      else 
        {
          analogWrite(LedBleue, 0);digitalWrite(LedEclLedBleue, LOW); lcd.setCursor(9,1); lcd.print("NO"); c = 0; 
        }
      }

Afin d'éviter d'écrire à chaque ligne : "lcd.setCursor(9,1); lcd.print("OK"); c = 1;" je l'ai modifié comme suit :

{
      if (HProg >= 1100 && HProg <= 1130)  
        {
          analogWrite(LedBleue, valupLedBleue); digitalWrite(LedEclLedBleue, HIGH); c = 1; // Allumage progressif de l'éclairage Led Bleue et allumage de la led témoin
        }
        
      else if (HProg > 1130 && HProg <= 1200)
        {
          analogWrite(LedBleue, 255); digitalWrite(LedEclLedBleue, HIGH); c = 1;
        }
      else if (HProg > 1200 && HProg <= 1230)        {
          analogWrite(LedBleue, valdownLedBleue); digitalWrite(LedEclLedBleue, HIGH);   c = 1;  
        }
      else if (HProg >= 2115 && HProg <= 2145)
        {
          analogWrite(LedBleue, valupLedBleue); digitalWrite(LedEclLedBleue, HIGH);  c = 1; // Allumage progressif de l'éclairage Led Bleue
        }
      else if (HProg > 2145 && HProg <= 2230)  // Si il est entre 21h45 et 22h00
        {
          analogWrite(LedBleue, 255); digitalWrite(LedEclLedBleue,HIGH);  c = 1;
        }
      else if (HProg > 2230 && HProg <=2300)
        {
          analogWrite(LedBleue, valdownLedBleue); digitalWrite(LedEclLedBleue,HIGH);  c = 1;  //  Extinction progressive des leds bleues
        }
      else if (c == 1)
        {
          lcd.setCursor(9,1); lcd.print("OK");
         }
  
      else 
        {
          analogWrite(LedBleue, 0);digitalWrite(LedEclLedBleue, LOW); lcd.setCursor(9,1); lcd.print("NO"); c = 0; // Eteint la led témoin et l'éclairage leds bleues
        }

et là ça ne fonctionne pas, la led témoin "LedEclLedBleue" ne s'éteint plus. La variable c me sert également pour vérifier l'état de l'éclairage quand j'appuie sur un BP pour éteindre ou allumer manuellement l'éclairage bleu.

Comme je suis novice en code (comme vous pouvez le voir), je n'arrive pas à trouver ce qui bloque.

Si quelqu'un peut m'aider,

Merci

Si vous gardez le else pour la partie lcd alors il ne sera pas exécuté si un des if au dessus a été exécuté

Pour mieux comprendre votre code ressemble cela :

Si condition1 faire action1
Sinon si condition2 faire action2
Sinon si condition3 faire action3
[color=red][b]Sinon[/b][/color] si condition4 faire action4

Vous voyez bien que si condition2 est vraie alors action2 sera exécutée et à cause des "sinon" la condition4 ne sera même pas évaluée et action4 donc pas exécutée

Alors que Si vous écrivez

Si condition1 faire action1
Sinon si condition2 faire action2
Sinon si condition3 faire action3
Si condition4 faire action4

Dans ce cas condition4 sera évaluée indépendamment des conditions précédentes

les else if sont mutuellement exclusif. Si tu en exécutes un, les autres sont ignorés. Du coup la partie qui commence avec le else if c==1 n'est exécuté que si aucune des conditions précédentes n'est valide.

Il faudrait que tu mettes sur le papier les conditions de fonctionnement de ton automate pour voir comment tout cela devrait s'enchaîner.

ok,

J'ai tout compris. encore merci pour ces explications. :slight_smile:

J'aurai du réfléchir un peu + car une fois l'explication donnée çà parait évident

Bonjour,
j'avais quant-à moi plutôt tendance à oublier les else (qui n'en a jamais oublié ?)
utilisés correctement il peuvent éviter au programme de faire des opération inutiles, et prouvent qu'on a bien compris ce qu'on fait