/* David
- Chronometre sur Oled - SSD1306
*/
#include <Wire.h> //bibli cablage
#include <Adafruit_GFX.h> //bibli Oled
#include <Adafruit_SSD1306.h> //designation afficheur
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display (SCREEN_WIDTH, SCREEN_HEIGHT, & Wire, -1);
int BtStartStop = 3; //declar bouton
int BtReset = 2; //declar bouton
bool EtatBtStartStop;
bool EtatBtReset;
int EtatBtAppuyer;
int EtatChronoOnOff;
int TempsEcoule ;
int Milliseconde;
int Seconde;
int Minute;
int Heure;
unsigned long currentTime = 0;
unsigned long previousTime = 0;
void setup() {
Serial.begin(9600);
pinMode(BtStartStop, INPUT_PULLUP);
pinMode(BtReset, INPUT_PULLUP);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3c)){
Serial.println("Échec de l'initialisation de l'écran OLED !");
for (;;);
display.display();
display.clearDisplay();
}
display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(1);
display.setCursor(20, 0); // Position 20,0
display.print("CHRONOMETRE");
display.setCursor(0, 40); // Position 0,40
display.print("Start/Stop - Bt Vert");
display.setCursor(0, 50); // Position 0,50
display.print("Reset - Bt Rouge");
display.display();
}
void loop(){
EtatBtStartStop = digitalRead(BtStartStop); //repos=1 appuyer=0
EtatBtReset = digitalRead(BtReset);
//Lancer Chrono
if (EtatBtStartStop == LOW && EtatBtAppuyer == 0)
{ EtatBtAppuyer = 1;
EtatChronoOnOff = !EtatChronoOnOff;
affichage();
}
//Reset Chrono
if (EtatBtReset == LOW && EtatChronoOnOff == 0 && EtatBtAppuyer == 0)
{ EtatBtAppuyer = 1;
Milliseconde = 0; Seconde = 0; Minute = 0; Heure = 0;
}
//detecte les 2 boutons relachés
if (EtatBtStartStop == HIGH && EtatBtReset == HIGH)
{ EtatBtAppuyer = 0;
}
// Calcul du Temps
currentTime = millis();
TempsEcoule = currentTime - previousTime;
previousTime = millis();
//si EtatChronoOnOff==1
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++;
}
}
affichageChrono();
}
void affichageChrono()
//AFFICHAGE MILLISECONDE ----------------------------------------
{ display.clearDisplay();
display.setTextSize(1); //<== AJOUT ----------------------------
affichageHaut(); // Appel de la fonction affichageHaut()
display.setCursor(75, 20); // Position 75,20
display.print(":");
if (Milliseconde > 99)
{ display.setCursor(80, 20); // Position 80,20
display.print(Milliseconde);
affichageBas(); // Appel de la fonction affichageBas()
}
else if (Milliseconde > 9 && Milliseconde < 100)
{ display.setCursor(85, 20); // Position 85,20
display.print("0");
display.setCursor(90, 20); // Position 90,20
display.print(Milliseconde);
affichageBas(); // Appel de la fonction affichageBas()
}
else if (Milliseconde > 0 && Milliseconde < 10)
{ display.setCursor(80, 20); // Position 80,20
display.print("00");
display.setCursor(90, 20); // Position 90,20
display.print(Milliseconde);
affichageBas(); // Appel de la fonction affichageBas()
}
else
{ display.setCursor(75, 20); // Position 75,20
display.print(":000");
affichageBas(); // Appel de la fonction affichageBas()
}
// ------- AFFICHAGE SECONDE ------------------------------------------
display.setCursor(60, 20); // Position 60,20
display.print(":");
/* ----- ERREUR ----- les {} sont inutiles
{ display.setCursor(60, 20);
display.print(":");
}
---- FIN ERREUR ----- */
if (Seconde < 10)
{ display.setCursor(65, 20); // Position 65,20
display.print("0");
display.setCursor(70, 20); // Position 70,20
display.print(Seconde);
affichageBas(); // Appel de la fonction affichageBas()
}
else
{ display.setCursor(65, 20); // Position 65,20
display.print(Seconde);
affichageBas(); // Appel de la fonction affichageBas()
}
// ------- AFFICHAGE MINUTE -----------------------------------------------
display.setCursor(45, 20); // Position 45,20
display.print(":");
/* ----- ERREUR ----- les {} sont inutiles
{ display.setCursor(45, 20);
display.print(":");
affichageBas(); // <-- Inutile
}
----- FIN ERREUR ----- */
if (Minute < 10)
{ display.setCursor(50, 20); // Position 50,20
display.print("0");
display.setCursor(55, 20); // Position 55,20
display.print(Minute);
affichageBas(); // Appel de la fonction affichageBas()
}
else
{ display.setCursor(50, 20); // Position 50,20
display.print(Minute);
affichageBas(); // Appel de la fonction affichageBas()
}
// ------- AFFICHAGE HEURE -------------------------------------
if (Heure < 10)
{ display.setCursor(35, 20); // Position 35,20
display.print("0");
display.setCursor(40, 20); // Position 40,20
display.print(Heure);
affichageBas(); // Appel de la fonction affichageBas()
}
else
{ display.setCursor(35, 20); // Position 35,20
display.print(Heure);
affichageBas(); // Appel de la fonction affichageBas()
}
display.display();
}
void affichageBas(){
display.setCursor(0, 40); // Position 0,40
display.print("Start/Stop - Bt Vert");
display.setCursor(0, 50); // Position 0,50
display.print("Reset - Bt Rouge");
}
void affichageHaut(){
display.setCursor(35, 0); // Position 35,0
display.print("CHRONOMETRE");
}
void affichage(){
display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(1);
display.setCursor(20, 0); // Position 20,0
display.print ("CHRONOMETRE");
display.setCursor(20, 40); // Position 20,40
display.print("Press START/STOP");
display.setCursor(35, 50); // Position 35,50
display.print("Bouton Vert");
display.display();
}