Chronomètre - Afficheur 7 segments

Portrait de Esquisse

Bonjour,

Je suis débutant en Arduino et je souhaite réaliser un chronomètre a partir d'un afficheur 7 segments 4 digits, et 2 boutons (start/stop et reset).

Je suis bloqué, je ne sais pas quoi mettre dans les fonctions que j'ai provisoirement appelées : TRUC1, TRUC2, TRUC3 et TRUC4.

Merci de votre aide.

Voici le code :

long A = 2;
long B = 3;
long C = 4;
long D = 5;
long E = 6;
long F = 7;
long G = 8;
long DP = 9;

long d1 = 10;
long d2 = 11;
long d3 = 12;
long d4 = 13;

int bouton1 = 0;
int bouton2 = 0;

  void TRUC1()
  {
    // JE NE SAIS PAS QUOI METTRE ICI
  }
    void TRUC2()
  {
    // JE NE SAIS PAS QUOI METTRE ICI
  }
    void TRUC2()
  {
    // JE NE SAIS PAS QUOI METTRE ICI
  }
    void TRUC3()
  {
    // JE NE SAIS PAS QUOI METTRE ICI
  }

  void digit4()
  {
    digitalWrite(d1, LOW);
    digitalWrite(d2, HIGH);
    digitalWrite(d3, HIGH);
    digitalWrite(d4, HIGH);
  }
  void digit2()
  {
    digitalWrite(d1, HIGH);
    digitalWrite(d2, LOW);
    digitalWrite(d3, HIGH);
    digitalWrite(d4, HIGH);
  }
  void digit3()
  {
    digitalWrite(d1, HIGH);
    digitalWrite(d2, HIGH);
    digitalWrite(d3, LOW);
    digitalWrite(d4, HIGH);
  }
  void digit4()
  {
    digitalWrite(d1, HIGH);
    digitalWrite(d2, HIGH);
    digitalWrite(d3, HIGH);
    digitalWrite(d4, LOW);
  }
  void zero()
  {
    digitalWrite(A, HIGH);
    digitalWrite(B, HIGH);
    digitalWrite(C, HIGH);
    digitalWrite(D, HIGH);
    digitalWrite(E, HIGH);
    digitalWrite(F, HIGH);
    digitalWrite(G, LOW);
    digitalWrite(DP, LOW);
  }
  void un()
  {
    digitalWrite(A, LOW);
    digitalWrite(B, HIGH);
    digitalWrite(C, HIGH);
    digitalWrite(D, LOW);
    digitalWrite(E, LOW);
    digitalWrite(F, LOW);
    digitalWrite(G, LOW);
    digitalWrite(DP, LOW);
  }
  void deux()
  {
    digitalWrite(A, HIGH);
    digitalWrite(B, HIGH);
    digitalWrite(C, LOW);
    digitalWrite(D, HIGH);
    digitalWrite(E, HIGH);
    digitalWrite(F, LOW);
    digitalWrite(G, HIGH);
    digitalWrite(DP, LOW);
  }
  void trois()
  {
    digitalWrite(A, HIGH);
    digitalWrite(B, HIGH);
    digitalWrite(C, HIGH);
    digitalWrite(D, HIGH);
    digitalWrite(E, LOW);
    digitalWrite(F, LOW);
    digitalWrite(G, HIGH);
    digitalWrite(DP, LOW);
  }
  void quatre()
  {
    digitalWrite(A, LOW);
    digitalWrite(B, HIGH);
    digitalWrite(C, HIGH);
    digitalWrite(D, LOW);
    digitalWrite(E, LOW);
    digitalWrite(F, HIGH);
    digitalWrite(G, HIGH);
    digitalWrite(DP, LOW);
  }
  void cinq()
  {
    digitalWrite(A, HIGH);
    digitalWrite(B, LOW);
    digitalWrite(C, HIGH);
    digitalWrite(D, HIGH);
    digitalWrite(E, LOW);
    digitalWrite(F, HIGH);
    digitalWrite(G, HIGH);
    digitalWrite(DP, LOW);
  }
  void six()
  {
    digitalWrite(A, HIGH);
    digitalWrite(B, LOW);
    digitalWrite(C, HIGH);
    digitalWrite(D, HIGH);
    digitalWrite(E, HIGH);
    digitalWrite(F, HIGH);
    digitalWrite(G, HIGH);
    digitalWrite(DP, LOW);
  }
  void sept()
  {
    digitalWrite(A, HIGH);
    digitalWrite(B, HIGH);
    digitalWrite(C, HIGH);
    digitalWrite(D, LOW);
    digitalWrite(E, LOW);
    digitalWrite(F, LOW);
    digitalWrite(G, LOW);
    digitalWrite(DP, LOW);
  }
  void huit()
  {
    digitalWrite(A, HIGH);
    digitalWrite(B, HIGH);
    digitalWrite(C, HIGH);
    digitalWrite(D, HIGH);
    digitalWrite(E, HIGH);
    digitalWrite(F, HIGH);
    digitalWrite(G, HIGH);
    digitalWrite(DP, LOW);
  }
  void neuf()
  {
    digitalWrite(A, HIGH);
    digitalWrite(B, HIGH);
    digitalWrite(C, HIGH);
    digitalWrite(D, HIGH);
    digitalWrite(E, LOW);
    digitalWrite(F, HIGH);
    digitalWrite(G, HIGH);
    digitalWrite(DP, LOW);
  }

