#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
int BtStartStop = 32;
int BtReset = 35;
bool EtatBtStartStop;
bool EtatBtReset;
int EtatBoutonAppuyer;
int EtatChronoOnOFF;
int TempsEcoule;
int Milliseconde;
int Seconde;
int Minute;
int Heure;
unsigned long currentTime = 0;
unsigned long previousTime = 0;
void setup()
{
Serial.begin(115200);
Serial.println("Hello, ESP32!");
pinMode(BtStartStop, INPUT_PULLUP);
pinMode(BtReset, INPUT_PULLUP);
lcd.init();
lcd.backlight();
lcd.begin(16, 2);
lcd.print ("Chrono :");
}
void loop()
{
EtatBtStartStop = digitalRead(BtStartStop);
EtatBtReset = digitalRead(BtReset);
if (EtatBtStartStop == LOW && EtatBoutonAppuyer == 0) {
EtatBoutonAppuyer = 1;
EtatChronoOnOFF = !EtatChronoOnOFF;
}
if (EtatBtReset == LOW && EtatChronoOnOFF == 0 && EtatBoutonAppuyer == 0) {
EtatBoutonAppuyer = 1;
Milliseconde = 0;
Seconde = 0;
Minute = 0;
Heure = 0;
}
if (EtatBtStartStop == HIGH && EtatBtReset == HIGH) {
EtatBoutonAppuyer = 0;
}
currentTime = millis();
TempsEcoule = currentTime - previousTime;
previousTime = millis();
if (EtatChronoOnOFF == 1) {
Milliseconde = Milliseconde + TempsEcoule;
if (Milliseconde > 999) {
Milliseconde = Milliseconde - 1000;
Seconde++;
}
if (Seconde > 59) {
Seconde = 0;
Minute++;
}
if (Minute > 59) {
Minute = 0;
Heure++;
}
}
lcd.setCursor(9, 1);
lcd.print(":");
if (Milliseconde > 99) {
lcd.setCursor(10, 1);
lcd.print(Milliseconde);
}
else if (Milliseconde > 9 && Milliseconde < 100) {
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);
}
}