Bonjour à tous,
bon ce n'est pas la première fois que je viens ici pour un problème de code avec des rubans Led, mais comme je lance mes projets tout les deux ou trois ans et que je fais très peu de code entre temps j'oublie malheureusement le peu accumulé entre chaque expérience...
Pour faire simple mon projet et de piloter simplement un strip led avec une douzaine de boutons (type arcade).
A savoir : bouton enfoncé le ruban s'allume d'une couleur ou un pattern / bouton relâché le ruban s'éteint. + si deux boutons ensemble le mélange de couleur se fait (au moins des couleurs fixes)
Voilà où j'en suis : j'arrive à avoir mes différentes couleurs et mes effets sur chaque boutons mais il y a comme un léger clignotement et peu de puissance sur les couleurs fixes. Pour les effets il marche beaucoup moins bien quand je les contraints aux boutons (fonction if) que lorsque qu'il marche de façon autonome.
Et je ne comprend pas pourquoi mais quand j'ai par exemple le rouge et le vert en fixe dans mon code. Le vert va être stable et dés que j'ajoute une ligne après pour le bleu par exemple, le vert clignote... seule ma dernière couleur dans mon loop est stable...
Voici où j'en suis de mon code et j'avoue que malgré mes recherches je ne comprend pas bien où ça coince, comme souvent j'ai l'impression d'être proche de la vérité et qu'il ne me reste qu'un truc à modifier pour que tout fonctionne comme je le souhaite. Mais je sais aussi que ça se trouve je ne suis pas du tout parti dans la bonne direction et mes fonctions ne sont pas du tout les bonnes auquel cas je ne pourrais jamais faire ce que je souhaite, c'est pourquoi je viens vous demander votre aide.
Par avance merci j'espère ne pas trop être à coté de la plaque et pouvoir trouver une solution à mon projet.
Le code ci dessous :
#include <FastLED.h>
#include <FastLED_NeoPixel.h>
#define LED_PIN 2
#define DATA_PIN 2
#define NUM_LEDS 44
#define FRAMES_PER_SECOND 120
CRGB leds[NUM_LEDS];
FastLED_NeoPixel<NUM_LEDS, DATA_PIN, NEO_GRB> strip;
void setLEDs(int K, int N) {
FastLED.clear();
for (int i = 0; i < NUM_LEDS; i++) {
if (i % N == K) leds[i].setRGB(255, 0, 255); // set red LED
}
FastLED.show();
}
void setup() {
delay(3000);
FastLED.addLeds<WS2813, LED_PIN, RGB>(leds, NUM_LEDS);
FastLED.setBrightness(255);
pinMode(3, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
pinMode(5, INPUT_PULLUP);
pinMode(6, INPUT_PULLUP);
pinMode(7, INPUT_PULLUP);
pinMode(8, INPUT_PULLUP);
pinMode(9, INPUT_PULLUP);
pinMode(10, INPUT_PULLUP);
pinMode(11, INPUT_PULLUP);
pinMode(12, INPUT_PULLUP);
pinMode(13, INPUT_PULLUP);
}
uint8_t gHue = 0;
void loop() {
if (!digitalRead(3)) {
fill_solid(leds, NUM_LEDS, CRGB(255, 0, 0));
FastLED.show();
}
if (digitalRead(3)) {
fill_solid(leds, NUM_LEDS, CRGB(0, 0, 0));
FastLED.show();
}
if (!digitalRead(4)) {
fill_solid(leds, NUM_LEDS, CRGB(0, 255, 0));
FastLED.show();
}
if (digitalRead(4)) {
fill_solid(leds, NUM_LEDS, CRGB(0, 0, 0));
FastLED.show();
}
if (!digitalRead(5)) {
fill_solid(leds, NUM_LEDS, CRGB(0, 0, 255));
FastLED.show();
}
if (digitalRead(5)) {
fill_solid(leds, NUM_LEDS, CRGB(0, 0, 0));
FastLED.show();
}
if (!digitalRead(6)) {
fill_solid(leds, NUM_LEDS, CRGB(255, 255, 255));
FastLED.show();
delay(50);
fill_solid(leds, NUM_LEDS, CRGB(0, 0, 0));
FastLED.show();
delay(50);
}
if (!digitalRead(7)) {
leds[0] = CRGB(0, 0, 255);
FastLED.show();
delay(250);
leds[24] = CRGB(0, 0, 255);
FastLED.show();
delay(250);
leds[42] = CRGB(0, 0, 255);
FastLED.show();
delay(250);
leds[9] = CRGB(0, 0, 255);
FastLED.show();
delay(250);
leds[38] = CRGB(0, 0, 255);
FastLED.show();
delay(250);
}
if (!digitalRead(8)) {
int N = 4;
for (int i = 0; i < N; i++) {
setLEDs(i, N);
delay(50);
}
FastLED.show();
}
if (!digitalRead(9)) {
fill_rainbow(leds, NUM_LEDS, gHue, 7);
addGlitter(80);
FastLED.show();
// insert a delay to keep the framerate modest
FastLED.delay(1000 / FRAMES_PER_SECOND);
// do some periodic updates
EVERY_N_MILLISECONDS(20) {
gHue++;
} // slowly cycle the "base color" through the rainbow
}
if (!digitalRead(10)) {
fadeToBlackBy(leds, NUM_LEDS, 10);
int pos = random16(NUM_LEDS);
leds[pos] += CHSV(gHue + random8(64), 200, 255);
FastLED.show();
// insert a delay to keep the framerate modest
FastLED.delay(1000 / FRAMES_PER_SECOND);
// do some periodic updates
EVERY_N_MILLISECONDS(20) {
gHue++;
} // slowly cycle the "base color" through the rainbow
}
if (!digitalRead(11)) {
fadeToBlackBy(leds, NUM_LEDS, 20);
int pos = beatsin16(13, 0, NUM_LEDS - 1);
leds[pos] += CHSV(gHue, 255, 192);
FastLED.show();
// insert a delay to keep the framerate modest
FastLED.delay(1000 / FRAMES_PER_SECOND);
// do some periodic updates
EVERY_N_MILLISECONDS(20) {
gHue++;
} // slowly cycle the "base color" through the rainbow
}
}
void addGlitter(fract8 chanceOfGlitter) {
if (random8() < chanceOfGlitter) {
leds[random16(NUM_LEDS)] += CRGB(125, 125, 125);
}
}
Merci et bonne soirée