Go Down

Topic: non so usare nè millis nè sec timer (Read 1 time) previous topic - next topic

leo72


sto appna leggendo la discussione su leOS , credo che quello sia il nuovo modo di gestire il multitasking ...ke ne dite? quando eseguo una funzione con leOS posso leggere il risultato nel loop?

Altra mia libreria  ;)
Se in un task del leOS modifichi una variabile globale, essa può essere letta e gestita dal loop principale del programma senza problemi.

cirociro88

ok grazie leo. secTimer l'ho scaricata ieri sera , l'ho provata e anche con l'esempio base, il tempo non corrisponde, cioè la frequenza di lampeggìo del led non è di un secondo(almeno a me).
cmq a qst punto credo sia conveniente passare direttamente a leOS... lo vorrei utilizzare per leggere dati da arduino (sensori ecc) e poi qllo ke mi ritorna dalla funzione lo leggerò tramite seriale nel loop.
ad esempio: mentre nel loop tengo la seriale aperta per inviare comandi ad arduino e ricevere risposte, nell'evento schedulato vorrei leggere ogni 5 min la temperatura di un sensore, e gestirla nel loop...nel senso se valore troppo basso accendi led.
nn so se mi sn spiegato.
grazie

leo72


ok grazie leo. secTimer l'ho scaricata ieri sera , l'ho provata e anche con l'esempio base, il tempo non corrisponde, cioè la frequenza di lampeggìo del led non è di un secondo(almeno a me).

E non potrebbe essere altrimenti visto che l'Arduino ha un risonatore ceramico che ha una tolleranza della frequenza rispetto al valore nominale molto alta per cui se vuoi un tempo esatto al secondo devi usare o un RTC termocompensato oppure un orologio atomico  ;)
Prendi 2 Arduino oppure 2 micro in standalone, caricaci sopra il Blink ed avviali insieme. Dopo 3/4 secondi noterai come ognuno lampeggia con una frequenza differente, indice delle tolleranze dei quarzi o risonatori.

Quote

cmq a qst punto credo sia conveniente passare direttamente a leOS... lo vorrei utilizzare per leggere dati da arduino (sensori ecc) e poi qllo ke mi ritorna dalla funzione lo leggerò tramite seriale nel loop.
ad esempio: mentre nel loop tengo la seriale aperta per inviare comandi ad arduino e ricevere risposte, nell'evento schedulato vorrei leggere ogni 5 min la temperatura di un sensore, e gestirla nel loop...nel senso se valore troppo basso accendi led.
nn so se mi sn spiegato.
grazie

[/quote]
Non leggere dati da sensori la cui lettura implica operazioni molto lunghe. Se devi leggere un pin è un conto, se devi fare richiesta via I2C o seriale è un altro paio di maniche. Il leOS (e tutte le operazioni basate sugli interrupt) devono sempre essere più semplici possibile, per evitare di rallentare l'Arduino.
In questo caso è meglio usare il looper, che è uno schedulatore non basato sugli interrupt per cui non soffre di questi problemi.

cirociro88

se all evento schedulato faccio fare solo temp=analogread(a0);
e poi la variabile temp la gestisco fuori dall'evento? cioè nel loop?
tipo la conversione del valore analogico in gradi e anche la trasmissione via seriale?
e nel loop metto la condizione che se temp è cambiato (ma cambierà solo se la vado a leggere ed io la leggerò tramite l'evento) fa cose tipo accendi led, comunicalo alla seriale ecc altrimenti passa avanti

leo72

Nel task puoi mettere la lettura del pin, così va bene.

Go Up