Voici un truc rigolo, qui n'a aucun intérêt sauf mathématique.
Voici tout d'abord le petit programme test que j'utilise pour faire clignoter une led (je suis fainéant, je prends celle de la platine). Cela fonctionne sur une Uno ou sur une Mega (j'ai pas essayé d'autres platines). Période 1s:
void setup()
{
// Initialisation led
pinMode(LED_BUILTIN,OUTPUT);
}
void loop()
{
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); // Changer l'état de la led
delay(500);
}
Dans un autre programme, les interruptions du timer de l'horloge me gênaient, j'ai donc arrêté ces interruptions, en mettant le masque d'interruption à 0:
TIMSK0 = 0; // Arrêter les inters du timer 0
J'ai vérifié par ailleurs, je n'ai plus les 0,8% de perte de temps de l'horloge.
Je sais que si je désactive le timer 0, je ne peux plus utiliser millis(), micros() et delay(). Mais comme je suis bête et indiscipliné,j'ai repris mon programme de la led clignotante, et j'ai désactivé le timer 0:
void setup()
{
TIMSK0 = 0; // Arrêter les inters du timer 0
// Initialisation led
pinMode(LED_BUILTIN,OUTPUT);
}
void loop()
{
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); // Changer l'état de la led
delay(500);
}
Évidemment, comme je l'attendais, la led ne clignote plus (vous pouvez faire l'essai). J'ai pensé au début que comme l'horloge n'avançait plus, je n'atteindrai jamais les 500ms.
Erreur! ma led clignote toujours mais simplement plus vite, il suffit pour le voir de remplacer delay(500) par delay(100000) pour retrouver la période de 1s.
Est-ce que cela répond à "que faire pendant le confinement?"