Per iniziare a programmare i LED Neopixel, prodotto inventato e distribuito da Adafruit, ho scaricato la libreria FastLED.
Copiando la libreria nella cartella delle librerie di Arduino automaticamente vengono caricati gli esempi. Per fare in modo che gli esempi funzionino è importante controllare ed eventualmente settare correttamente il pin a cui è collegato la linea seriale della striscia Neopixel ed il numero di led. Negli esempi viene usata la costante LED_PIN per indicare il Pin a cui collegare la striscia LED Neopixel mentre per il numero di Led viene usata la costante NUM_LEDS.
Nel repository GITHUB c’è la documentazione per capire come usare la libreria FastLED , per una documentazione completa della libreria FastLED fare riferimento a questo link.
Ho trovato molto interessante questa funzione:
// limit my draw to 5W
FastLED.setMaxPowerInMilliWatts(5000);
Come primo test per esplorare la libreria FastLED ho scritto il seguente codice per un a disco LED formato da 5 anelli.
La parte posteriore del disco presente i contatti per le varie connessioni.
Quindi nella figura di seguito i fili saldati alle piazzole.
Per testare il disco ho caricato uno sketch di prova ecco il risultato:
Il codice scritto è elementare è il primo passo per ottenere un primo risultato funzionante.
#include “FastLED.h”
FASTLED_USING_NAMESPACE
// This DemoRing scketch is to test neopixel ring consisting on five different rings
// for more details please refer to openprojects.altervista.org
#if defined(FASTLED_VERSION) && (FASTLED_VERSION < 3001000)
#warning “Requires FastLED 3.1 or later; check github for latest code.”
#endif
#define DATA_PIN 3
//#define CLK_PIN 4
#define LED_TYPE WS2811
#define COLOR_ORDER GRB
#define NUM_LEDS 61
#define FIRST_RING 1
#define SECOND_RING 8
#define THIRD_RING 12
#define FOURTH_RING 16
#define FIFTH_RING 24
CRGB leds[NUM_LEDS];
int i;
int j;
int k;
int l;
int m;
#define BRIGHTNESS 30
#define FRAMES_PER_SECOND 120
void setup() {
delay(3000); // 3 second delay for recovery
// tell FastLED about the LED strip configuration
FastLED.addLeds<LED_TYPE,DATA_PIN,COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
//FastLED.addLeds<LED_TYPE,DATA_PIN,CLK_PIN,COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
// set master brightness control
FastLED.setBrightness(BRIGHTNESS);
}
void loop()
{
// Light on the Frist Ring
for( i = 0; i < FIRST_RING; i++) {
leds[i] = CRGB::Red;
}
FastLED.show();
delay(500);
// Light off the Frist Ring
for( i = 0; i < FIRST_RING; i++) {
leds[i] = CRGB::Black;
}
FastLED.show();
delay(500);
// Light on the Second Ring
for( j = i; j < (i + SECOND_RING); j++) {
leds[j] = CRGB::Red;
}
FastLED.show();
delay(500);
// Light off the Second Ring
for( j = i; j < (i + SECOND_RING); j++) {
leds[j] = CRGB::Black;
}
FastLED.show();
delay(500);
// Light on the Third Ring
for( k = j; k < ( j + THIRD_RING); k++) {
leds[k] = CRGB::Red;
}
FastLED.show();
delay(500);
// Light off the Third Ring
for( k = j; k < ( j + THIRD_RING); k++){
leds[k] = CRGB::Black;
}
FastLED.show();
delay(500);
// Light on the Fourth Ring
for( l = k; l < (k + FOURTH_RING); l++) {
leds[l] = CRGB::Red;
}
FastLED.show();
delay(500);
// Light off the Fourth Ring
for( l = k; l < (k + FOURTH_RING); l++) {
leds[l] = CRGB::Black;
}
FastLED.show();
delay(500);
// Light on the Fifth Ring
for( m = l; m < (l + FIFTH_RING); m++) {
leds[m] = CRGB::Red;
}
FastLED.show();
delay(500);
// Light off the Fifth Ring
for( m = l; m < (l + FIFTH_RING); m++) {
leds[m] = CRGB::Black;
}
FastLED.show();
delay(500);
}
Ecco il risultato: