Dissolvenza led

Ciao, Secondo voi è possibile accendere e spegnere in dissolvenza un led senza l'uso di delay o comunque fare in modo che non rallentino [u]esageratamente[/u] il normale void loop()?

Grazie

Sì, usando millis. Ho scritto un articolo sull'uso di millis per compiti da eseguire ad intervalli non bloccanti.

GRAZIE!

Perfetto! pensavo a una specie di {[( multithread )]} ma la tua libreria mi risolverà moti problemi

Quella non è una libreria ;) Comunque se vuoi usare un qualcosa di più in "background" ho scritto anche un paio di scheduler, il leOS ed il looper, che possono eseguire compiti in maniera trasparente al codice principale. Uso spesso gli scheduler per compiti del genere, dove appunto la cosa è computazionalmente leggera ma si tratta sempre di eseguire dei controlli sul trascorrere del tempo che "rompono" ad inserirli nel loop principale ;)

leo72: Comunque se vuoi usare un qualcosa di più in "background" ho scritto anche un paio di scheduler, il leOS ed il looper,

Ti riferisci al contenuto della cartella examples?

Aspetta, di cosa stai parlando adesso? ;) La cartella "examples" è una cartella che contiene gli sketch di esempio di una qualunque libreria, anche le mie sono quasi tutte corredate di esempi. Tu quale hai visto di libreria?

Ho scritto già un codice simile per uno dei tanti progetti di acquario che si trovano sul forum.
Sostanzialmente il cuore del codice era:

int status = map(insecondi(Th,Tm,Ts),insecondi(14,50,0),insecondi(15,0,0),0,255);
digitalWrite(led, status);

insecondi() trasforma l’orario in secondi moltiplicando l’ora3600 + i minuto60 + i secondi e restituendo un unsigned long.
map ti restituisce un valore proporzionale tra 0 e 255 se l’orario attuale si trova tra il minimo e il massimo.
il digital write non c’è bisogno di spiegarlo. :grin:
Ad ogni loop il tempo cambia, quindi cambia il valore di status che aggiorna il PWM.

Ciao,
Bello!
ma se lo fai solo sull’ ora? senza moltiplicazioni?
cioè fai il map dell’ ora e produci fade con meno calcoli…

Certo che lo puoi fare, ma perdi la possibilità di essere più preciso negli orari.

Aggiungi anche un controllo di tipo (http://arduino.cc/en/Reference/Constrain)

int status = map(insecondi(Th,Tm,Ts),insecondi(14,50,0),insecondi(15,0,0),0,255);
status = constrain(status, 0, 255);
digitalWrite(led, status);

per evitare che prima e dopo gli orari indicati il map di valori errati.

PaoloP: Certo che lo puoi fare, ma perdi la possibilità di essere più preciso negli orari.

Bene! Bisognerebbe capire di quanto è l' errore se serve per un (ipotetica alba) se al posto delle 7.00 inizia alle 7.15 non da conseguenza, se l' errore è di 12 ore SI!

L'errore sul tempo non dipende da questa formula ma dall'orologio da cui lo ricavi. Per precisione degli orari intendevo che indicando solamente con l'ora potrai avere un fade tra le 9 e le 10 e non tra le 9 e 45 e le 10 e 15. Tutto qui.

Paolo ti chiedo troppo se cortesemente mi dici :

insecondi()

Grazie

unsigned long toSeconds(byte h, byte m, byte s){
return (3600*h + 60*m + s);
}

tradotta in inglese perché più "international". :grin:

Grazie,

GENIALE

+1

leo72: Aspetta, di cosa stai parlando adesso? ;)

Ciao, io ho inteso che dicendomi:

leo72: Comunque se vuoi usare un qualcosa di più in "background" ho scritto anche un paio di scheduler, il leOS ed il looper,

Ti riferivi a questi esempi: - looper_with_leOS

  • looper_basic_usage

che si trovano nella cartella examples di looper scaricata dal Tuo sito

:blush: Ma rileggendo adesso mi sembra che si stia parlando di due cose diverse :blush:

Gli scheduler che ho scritto hanno sì degli esempi contenuti nelle rispettive cartelle examples ma non sono quei file lì i file delle 2 librerie. Non capivo il nesso della cartella \examples con il resto del discorso, appunto ;)

Perfetto ! ora ci siamo capiti... :D

leo72: ma non sono quei file lì i file delle 2 librerie.

:~ Tali esempi cortesemente mi dici dove trovarli? :~

Grazie

Per bilanciare i lavori da fare all'interno di un loop() (quindi l'impegno del micro) non sempre servono millis(), timer, librerie varie, basta un counter di cicli macchina che va calibrato in base alla complessità di quello che si trova dentro alla suddetta funzione

llluca: :~ Tali esempi cortesemente mi dici dove trovarli? :~

Ogni mia lib ha degli esempi allegati. Se scarichi dal mio sito (firma in calce) o dal mio account Github https://github.com/leomil72 una qualunque mia lib, non devi fare altro che scompattarla ed hai sia i file della lib stessa sia tutta la documentazione e gli esempi.

pablos: basta un counter di cicli macchina che va calibrato in base alla dentro alla suddetta funzione

Ciao, Per maggiore chiarezza mi faresti un esempio pratico...

ma la "complessità di quello che si trova.." essite un modo per calcolarla?