Ciao.
Dopo essere riuscito a programmare Arduino UNO per funzionare con delle led strips WS2812 (un programma molto semplice), poiché avrei necessità di occupare il minore spazio possibile come dimensioni dell’elettronica, ho pensato di ricorrere al Trinket della Adafruit.
In breve: alla pressione di un pulsante vengono accesi dei gruppi dei led in successione, che successivamente si spengono in fading.
Per utilizzare il trinket (dopo aver configurato l’IDE come previsto), ho modificato lo sketch, utilizzando il pin #0 come DataIn dei WS2812, e i pins #1 e #2 per collegare i due pulsanti che uso.
Però quando vado a caricare lo sketch su trinket, va tutto in tilt: i led si accendono alla rinfusa, si spengono peggio (sfarfallano in una maniere indecente) ed inoltre, random, rimane acceso qualche led ma colorato.
Non riesco a capire per quale motivo non funziona. posto il codice sotto.
Consigli?
Grazie
Andrea
/*
SIMULAZIONE DI 4 GRADINI - OGNI GRUPPO DI 5 LED RAPPRESENTA 1 GRADINO
I LED SI ACCENDONO IN SEQUENZA A SECONDA DELLA DIREZIONE E SI SPENGONO
IN FADING
*/
#include <Adafruit_NeoPixel.h>
#define PIN 0 //definisco una costante PIN a cui assegno il valore 0 - LINEA DATI
#define NumLed 24 //definisco una costante NumLed che mi indica quanti led ho nella striscia
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NumLed, PIN, NEO_GRB + NEO_KHZ800);
#define timer01 1000 //definisco il temporizzatore della scala
#define timer02 1500 //definisco il timer che regola la velocità di accensione degli scalini
#define timer03 15 //definisco il timer che regola la velocità di spegnimento dei led
const unsigned int IR1=1; //definisco la costante IR1 e la assegno al pin 1 - switch 1
const unsigned int IR2=2; //definisco la costante IR2 e la assegno al pin 2 - switch 2
int IR1State = LOW; //definisco la variabile IR1State e le setto a LOW - stato dello switch 1
int IR2State = LOW; //definisco la variabile IR2State e le setto a LOW - stato dello switch 2
void setup() {
strip.begin();
strip.show(); // Initialize all pixels to 'off'
pinMode (IR1, INPUT); //stabilisco che il pin di IR1 è in input
pinMode (IR2, INPUT); //stabilisco che il pin di IR2 è in input
}
void loop() {
IR1State = digitalRead (IR1); //leggo lo stato di IR1
IR2State = digitalRead (IR2); //leggo lo stato di IR2
if (IR1State == HIGH) {
Rampa01();
}
if (IR2State == HIGH) {
Rampa02();
}
} //fine loop
void Rampa01(){
strip.setBrightness(255);
for (int m=0; m<NumLed-1; m=m+1){
strip.setPixelColor (m, 255, 255, 255);
strip.setPixelColor (m=m+1, 255, 255, 255);
strip.setPixelColor (m=m+1, 255, 255, 255);
strip.setPixelColor (m=m+1, 255, 255, 255);
strip.setPixelColor (m=m+1, 255, 255, 255);
strip.show();
delay(timer02);
}
delay(timer01);
for (int i=255; i>=0 ; i--) {
strip.setBrightness (i);
strip.show();
delay (timer03);
}
}
void Rampa02(){
strip.setBrightness(255);
for (int m=NumLed-1; m>=0; m=m-1){
strip.setPixelColor (m, 255, 255, 255);
strip.setPixelColor (m=m-1, 255, 255, 255);
strip.setPixelColor (m=m-1, 255, 255, 255);
strip.setPixelColor (m=m-1, 255, 255, 255);
strip.setPixelColor (m=m-1, 255, 255, 255);
;
strip.show();
delay(timer02);
}
delay(timer01);
for (int i=255; i>=0 ; i--) {
strip.setBrightness (i);
strip.show();
delay (timer03);
}
}