Alternative a FastLed fade palette e delay

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 );
}

L'unica è abbandonare la logica a delay() e passare alla logica usando millis()
Vedi qui: "Irrigazione con blynk - #10 by gpb01"

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.