#include <FastLED.h>
#define NUM_LEDS 34 // Nombre total de LEDs
#define DATA_PIN 19 // Broche valide pour ESP32 (par exemple 13)
CRGB AliceSketchLeds[NUM_LEDS];
void setup() {
// Initialiser les LEDs
FastLED.addLeds<NEOPIXEL, DATA_PIN>(AliceSketchLeds, NUM_LEDS);
FastLED.clear(); // Effacer les LEDs
FastLED.show(); // Mettre à jour les LEDs pour refléter l'effacement
}
void loop() {
// Couleur de l'eau turquoise (fond)
CRGB turquoise = CRGB(64, 224, 208); // RGB pour une couleur turquoise
// Couleur de la vague bleue
CRGB blue = CRGB::Blue; // Couleur bleue de base
// Appel de la fonction vague avec des paramètres personnalisés
vague(2000, blue, turquoise, 10, 50);
}
void vague(const int duration, const CRGB& startColor, const CRGB& endColor, uint8_t waveSize, int delayTime) {
uint32_t startMillis = millis(); // Enregistrer le moment où la vague commence
// Calculer la position de la vague en fonction du temps écoulé
uint32_t currentMillis = millis();
uint32_t elapsedMillis = 0;
bool continue_loop = true;
while (continue_loop) {
currentMillis = millis();
elapsedMillis = currentMillis - startMillis;
// Réinitialiser la position après la durée de la vague
if (elapsedMillis >= duration) {
startMillis = currentMillis;
continue_loop = false;
elapsedMillis = 0;
}
uint8_t position = map(elapsedMillis, 0, duration, 0, NUM_LEDS - 1); // Utilisation de 'duration' ici
// Effacer les LEDs avec la couleur de fond spécifiée (endColor)
fill_solid(AliceSketchLeds, NUM_LEDS, endColor);
// Définir une fonction de luminosité personnalisée en fonction de waveSize
auto customBrightness = [&](uint8_t distance) {
// Ajuster la luminosité en fonction du nombre de LEDs de la vague
return map(distance, 0, waveSize, 255, 0); // Exemple de mappage linéaire inverse
};
// Appliquer la vague lumineuse
for (int i = 0; i < NUM_LEDS; i++) {
uint8_t distance = abs(position - (i + waveSize));
if (distance < waveSize) { // Limiter l'effet de la vague aux LEDs dans la zone de taille waveSize
uint8_t brightness = customBrightness(distance);
AliceSketchLeds[i] = blend(AliceSketchLeds[i], startColor, brightness); // Mélanger la couleur de la vague avec la couleur actuelle de la LED
}
}
FastLED.show(); // Mettre à jour les LEDs après l'application de la vague
delay(delayTime); // Ajouter un délai à chaque itération de la boucle
}
}