Go Down

Topic: semplificare/autmatizzare codice per led WS2812b (Read 79 times) previous topic - next topic

zorro101

Mar 04, 2020, 03:13 pm Last Edit: Mar 04, 2020, 03:43 pm by zorro101
ciao a tutti
ho fatto un piccolo codice a(llegato) per realizzare una specie di onda con led WS2812.
l'idea è quello di sfruttare la diversa luminosità dei singoli led per proiettare su una parete un'onda (mettendo la striscia piatta con i led rivolti verso l'alto, attaccandola alla parete)
il codice che ho fatto per prova gestisce 3 led con intensità minore sui 2 estremi e maggiore su quello al centro e fa lo scroll da una parte a l'altra a rimbalzo.
mi piacerebbe poter variare il numero di led a piacere, mantenendo una sorta di curva (gestita con le diverese intensità) e magari poter scegliere anche il colore, tutto senza dover modificare ogni volta il codice.
qualcuno ha qualche idea su come poter fare?
grazie in anticipo
ps. per chiarezza dico che se metto la striscia led di piatto con i led rivolti verso l'alto e la metto attaccata ad una parete, il risultato che ottengo (o che vorrei ottenere a regime) è una specie di onda che si muove da un lato all'altro.
ciao
Code: [Select]
//onda da 3
#include <FastLED.h>

#define NUM_LEDS 15

CRGB leds[NUM_LEDS];

void setup() {
  FastLED.addLeds<WS2812, 5, GRB>(leds, NUM_LEDS);
  FastLED.setBrightness(50);
}

void loop() {
  for (int i = 2; i < NUM_LEDS; i++) {
leds[i-3] = CRGB(0,0,0);
leds[i-2] = CRGB(20,0,0);
leds[i-1] = CRGB(100,0,0);
leds[i]   = CRGB(20,0,0);
FastLED.show();
  delay(100);
  }
  for (int i = NUM_LEDS -1; i > 1; i--) {
leds[i+1] = CRGB(0,0,0);
leds[i]   = CRGB(20,0,0);
leds[i-1] = CRGB(100,0,0);
leds[i-2] = CRGB(20,0,0);
FastLED.show();
  delay(100);
  }
}

Go Up