/* Petit programme pour tester l'afficheur miniature OLED 128 x 64.
   Exemples d'affichages de textes.
   Dans cet exemple A0 et A1 sont utilisées en sorties.     */

#include <Adafruit_ssd1306syp.h>

// Définition des broches pour la ligne I2C.
#define broche_SDA 6 // A0 utilisée en sortie.
#define broche_SCL 7 // A1 utilisée en sortie.
// Définition des constantes pour ce programme.
#define LED_Arduino 13
#define Tcomptage 200 // Ajuste la cadence de comptage en mS.
// Compte 5 fois par seconde. Précision à 0,2S.

// Initialisation des broches en sorties et affectations.
Adafruit_ssd1306syp display(broche_SDA, broche_SCL);

// variables du programme;
byte HEURES, MINUTES, SECONDES;
int Cadence_de_comptage; // byte, int, long en fonction de Tcomptage.
unsigned long Ancienne_valeur_Temps_Ecoule_depuis_RESET;
boolean Bloquer_a_24H;

void setup() {
  display.initialize(); display.clear(); display.update();
  display.setTextSize(1); // Taille 5 x 7.
  RAZ_CHRONOMETRE(); pinMode(LED_Arduino, OUTPUT);}
  
void loop() {
  if (!Bloquer_a_24H) {Incrementer_le_CHRONOMETRE();} }
  
void RAZ_CHRONOMETRE() {
  HEURES = 0; MINUTES = 0; SECONDES = 0; Afficher_le_CHRONOMETRE();}
  
void Incrementer_le_CHRONOMETRE() {
  if (millis() > Ancienne_valeur_Temps_Ecoule_depuis_RESET) {
      SECONDES = SECONDES + 2;
      digitalWrite(LED_Arduino,!digitalRead(LED_Arduino));
      if (SECONDES == 120) {MINUTES++; SECONDES = 0;}
      if (MINUTES == 60) {HEURES++; MINUTES = 0;}
      Bloquer_a_24H = (HEURES == 24); Afficher_le_CHRONOMETRE();
      Ancienne_valeur_Temps_Ecoule_depuis_RESET = 
      Ancienne_valeur_Temps_Ecoule_depuis_RESET + Tcomptage;} }
  
void  Afficher_le_CHRONOMETRE() {
  display.clear(); display.setCursor(0,32); // X puis Y.
  display.print("> ");
  Impose_deux_caracteres(HEURES); display.print(HEURES); display.print(" H ");
  Impose_deux_caracteres(MINUTES); display.print(MINUTES); display.print(" Min ");
  Impose_deux_caracteres(SECONDES); display.print(SECONDES); display.print(" S");
  display.print(" <"); display.update(); }
  
void Impose_deux_caracteres(byte VALEUR) {if (VALEUR < 10) {display.print(" ");} }
