Problema FastLED.show() ignora delay() su ESP8266

Salve; sono uno studente alle prime prese con schede ESP; l'idea finale di tutto il progetto prevederebbe l'uso di un sensore di gesto da accoppiare ad una striscia-led e allo stesso tempo poterla gestire da remoto tramite raspberry (probabilmente con protocollo MQTT) o altre applicazioni; ora per prendere dimestichezza da vero neofita ho sbirciato innanzitutto le librerie usate da strisce led ed ho cominciato a vedere gli esempi ma son inciampato nel problema riportato sotto.
Nonostante credo sia potenzialmente la più grande delle banalità ho il seguente problema:
-nei cicli for del voi loop usando fastled.show() per accendere una led-strip WS2812B il delay() viene completamente ignorato (ho provato ad aggiungere da terminale delle stringhe che rispettano invece il delay() mentre fastled.show() accende tutto fregandosene; così facendo anche il cambio di colore finisce con il commutare quasi istantaneamente (tutto questo è nato dal momento che non riuscivo nemmeno ad usare l'esempio blink della libreria FastLED sulla scheda ESP8266 Nodemcu v3).
Ho provato ad usare al posto di delay() FastLED.delay() che mi genera in uscita questo errore che non rsaprei come trattare:

ets Jan 8 2013,rst cause:2, boot mode:(3,6)
load 0x4010f000, len 3460, room 16
tail 4
chksum 0xcc
load 0x3fff20b8, len 40, room 4
tail 4
chksum 0xc9
csum 0xc9
v00042540
~ld

-Il codice che ho usato è questo qui sotto:

#include <FastLED.h>

#define NUM_LEDS 7

CRGB leds[NUM_LEDS];

const int ledPin = 13; // D7 sulla scheda

void setup() 
{
  Serial.begin(115200);
  FastLED.addLeds<WS2812B, ledPin, RGB>(leds, NUM_LEDS);
}
void loop()
{
   //imposto un colore per  i led
  for (int i = 0; i <= NUM_LEDS-1; i++) {
    leds[i] = CHSV (96, 255, 192);
    //CRGB ( 100, 255, 255);
    FastLED.show();
    delay(100);
    //FastLED.delay(100);
  }
  // Cambio il colore dei led
  for (int i = 0; i <= NUM_LEDS-1; i++) {
    leds[i] = CHSV (160, 255, 192);
    FastLED.show();
    delay(500);
    //FastLED.delay(500);
  }
}

Buonasera,

prima di tutto ti segnalo che, nella sezione in lingua Inglese, si può scrivere SOLO in Inglese ... quindi, per favore, la prossima volta presta più attenzione in quale sezione metti i tuoi post; questa volta esso è stato spostato, da un moderatore della sezione di lingua Inglese, nella sezione di lingua Italiana ... la prossima volta potrebbe venire direttamente eliminato, dopo di che ...

... in conformità al REGOLAMENTO , punto 7, cortesemente edita il tuo post qui sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone a forma di piccola matita :pencil2: che si trova in basso del tuo post), seleziona TUTTA la parte di codice e premi l'icona </> nella barra degli strumenti per contrassegnarla come codice. Inoltre, così com'è non è molto leggibile ... assicurati di averlo correttamente indentato nell'IDE prima di inserirlo (questo lo si fa premendo ctrlT su un PC o cmd T su un Mac all'intero del IDE). Per maggiori informazioni ... punto 17.2 del succitato regolamento ...

... infine, essendo il tuo primo post, nel rispetto del regolamento dellasezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il succitato REGOLAMENTO ... Grazie.

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread e sistemato il codice come da regolamento, nel rispetto del citato regolamento nessuno ti risponderà (eventuali risposte verrebbero cancellate), quindi ti consiglio di fare il tutto al più presto. :wink:

Uhh grazie, ho fatto tutto ora; ero un po' di fretta prima ed anche la primissimissima volta che son entrato in questo forum... presterò più attenzione la prossima volta che scrivo un messaggio.
Cordiali saluti
Lorenzo

Ciao! Io ho avuto dei problemi "strani" con le strip led e quella libreria. Controlla se la versione della scheda ESP è la 3.0, installa la 2.7.4, ricompila e ricarica il programma.

Innanzitutto ti ringrazio; non ho provato la modifica che tu mi hai suggerito (lo farò sicuramente) ma ho trovato che aggiungendo a capo del programma:
#define FASTLED_ALLOW_INTERRUPTS 0
#define FASTLED_INTERRUPT_RETRY_COUNT 1
il delay viene rispettato; ora se i led da controllare sono tanti (ad esempio dai 20 in su) a volte il "giro" all'interno del loop{} viene eseguito senza considerare più i delay() e quindi visivamente la striscia di led "resetta" e poi riprende a fare quello che ho scritto io nel codice dall'inizio del loop{}.
La cosa al di là del fatto che era solo un esperimento un po' mi turba. (Cambierò fastled con un'altra libreria casomai)

Io, su ESP8266 (ma funziona anche con ESP32), ho usato con ottimi risultati la NeoPixelBus, libreria alquanto sofisticata che permette varie modalità operative, alcune delle quali scaricano completamente la MCU dalla gestione del trasferimento dei dati verso la striscia di NeoPixel.

Per usarla bene e sfruttarne tutte le potenzialità, occorre studarsi bene l'ampio WiKi di cui è corredata. :slight_smile:

Guglielmo

Infatti son passato ad usare lei come libreria e non ho nessun problema, ho solo il pallino dei confronti di FasLed perchè volevo capire bene cosa la manda in "crisi" per una questione di cultura diciamo. Ad ogni modo grazie infinite per il consiglio. =)

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