// Lycée PE MARTIN
// Le 20/2/2024
// Titre : Le Bus I2C
// Matériels : Arduino Uno, Analyseur Logic, HTR DS1307 (0x68)
// Description : voir le sujet
// RTClib : https://adafruit.github.io/RTClib/html/class_r_t_c___d_s1307.html

// Bibliothèques
#include "RTClib.h"
#include "LiquidCrystal_I2C.h"

// L'analyseur logique mesure les signaux SCL et SDA lorsqu'un
// état logique haut est présent sur son entrée D7
#define trigger 2

// LCD
#define I2C_ADDR    0x27
#define LCD_COLUMNS 20
#define LCD_LINES   4

// Constructeurs
RTC_DS1307 rtc;
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);

// Variables
DateTime now;
bool _dt = false;

void setup() {
  // Configurations
  Serial.begin(57600);
  pinMode(trigger, OUTPUT);

  // LCD
  lcd.init();
  lcd.backlight();

  // Test
  //digitalWrite(trigger, HIGH); // Déclenchement de la mesure

  // Réglages HTR
  if (! rtc.begin()) {
    Serial.println("RTC non trouvé");
    Serial.flush();
    while (1) delay(10);
  }

  if (! rtc.isrunning()) {
    Serial.println("RTC ne fonctionne PAS, on règle l'heure !");
    // Lorsque l'heure doit être réglée sur un nouvel appareil,
    // ou après une coupure de courant, la ligne suivante définit le RTC
    // sur la date et l'heure de compilation de ce croquis
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  }

  // Lecture de l'heure
  now = rtc.now();
  //digitalWrite(trigger, LOW); // Arrêt de la mesure

  // Affichage de la date
  lcd.print("PEM SIN : TP I2C");
  lcd.setCursor(4, 1);
  lcd.print(now.day(), DEC);
  lcd.print('/');
  lcd.print(now.month(), DEC);
  lcd.print('/');
  lcd.print(now.year(), DEC);
  delay(3000);
  lcd.setCursor(4, 1);
  lcd.print("                ");
}

void loop() {

  if (_dt) {
    now = rtc.now();
    lcd.setCursor(0, 1);
    lcd.print("                ");
    lcd.setCursor(4, 1);
    lcd.print(now.day(), DEC);
    lcd.print('/');
    lcd.print(now.month(), DEC);
    lcd.print('/');
    lcd.print(now.year(), DEC);
    delay(3000);
    lcd.setCursor(0, 1);
    lcd.print("                ");
    _dt = false;
  }
  else {
    for (int i = 0; i < 10; i++) {
      now = rtc.now();
      lcd.setCursor(4, 1);
      lcd.print(now.hour(), DEC);
      lcd.print("h");
      lcd.print(now.minute(), DEC);
      lcd.print("mn");
      lcd.print(now.second(), DEC);
      lcd.print("s ");
      delay(1000);
      _dt = true;
    }
  }
}
D0D1D2D3D4D5D6D7GNDLOGIC
GND5VSDASCLSQWRTCDS1307+
TP BUS I2C
HTR