Menu
CoddyTech

Les temps en unsigned long

Fait partie de la section Gestion du temps sans delay du Journey Arduino de Coddy. Leçon 2 sur 18.

Une variable ne peut contenir que des nombres jusqu’à une certaine taille, définie par son type. Sur l’Uno, un int va de -32768 à 32767. Après 32,8 secondes, millis() dépasse cette valeur, et un int qui essaie de la contenir revient à un nombre négatif.

Un type unsigned ne contient pas de nombres négatifs, il peut donc atteindre une valeur deux fois plus élevée : un unsigned int contient des valeurs de 0 à 65535, soit environ 65 secondes en millisecondes. Ce n’est toujours pas suffisant.

Un unsigned long contient des valeurs de 0 à 4,294,967,295. En millisecondes, cela représente plus de 49 jours, et c’est le type que renvoie millis() lui-même. Stocke chaque temps dans une variable de ce type :

unsigned long now = millis();
unsigned long startTime = 0;

Un sketch avec le mauvais type fonctionne pendant une demi-minute, puis se met à mal fonctionner : le bogue est donc facile à manquer.

challenge icon

Défi

Facile

Ce sketch affiche l’heure une fois par seconde, mais après 32 secondes, il affiche des nombres négatifs. Modifie le type de now pour que l’heure reste correcte pendant des jours.

Appuie sur Exécuter et attends plus de 33 secondes pour voir le bogue, puis corrige-le et Vérifier.

Essayez vous-même

void setup() {
  Serial.begin(9600);
}

void loop() {
  int now = millis();   // ce type est trop petit pour représenter le temps : changez-le
  Serial.println(now);
  delay(1000);
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Gestion du temps sans delay

Entraînez-vous par vous-même : Playground Arduino