Commuter à l’aide d’un bouton poussoir

Commuter à l’aide d’un bouton poussoir

int pin_LED = 13;     // port numérique associé à la LED intégrée
int pin_button = 2;   // port numérique lié au bouton poussoir
int state = LOW;      // variable d'état de la LED
 
void setup() {
    pinMode(pin_LED, OUTPUT);   // réglage du port de la LED en mode SORTIE
    pinMode(pin_button, INPUT); // réglage du port du bouton en mode ENTREE
}
 
void loop() {
    if (digitalRead(pin_button) == HIGH) {   // si le bouton est pressé ...
        state = !state;                      // ... inversion de la variable d'état de la LED (allumée<->éteinte)
    }
    digitalWrite(pin, state);   // action sur la LED (allumage ou extinction)
}

Que se passe-t-il ??

Appeler le professeur

Pour remédier au problème, on utilise une interruption :

int pin_LED = 13;          // port numérique associé à la LED intégrée
int pin_button = 2;        // port numérique lié au bouton poussoir
volatile int state = LOW;  // variable d'état de la LED (précédée de volatile)

void setup() {
    pinMode(pin_LED, OUTPUT);   // réglage du port de la LED en mode SORTIE
    attachInterrupt(digitalPinToInterrupt(pin_button), blink, CHANGE);
}

void loop() {
    digitalWrite(pin_LED, state);   // action sur LED (allumage ou extinction)
}

void blink() {
    state = !state;      // inversion de la variable d'état de la LED
}

Observer et expliquer …

Appeler le professeur

 

Pour en savoir plus …