Bonsoir à tous.
Ce soir, j'ai donc écrit ce bout de code :
volatile boolean T0_delay, T0_timeOut; // flag de fin de delay(ms)
volatile uint32_t T0_msA; // variable de comptage delay(ms)
#define delay(ms) \
T0_msA=(ms);\
TCNT0=0;\
TIMSK0|=0x02;\
while(!T0_delay){}\
T0_delay=false
#define timeOut(tps, condition) \
T0_msA=(tps);\
TCNT0=0;\
T0_timeOut=true;\
TIMSK0|=0x02;\
while(!T0_delay){\
if(condition){\
T0_timeOut=false;\
break;\
}\
}\
T0_delay=false
ISR(TIMER0_COMPA_vect){ // delay ISR
if (!(T0_msA--)) {
T0_delay = true; // flag
TIMSK0 &= 0xFD; // désactiver l'interruption
}
}
Je ne peux pas encore le tester, mais si ce que j'ai lu est bon, ça devrait marcher. Ainsi, ma fonction delay(ms) remplacera celle d'origine arduino dont j'ai toujours besoin, car j'utilise encore la lib liquidChrystal dont je ne vais pas tarder à me libérer, car elle utilise des digitalWrite et ça me donne des boutons...
A suivre!
PS : est-il obligatoire ou simplement conseillé d'inclure la fonction yield() dans mes while? Personne ne semble avoir compris à quoi ça sert vraiment...