Problème d'utilisation de la fonction millis()

Bonjour,

je suis débutant et je cherche à comprendre comment bien utiliser la fonction millis().

Je réalise les cas pratiques du guide "premiers pas en informatique embarquée" d'ESKIMON (au passage, super bien expliqué et sympa à lire !)

J'ai fait un montage simple sur breadbord avec un afficheur 7 segments à anode commune relié à la carte arduino uno.

J'ai fait le code suivant pour que l'afficheur affiche les chiffres de 1 à 9 avec un intervalle de x millisecondes (valeur stockée comme variable).
J'ai fait une fonction "if" avec ">=" comme condition et j'ai modifié les trois premières fonctions "if" avec une condition uniquement ">" (pour tester).

mon afficheur affiche le "5" en continu au lieu de faire défiler les chiffres en fonction de temps passé.

Est-ce que quelqu'un pourrait jeter un oeil sur le code pour me dire ce qui ne va pas ?
Merci !!!

(j'ai mis mon code en pièce jointe)

test_fonction_millis.ino (5.29 KB)

Ne le mettez pas en PJ, peut pas le lire sur smartphone, intégrez le dans votre post (copier collé après indentation correcte (ctrl-T dans l'IDE) et entre tags de code)

merci pepe pour les explications,
je vais tester tout ça !

Salut à tous,

grâce aux conseils de pepe, j'ai pu créer un code qui fonctionne tout à fait bien pour faire défiler les chiffres 0 à 9 (en continu) sur un afficheur 7 segments à anode commune.
voici le code complet :

// output pins for segments
//                      A  B  C  D  E  F  G
byte segmentPins[7] = { 2, 3, 4, 5, 6, 7, 8 };

byte outputLevels[11][7] {
//  A     B     C     D     E     F     G
 { LOW,  LOW,  LOW,  LOW,  LOW,  LOW,  HIGH }, // 0
 { HIGH, LOW,  LOW,  HIGH, HIGH, HIGH, HIGH }, // 1
 { LOW,  LOW,  HIGH, LOW,  LOW,  HIGH, LOW  }, // 2
 { LOW,  LOW,  LOW,  LOW,  HIGH, HIGH, LOW  }, // 3
 { HIGH, LOW,  LOW,  HIGH, HIGH, LOW,  LOW  }, // 4
 { LOW,  HIGH, LOW,  LOW,  HIGH, LOW,  LOW  }, // 5
 { LOW,  HIGH, LOW,  LOW,  LOW,  LOW,  LOW  }, // 6
 { LOW,  LOW,  LOW,  HIGH, HIGH, HIGH, HIGH }, // 7
 { LOW,  LOW,  LOW,  LOW,  LOW,  LOW,  LOW  }, // 8
 { LOW,  LOW,  LOW,  LOW,  HIGH, LOW,  LOW  }, // 9
 { HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH }  // 10 = clear
};


void writeDisplay(byte num) {
  byte seg;
  for (seg=0; seg<7; seg++)
    digitalWrite( segmentPins[seg], outputLevels[num][seg] );
}

void clearDisplay() {
  writeDisplay(10);
}

void initDisplay() {
  byte seg;
  for (seg=0; seg<7; seg++)
    pinMode( segmentPins[seg], OUTPUT );
  clearDisplay();
}


//variables d'affichage
long number = 0;

//variables du temps
long previoustime = 0;
long currenttime = millis();

//interval de clignotement en millisecondes
const int interval=500;


//fonction d'initialisation de la carte
void setup() 
{ 
initDisplay();
}


//fonction principale qui s'exécute (se répète) à l'infini
void loop() 

{  
long currenttime = millis();

if(currenttime-previoustime>=interval)
{previoustime=currenttime;
number++;}

if (number>9)
{number=0;}
else
{
writeDisplay(number);}
} 

/*Lire l'heure courante
L'heure de départ du délai prend la valeur de l'heure courante
Le chiffre courant prend la valeur 1
Afficher le chiffre courant
Répéter :
 · Lire l'heure courante
 · Si le temps écoulé depuis le début du délai est supérieure ou égale à la durée du délai, alors :
 ·  · L'heure de départ du délai prend la valeur de l'heure courante
 ·  · Ajouter 1 au chiffre courant
 ·  · Si le chiffre courant est supérieur à 9, alors :
 ·  ·  · Le chiffre courant prend la valeur 1
 ·  · Afficher le chiffre courant
*/