Ciao a tutti, sono anni che non scrivo, e non uso arduino, comunque per fare un similatore di alba e tramondo, ho cmprato dei led rgb, che sto pilotando con la libreria FastLed, ho preso come esempio quello con la palette, riuscendo a simulare l' alba senza problemi.
Ora voglio aggiungere un tasto per switchare da un effetto ad un altro (alba, giorno, tramonto, notte e spento), ma ho un piccolo problema:
la mia funzione usa il delay per regolare la durata dell' alba, che vorrei impostare attorno ai 30 minuti, e siccome la lireria, effettic acirca 255 cicli per passare in rassegna tutti i colori della palette, mi ritrovo con dei delay di oltre 7 secondi, durante i queli se premo il tasto ovviamente non legge l' input.
esiste un modo per evitare di dover usare un delay cosi grande? o ci sono altri metodi per fare quello che voglio?
Grazie a tutti
allego il codice semplificato con solo la palette dell' alba, e nessun tasto per mostrarvi a logic ache sto usando
#include <FastLED.h>
#define LED_PIN 7
#define NUM_LEDS 2
#define LED_TYPE NEOPIXEL
#define BUTTON_MODE 9
//definisco varibili
CRGB led[NUM_LEDS];
CRGBPalette16 currentPalette;
TBlendType currentBlending;
uint8_t durataAlbaInMinuti = 2; //imposto durta dell' alba in minuti
long delayAlba;
int buttonState = 0;
void setup() {
Serial.begin(9600);
FastLED.addLeds<LED_TYPE, LED_PIN>(led, NUM_LEDS);
currentBlending = LINEARBLEND;
long durataAlbaInMS = durataAlbaInMinuti * 60000;
delayAlba = durataAlbaInMS / 240; //divindendo in 240 si evita il fade out dell' ultimo colore ma si perde qualche minuto, in cui però viene settato fisso il colore finale
pinMode(BUTTON_MODE, INPUT);
digitalWrite(BUTTON_MODE, HIGH);
Serial.println(durataAlbaInMS);
Serial.println(delayAlba);
}
void loop() {
//inizializzo palette
SetupAlbaPalette();
static int startIndex = 0; //indice colori
startIndex = startIndex + 1; // Velocità
static uint8_t luminosita = 2; //luminosita iniziale
if(luminosita < 254){
luminosita = luminosita +2; //velocità aumento luminosita
Serial.print("luminosita ");
Serial.println(luminosita);
}else{
luminosita = 255;
Serial.print("luminosita massima");
Serial.println(luminosita);
}
if(startIndex < 240){ //con 240 si evita il fade out dell' ultimo colore
Serial.print("startIndex ");
Serial.println(startIndex);
//cambio colore
cambiaColore( startIndex, luminosita);
FastLED.show();
FastLED.delay(delayAlba);
}else if(startIndex = 240){
Serial.println("fine");
led[0] = CRGB( 255, 255, 234);
FastLED.show();
delay(100000); //delay momentaneo messo per attendere
}
}
//////////////////////////////////////metodi
void cambiaColore( uint8_t colorIndex, uint8_t luminosita){
for( int i = 0; i < NUM_LEDS ; ++i) {
led[i] = ColorFromPalette( currentPalette, colorIndex, luminosita, currentBlending);
colorIndex += 1;
}
}
void SetupAlbaPalette(){
CRGB Colore1 = CRGB( 0, 0, 0);
CRGB Colore2 = CRGB( 6, 5, 34);
CRGB Colore3 = CRGB( 8, 7, 47);
CRGB Colore4 = CRGB( 13, 12, 55);
CRGB Colore5 = CRGB( 16, 16, 61);
CRGB Colore6 = CRGB( 29, 29, 83);
CRGB Colore7 = CRGB( 35, 35, 94);
CRGB Colore8 = CRGB( 57, 64, 106);
CRGB Colore9 = CRGB( 73, 86, 115);
CRGB Colore10 = CRGB( 92, 112, 126);
CRGB Colore11 = CRGB( 122, 152, 143);
CRGB Colore12 = CRGB( 156, 178, 153);
CRGB Colore13 = CRGB( 199, 210, 165);
CRGB Colore14 = CRGB( 220, 226, 171);
CRGB Colore15 = CRGB( 250, 249, 179);
CRGB Colore16 = CRGB( 255, 255, 234);
currentPalette = CRGBPalette16(Colore1, Colore2, Colore3, Colore4,
Colore5, Colore6, Colore7, Colore8,
Colore9, Colore10, Colore11, Colore12,
Colore13, Colore14, Colore15, Colore16 );
}