Seguendo la scia di leOS, e su richiesta di m_ri (

) ecco
looper.
Looper è un semplicissimo lanciatore di routine che NON usa timer/interrupt del microcontrollore. Esegue piccoli task ad intervalli prefissati, calcolati ricorrendo ad uno schedulatore che si appoggia a millis. E' indipendente dall'hardware (quindi gira su ogni micro) proprio perché non usa niente che non sia contenuto nel core di Arduino.
Chi ha usato il leOS si troverà a casa con looper, dato che eredita alcuni metodi da leOS nonché la loro sintassi.
Per usare il looper bisogna caricare la sua libreria ed istanziarne una copia:
#include "looper.h"
looper myScheduler;
Fatto questo, i metodi a disposizione sono 4:
myScheduler.addTask(funzione, intervallo_in_ms[, ONETIME]);
myScheduler.removeTask(funzione);
myScheduler.pauseTask(funzione);
myScheduler.restartTask(funzione);
Per far lavorare looper basta aggiungere questa chiamata in qualunque parte del vostro loop principale:
void loop() {
...
myScheduler.scheduler();
}
La sintassi è identica a quella dei corrispondenti metodi del leOS ed è descritta nel README allegato.
4 esempi corredano la libreria, per mostrare come usare usare looper.
NOTA:
visto che looper non si basa sugli interrupt, la sua precisione dipende totalmente dalla durata del loop principale. looper funziona bene se il loop principale ha una durata inferiore a quella del task con il tempo di intervallo più breve perché altrimenti il task verrà eseguito non alla scadenza prefissata ma dopo il loop principale.
Ad esempio, se impostate un task che fa lampeggiare un led ogni 500 ms e nel loop mettete un delay(1000), il led lampeggerà ogni secondo! Questo è ovvio, dato che a differenza di leOS, looper non viene invocato automaticamente ma solo manualmente. E' in pratica una routine come tutte le altre che richiama altre routine.
Spero di aver fatto cosa gradita, come al solito
