Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*********
- title : demo
- ESP32_WS2812B_Button
- target : ESP32 Wroom
- leds WS2812b
- buttons * 1
- author : Patrick Dubois
- licence: public domain
- *********/
- // Import required libraries
- // if the library is global use <>
- // if the library is local use ""
- // ajouter les librairies pour les WS2812b
- // créer objet ruban de leds
- #define buttonPin 12 // GPIO 12
- #define baudrateSerial 38400 // vitesse communication Arduino - PC
- volatile bool bFirstRun = false,
- bLedOn = false,
- bStatus = false;
- void IRAM_ATTR onButtonEvent() { // le code doit être le plus court possible dans une interruption. on se contente de changer des variables.
- if (!bFirstRun) {
- bFirstRun = true; // on vient de lancer le programme, on n'est ni allumé ni éteint :-)
- }
- // bFirstRun = false ? true : true; // version alternative avec opérateur ternaire
- bLedOn = !bLedOn; // on inverse l'état. si éteint, on allume. si allumé, on éteint
- }
- void setup() {
- Serial.begin(baudrateSerial);
- // initialiser si besoin objet ruban de leds
- pinMode(buttonPin, INPUT_PULLDOWN);
- attachInterrupt(digitalPinToInterrupt(buttonPin), onButtonEvent, FALLING); // gestion du bouton par interruption
- }
- void LightOnTheLeds() {
- // on allume, faire boucle allumage
- bStatus = HIGH; // ou true
- }
- void LightOffTheLeds() {
- // on éteint, faire boucle extinction
- bStatus = LOW; // ou false
- }
- void loop() {
- if (bFirstRun){ // on a appuyé au moins une fois sur le bouton, la boucle est activée
- detachInterrupt(digitalPinToInterrupt(buttonPin)); // désactivation de l'interruption pour éviter l'empilement
- if (bLedOn && !bStatus) { // si on a demandé l'allumage et que c'est éteint
- LightOnTheLeds(); // si c'est déjà allumé, inutile d'appeler la fonction
- }
- if (!bLedOn && bStatus) { // si on a demandé l'extinction et que c'est allumé
- LightOffTheLeds(); // si c'est déjà éteint, inutile d'appeler la fonction
- }
- attachInterrupt(digitalPinToInterrupt(buttonPin), onButtonEvent, FALLING); // on réactive
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement