//selon @j-m-l
const int ledPin = 12; // LED
const int interruptionPin = 3; // pin d'interruption
boolean etat = HIGH;
void setup() {
Serial.begin(115200);
pinMode(interruptionPin, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
attachInterrupt(digitalPinToInterrupt(interruptionPin), fonctionBp, CHANGE); // surtout le mode CHANGE
}
void loop() {}
void fonctionBp () {
const unsigned long dureeRebond = 50; // filtrage des rebonds à 50 millis
static unsigned long tempsprecedent = -dureeRebond; // static pour ne pas perdre la valeur de la dernière transition
unsigned long temps = millis(); // temps au moment d'entrer dans l'ISR
if ((temps - tempsprecedent) >= dureeRebond ) {
//code qui s'execute lors de l'appui sur le BP
etat = (etat == LOW) ? HIGH : LOW; // la led change d'état une fois sur deux
if (etat == LOW) digitalWrite(ledPin, (digitalRead(ledPin) == LOW) ? HIGH : LOW);
}
tempsprecedent = temps;
}