Cosi dovrebbe funzionare, mi sembra giusto cercare di dare una versione funzionante. Ma NON la usate, è una cavolata.
#define MACRO_CONCAT( x, y ) x##y
#define INITDELAY(v) unsigned long MACRO_CONCAT(g_prev,v)=0; unsigned long MACRO_CONCAT(g_curr,v);
#define BEGINDELAY(t,v) MACRO_CONCAT(g_curr,v)=millis(); if(MACRO_CONCAT(g_curr,v)-MACRO_CONCAT(g_prev,v)<(t)) {
#define ENDDELAY(v) MACRO_CONCAT(g_prev,v)=MACRO_CONCAT(g_curr,v); }
// sketch
INITDELAY(1)
INITDELAY(2)
void setup()
{ }
void loop()
{ BEGINDELAY(500,1)
// qui metti codice per eseguire mentre conta il primo delay
ENDDELAY(1)
BEGINDELAY(600,2)
// qui metti codice per eseguire mentre conta il secondo delay
ENDDELAY(2)
}
@Leo mi hai detto di spiegare (giustamente) per chi non conosce il precompilatore. Si, cercavo di "risolvere" il problema di @Testa. Mi chiedevo ieri sera se era possibile nascondere quel che si fa con la millis() (come detto anche da lui stess) e ci ho provato.