looper - un semplice schedulatore senza timer/interrupt

Il precompilatore sostituisce brutalmente quello che si definisce con la #define. E' possibile però passare anche dei "parametri"
Molte librerie nascondo alcune implementazioni con le define.
Se vai a vedere dentro la Arduino.h scoprirai ad esempio che esiste la #define noInterrupts() cli(), ovvero quando scrivi nello sketch noInterrupts() questa viene sostituita dalla funzione cli().
In teoria le 2 macro che ho scritto volevano fare una cosa molto brutta, l'ho detto. Nascondere questo pezzo di codice in due macro parametriche:

unsigned long prev1=0; 
unsigned long curr1=millis(); 
if(curr1-prev1<t) 
{                                              // BEGINDELAY(t,v)

  prev1=curr1;                                // ENDDELAY(v)
}

E' una if e non una while, le variabili sono esterne al blocco, perciò sono locali. Effettivamente NON funziona perchè prev non mantiene il valore. ooops!!!
Il parametro t sarebbe il tempo della delay, v un numero per creare variabili con nomi sempre diverse. Volevo usare COUNTER del prepocessore di gcc ma essendo righe diverse non son riuscito a farmi dare dal preprocessore variabili con nomi sempre diversi.
Ripeto, è una cavolata, io non lo adotterei mai, tanto vale usare il codice completo scritto sopra. Però la potenza della #define, veramente mitica.