Go Down

Topic: Scenario strip led ws2812b + Arduino uno (Read 113 times) previous topic - next topic

nix86

Aug 25, 2019, 09:25 pm Last Edit: Aug 26, 2019, 12:00 am by nix86
Salve a tutti, sono nuovo del forum e del mondo arduino

Come dicevo nel titolo sto scrivendo uno "scenario" da richiamare alla pressione di un pulsante.

Il mio obiettivo è far accendere ogni singolo led uno dopo l'altro fino a quando non sono tutti accesi, dopo di che devono rimanere tutti accesi :)

nell'obiettivo ci sono riuscito in parte, i led fanno quello che gli ho detto ma una volta accesi tutti riparte tutto da capo >:(

ho provato a mettere anche una condizione per il quale dovrebbe fermare il movimento dei led e tenerli tutti accesi fissi..

a posto del ciclo for ho provato anche il ciclo while ma nada :smiley-roll-blue:

Qui sotto il codice della funzione.
Grazie a tutti!

In allegato il codice completo.
Code: [Select]

void SetupSingleLed()
{
int whiteLed;
whiteLed=0;

for(whiteLed; whiteLed < NUM_LEDS; whiteLed = whiteLed +1){
   
    leds[whiteLed] = CHSV( 0, 0, brightnessCounter);
      FastLED.show();

      delay(50);
     
    if(whiteLed == NUM_LEDS)
    break;     
}
fill_solid( currentPalette, 16, CHSV( hueCounter, saturationCounter, brightnessCounter));
}

pgiagno

Posta l'intero codice. Quello che hai pubblicato è solo una funzione.

Va modificata la "void loop()"

Ciao,
P.


uwefed

Code: [Select]
for(whiteLed; whiteLed < NUM_LEDS; whiteLed = whiteLed +1){
   ...
    if(whiteLed == NUM_LEDS)


whiteLed non sará mai NUM_LEDS.
Inoltre non é necessario fermare il FOR perché finisce automaticamente quand la variabile raggiunge la condizione di fine ciclo.

Dacci lo Sketch kompleto.
Quando tutti i led sono accesi cosa deve succedere? rimanere acceso tutti i LED?

Ciao Uwe



nix86

Ciao lo sketch lo trovi in allegato al primo post.

Esatto a fine ciclo quando i led sono tutti accesi devono rimanere tali e non ripetere il ciclo.

uwefed

Esatto a fine ciclo quando i led sono tutti accesi devono rimanere tali e non ripetere il ciclo.
allora metti la cosa in setup() e lascia vuota la loop().
Ciao Uwe

pgiagno

Ciao lo sketch lo trovi in allegato al primo post.
Non vedo né introduzione iniziale, né commenti, né spiegazioni di cosa deve fare ogni funzione, è tutto nella tua testa, ma non so ancora leggere nel pensiero.

Ciao,
P.

nix86

Riassumo brevemente il programma scritto:

il programma serve per comandare una striscia led;

per comandare le varie funzioni che sono: cambio scenario, luminosità, saturazione e colori ho 6 pulsanti
di cui 4 mi fanno luminosità su, luminosità giù e saturazione su, saturazione giù.
come detto prima gli altri due pulsanti fanno cambio scenario e cambio colore ciclico.

per comandare i pulsanti collegati sugli ingressi digitali di arduino, uso una libreria che mi permette distinzione tra pulsante premuto brevemente e pulsante tenuto premuto.

Nella programmazione è presente una lista di scenari richiamabili in sequenza alla pressione del pulsante dedicato.

Tutti gli scenari hanno la possibilità di aver la luminosità regolata dai due pulsanti, mentre solo il primo scenario ha la possibilità di avere una regolazione completa con tutti i tasti di regolazione dato che utilizza i colori HSV (colore,saturazione,luminosità).


Il programma funziona perfettamente tranne per il fatto di quello scenario che non riesco a fermare una volta accesi tutti i led.

allora metti la cosa in setup() e lascia vuota la loop().
Ciao Uwe
Ho provato a spostare la funzione dal ciclo loop al ciclo setup ma non è cambiato niente.

nix86

#8
Aug 26, 2019, 02:51 pm Last Edit: Aug 26, 2019, 03:03 pm by nix86
Volevo comunicare che ho risolto;

ho dichiarato whiteLed come variabile globale, eliminato il ciclo for e scritto un ciclo while, il tutto messo in setup come mi consigliò prima uwefed

EDIT:che la funzione sia nel setup o nel loop non cambia niente ai fini dello scenario ottenuto
questo è il codice funzionante: 

Code: [Select]

void SetupSingleLed()

{
while(whiteLed < NUM_LEDS){
   
    leds[whiteLed] = CHSV( 0, 0, brightnessCounter);
      FastLED.show();
    whiteLed++;
      delay(50);   
}
fill_solid( currentPalette, 16, CHSV( hueCounter, saturationCounter, brightnessCounter));

}

Go Up