/*
Name: AF_mandalorien31_SabreLaser.ino
Created: 30.05.2024
Author: jpbbricole/mandalorien31
https://forum.arduino.cc/t/clignoter-un-bandeau-led-rgb-et-utilisation-onebutton/1265286
*/
#include <Button.h> // https://github.com/madleech/Button
#include <Adafruit_NeoPixel.h>
const int pixelsPin = 6; // ruban de led connecter au pin 6
const int pixelsNombre = 16; // 60 led par metre
const int pixelsBrightness = 255; // luminosité de 0 a 255 max
Adafruit_NeoPixel pixels(pixelsNombre, pixelsPin, NEO_GRB + NEO_KHZ800);
const int boutonPin = 7; // Pin où est connecté le bouton, l'autre côté à GND
Button bouton(boutonPin); // Création du bouton
// https://www.rapidtables.com/web/color/RGB_Color.html
const unsigned long couleursListe[] = {0xFF0000, 0x00FF00, 0xFF, 0xFFFF00, 0xFFFFFF}; // Tableau des couleurs
const int sabreCouleursNombre = sizeof(couleursListe) / sizeof(couleursListe[0]); // Nombre de couleurs disponibles
boolean sabreEnAction = false; // Etat du sabre
int sabreCouleur = 0; // Numéro de la couleur active
const int sabreAllumageTempo = 35; // Tempo d'allumage des LED du sabre
boolean pixelFlashOn = false; // Si pixels allumés
unsigned long pixelFlashTempo = 200; // Tempo de clignotement
unsigned long pixelFlashMillis = millis(); // Tempo de clignotement, chrono
void setup()
{
Serial.begin(115200);
pixels.begin(); // initialisation du ruban de led (obligatoire)
pixels.setBrightness(pixelsBrightness);
pixels.show();
bouton.begin(); // Démarrage du bouton
}
void loop()
{
if (bouton.pressed()) // Bouton pressé
{
if (!sabreEnAction) // Si le sabre était arrêté
{
sabreEnAction = true;
sabreCouleur = 0;
ledAllumage(sabreCouleur, sabreAllumageTempo);
}
else
{
sabreCouleur ++;
if (sabreCouleur >= sabreCouleursNombre) // Si fin du cycle
{
sabreEnAction = false;
pixelFlashOn = false; // Pour éteindre
ledClignotement(sabreCouleur, pixelFlashOn);
}
else
{
ledAllumage(sabreCouleur, sabreAllumageTempo);
}
}
}
if (sabreEnAction && (millis() - pixelFlashMillis >= pixelFlashTempo)) // Si périone de flash
{
pixelFlashMillis = millis();
ledClignotement(sabreCouleur, pixelFlashOn);
pixelFlashOn = !pixelFlashOn; // Inverser la variable
}
}
void ledAllumage(int coulNum, int tempo)
{
Serial.println("Couleur " + String(coulNum));
for (int i = 0; i < pixelsNombre; i++) { // pour chaque led
pixels.setPixelColor(i, couleursListe[coulNum]);
pixels.show(); // pour que les leds s'allument
delay(tempo); // delai d'allumage apres chaque allumage du pixel precedent
}
}
void ledClignotement(int coulNum, boolean coulOn)
{
if (coulOn) // Si allumer
{
pixels.fill(couleursListe[coulNum]); // Allumer
}
else
{
pixels.fill(0); // Eteindre
}
pixels.show();
}