• Post category:Fort
  • Post comments:0 commentaire
  • Post last modified:mai 25, 2022
  • Temps de lecture :11 min de lecture

Créer un simple chronomètre à base d’Arduino avec un LCD 16×2 et 2 boutons

Niveau APPRENTISSAGE :   Fort

 

    Prérequis :

Matériel :

Version IDE :

Bibliothèque :

 

 

Vidéo de démonstration :

 

Schéma de câblage :

 

Code :

// Inclure le code de la bibliothèque:
#include <LiquidCrystal.h>

// Initialiser la bibliothèque avec les numéros des broches de l'interface
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// La broche Numérique 6 est reliée au Bouton1. On lui donne le nom BtStartStop.
int BtStartStop = 6;
// La broche Numérique 7 est reliée au Bouton2. On lui donne le nom BtReset.
int BtReset = 7;
// Déclaration variable EtatBtStartStop qui va servir à stocker une valeur au format bool.
bool EtatBtStartStop;
// Déclaration variable EtatBtReset qui va servir à stocker une valeur au format bool.
bool EtatBtReset;
// Déclaration variable EtatBoutonAppuyer qui va servir à stocker une valeur au format int.
int EtatBoutonAppuyer;
// Etc...
int EtatChronoOnOFF;
int TempsEcoule;
int Milliseconde;
int Seconde;
int Minute;
int Heure;
// Variable pour stocker la valeur du timer interne du microcontrôleur (millis()) au format int unsigned long
unsigned long currentTime = 0;
// Variable pour Mémoriser la valeur du timer interne du microcontrôleur "currentTime" pour par la suite la comparer
// au format int unsigned long
unsigned long previousTime = 0;


void setup() {
  // Faire de la broche du BtStartStop une entrée avec activation de la résistance de rappel interne de l'ARDUINO .
  pinMode(BtStartStop, INPUT_PULLUP);
  // Faire de la broche du BtReset une entrée avec activation de la résistance de rappel interne de l'ARDUINO .
  pinMode(BtReset, INPUT_PULLUP);
  // Configurez le nombre de colonnes et de lignes de l'écran LCD :
  lcd.begin(16, 2);
  // Imprime un message sur l'écran LCD.
  lcd.print ("Chrono :");
}

void loop() {
  // Lit la broche d'entrée du BtStartStop et stock ça valeur dans EtatBtStartStop.
  EtatBtStartStop = digitalRead(BtStartStop);
  // Lit la broche d'entrée du BtReset et stock ça valeur dans EtatBtReset.
  EtatBtReset = digitalRead(BtReset);
  // Si EtatBtStartStop == LOW et EtatBoutonAppuyer == 0 on exécute les actions entre {}
  if (EtatBtStartStop == LOW && EtatBoutonAppuyer == 0) {
    // La variable EtatBoutonAppuyer prend la valeur de 1.
    EtatBoutonAppuyer = 1;
    // Si EtatChronoOnOFF = 0 alors EtatChronoOnOFF = 1 et inversement.
    EtatChronoOnOFF = !EtatChronoOnOFF;
  }
  // Si EtatBtReset == LOW et EtatChronoOnOFF == 0 et EtatBoutonAppuyer == 0 on exécute les actions entre {}
  if (EtatBtReset == LOW && EtatChronoOnOFF == 0 && EtatBoutonAppuyer == 0) {
    // La variable EtatBoutonAppuyer prend la valeur de 1.
    EtatBoutonAppuyer = 1;
    // La variable Milliseconde prend la valeur de 0.
    Milliseconde = 0;
    //Etc...
    Seconde = 0;
    Minute = 0;
    Heure = 0;
  }
  // Si EtatBtStartStop == HIGH et EtatBtReset == HIGH on exécute les actions entre {}
  if (EtatBtStartStop == HIGH && EtatBtReset == HIGH) {
    // La variable EtatBoutonAppuyer prend la valeur de 0.
    EtatBoutonAppuyer = 0;
  }
  //On stocke la valeur du timer interne du microcontrôleur de l'arduino qu'ont récupére grace à millis() dans la variable currentTime
  currentTime = millis();
  //On calcule la valeur de TempsEcoule en effectuant une soustraction entre currentTime et previousTime.
  TempsEcoule = currentTime - previousTime;
  //On stocke la valeur du timer interne du microcontrôleur de l'arduino qu'ont récupére grace à millis() dans la variable previousTime
  previousTime = millis();

  // Si EtatChronoOnOFF == 1 on exécute les actions entre {}
  if (EtatChronoOnOFF == 1) {
    // On calcule la valeur de Milliseconde en effectuant une addition entre Milliseconde et TempsEcoule.
    Milliseconde = Milliseconde + TempsEcoule;
    // Si Milliseconde > 999 on exécute les actions entre {}
    if (Milliseconde > 999) {
      Milliseconde = Milliseconde - 1000;
      // On incrémente la variable Seconde de + 1
      Seconde++;
    }
    if (Seconde > 59) {
      Seconde = 0;
      Minute++;
    }
    if (Minute > 59) {
      Minute = 0;
      Heure++;
    }
  }
  // Placer le curseur sur la colonne 9, ligne 1 du LCD
  // (note : la ligne 0 est la première ligne, puisque le comptage commence par 0):
  lcd.setCursor(9, 1);
  // Imprime un message sur l'écran LCD.
  lcd.print(":");
  // Si la variable Milliseconde est plus grande que 99 on exécute les actions entre {}
  if (Milliseconde > 99) {
    // Placer le curseur sur la colonne 10, ligne 1 du LCD
    lcd.setCursor(10, 1);
    // Imprime la valeur de la variable Milliseconde sur l'écran LCD
    lcd.print(Milliseconde);
  }
  // Sinon si la variable Milliseconde est plus grande que 99 on exécute les actions entre {}
  else if (Milliseconde > 9 && Milliseconde < 100) {
    //Etc...
    lcd.setCursor(10, 1);
    lcd.print("0");
    lcd.setCursor(11, 1);
    lcd.print(Milliseconde);
  }
  else if (Milliseconde > 0 && Milliseconde < 10) {
    lcd.setCursor(10, 1);
    lcd.print("00");
    lcd.setCursor(12, 1);
    lcd.print(Milliseconde);
  }
  else {
    lcd.setCursor(9, 1);
    lcd.print(":000");
  }

  lcd.setCursor(6, 1);
  lcd.print(":");
  if (Seconde < 10) {
    lcd.setCursor(7, 1);
    lcd.print("0");
    lcd.setCursor(8, 1);
    lcd.print(Seconde);
  }
  else {
    lcd.setCursor(7, 1);
    lcd.print(Seconde);
  }

  lcd.setCursor(3, 1);
  lcd.print(":");
  if (Minute < 10) {
    lcd.setCursor(4, 1);
    lcd.print("0");
    lcd.setCursor(5, 1);
    lcd.print(Minute);
  }
  else {
    lcd.setCursor(4, 1);
    lcd.print(Minute);
  }
  if (Heure < 10) {
    lcd.setCursor(1, 1);
    lcd.print("0");
    lcd.setCursor(2, 1);
    lcd.print(Heure);
  }
  else {
    lcd.setCursor(1, 1);
    lcd.print(Heure);
  }
}

 

Simulation TINKERCAD :

 


+ Infos sur le langage utilisé :

1. Fonctions
2. Variables
3. Stucture

 

Laisser un commentaire