Problème LED clignotement

Bonjour,

J’ai un souci avec ce code:

#include <Wire.h>
#include "Adafruit_MCP23017.h"

Adafruit_MCP23017 mcp;

const int bouton = 2;     
int etatBouton = 0;         


void setup() {
  mcp.begin();  

  mcp.pinMode(0, OUTPUT);      
  pinMode(bouton, INPUT_PULLUP);
  mcp.digitalWrite(0, LOW);

}

void loop(){

  etatBouton = digitalRead(bouton);

  if(etatBouton == LOW) {     

    mcp.digitalWrite(0, HIGH);
  }

  else {
    mcp.digitalWrite(0, HIGH);
    delay(500);
    mcp.digitalWrite(0, LOW);
    delay(500);  
      }
}

J’ai 1 bouton poussoir et 1 led qui est reliée sur la broche d’un expander I2C.

Quand je ne touche pas au bouton poussoir, la led clignote. Quand je presse le bouton cette dernière devient fixe. Par contre, quand je le relâche elle se remet à clignoter. Comment maintenir son état fixe après avoir relâché le bouton poussoir ?

Merci.

Salut

Il suffit de mémoriser le fait que le bouton a été appuyé dans une variable statique ou globale et ensuite tester cette variable dans la suite du code.

Il y a cependant un gros défaut dans ce code : si le bouton est appuyé brièvement pendant que le code de la partie else s'exécute, l'appui ne sera pas vu. L'utilisation de delay() n'est pas adaptée. Il faut plutôt utiliser millis(), comme dans l'exemple BlinkWithoutDelay.

@+

Merci pour la réponse.

Voici un code avec millis qui me permet d’avoir une LED qui clignote et qui devient fixe quand je presse le bouton poussoir. Cependant, lorsque je le relâche, elle se remet à clignoter de plus bel.

Comment la maintenir continuellement fixe lorsque je relâche le BP ? Merci.

#include <Wire.h>
#include "Adafruit_MCP23017.h"

Adafruit_MCP23017 mcp;

const byte bouton=2;

bool blinking = false;
unsigned long blinkInterval = 250; 
unsigned long currentMillis; 
unsigned long previousMillis;
 
void setup() {
 
 mcp.begin();
 pinMode(bouton, INPUT_PULLUP);
 mcp.pinMode(0, OUTPUT);
}
 
void loop() {

 if (blinking) {
  currentMillis = millis(); 
  if ((unsigned long)(currentMillis - previousMillis) >= blinkInterval) {
   mcp.digitalWrite(0, !mcp.digitalRead(0)); 
   previousMillis = currentMillis; 
  }
 } else {
  mcp.digitalWrite(0, HIGH); 
 }
 int reading = digitalRead(bouton);
 delay(50); 
 
 if (reading==HIGH) 
  blinking=true; 
 else
  blinking=false; 
}

Normal.

Si le bouton est relâché la variable blinking est remise à ZERO :

  if (reading==HIGH)
    blinking=true;
  else
    blinking=false;

@+

Merci pour ta réponse.

Oui c'est cette zone que je dois modifier. Car si je presse le bouton, la LED devient fixe, si je le relâche elle re-clignote. Mais comment mémoriser mon état après un appuie ? Je souhaite qu'elle reste indéfiniment fixe après avoir appuyé sur le bouton... Et ça je sais pas faire.

Et en supprimant tout simplement :

  else
    blinking=false;

?

Je viens d'effacer cette partie et mise "false" en"true" dans la partie setup et ça fonctionne. Super merci.