void setup()
{
  pinMode(A, OUTPUT);
  pinMode(B, OUTPUT);
  pinMode(C, OUTPUT);
  pinMode(D, OUTPUT);
  pinMode(E, OUTPUT);
  pinMode(F, OUTPUT);
  pinMode(G, OUTPUT);
  pinMode(DP, OUTPUT);
  
  pinMode(d1, OUTPUT);
  pinMode(d2, OUTPUT);
  pinMode(d3, OUTPUT);
  pinMode(d4, OUTPUT);
  
  pinMode(A1, INPUT);
  pinMode(A2, INPUT);
}

void loop()
{  
  
  bouton1 = digitalRead(A1);
  bouton2 = digitalRead(A2);
  
  digit1();
  zero();
  digit2();
  zero();
  digit3();
  zero();
  digit4();
  zero();
  
  if(bouton1 == HIGH)
  {
  digit1();
  TRUC();
  delay(5);
  
  digit2();
  TRUC();
  delay(5);
  
  digit3();
  TRUC();
  delay(5);
  
  digit4();
  TRUC();
  delay(5);
  }
  
  else if(bouton2 == HIGH)
  {
    digit1();
    zero();
    digit2();
    zero();
    digit3();
    zero();
    digit4();
    zero();
  }
}

Portrait de Alex

Est-ce que tu pourrais commencer par nous définir TRUC1(), TRUC2() etc?

Portrait de Esquisse

En fait, je voudrais insérer dans ces fonctions une variable x par exemple qui prendrait +1 toutes les secondes. Cependant, je ne veux pas que le programme soit coupé par un délais de 1 seconde, ce qui n'est pas possible en utilisant delay(1000); Comment faire ?

Portrait de Alex

Si je comprends bien ton besoin ça n'est pas possible car ton application requiert du multithread.

Portrait de Esquisse

Il existe la fonction millis() Je pense qu'il est possible de l'utiliser pour qu'une variable prenne 1 chaque seconde sans interrompre le programme en entier mais je ne sais pas du tout comment l'utiliser. Auriez-vous un exemple de programme avec ce cas ?

Portrait de brossden

Bonjour

Il te suffit d'utiliser une base de temps externe avec le module horloge temps réel voir ici  et d'interroger cette dernière à chaque cycle tu auras ainsi un chrono très précis

Bonne journée à tous