#include <Wire.h>
#include <RTClib.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <LiquidCrystal_I2C.h>

// Definir la instancia del objeto para RTC, LCD y OLED
RTC_DS1307 rtc;
LiquidCrystal_I2C lcd(0x3F,20,4);
Adafruit_SSD1306 oled(128, 64, &Wire, -1);

// Inicialización del sketch
void setup() {

    // Inicializamos y configuramos la pantalla LCD
    lcd.init();
    lcd.backlight();
    lcd.clear();

    // Mostramos un mensaje inicial por la LCD
    lcd.setCursor(3, 0);
    lcd.print("Registro de");
    lcd.setCursor(3, 1);
    lcd.print("eventos");

    // Inicializamos y configuramos la pantalla OLED
    oled.begin(SSD1306_SWITCHCAPVCC, 0x3C);
    oled.clearDisplay();
    oled.setTextColor(SSD1306_WHITE);
    oled.setTextSize(1);
    // Mostramos un mensaje inicial por la OLED
    oled.setCursor(0, 0);
    oled.println("Registros");
    oled.display();

    // Inicalizamos el RTC
    rtc.begin();
    // Configuramos el RTC con la fecha y la hora del PC
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

    // Esperamos un poco antes de empezar
    delay(2000);

}

// Bucle principal del sketch
void loop() {

    // Obtenemos la fecha y hora del RTC
    DateTime actualTime = rtc.now();
    String fecha_hora_actual = String(actualTime.timestamp(DateTime::TIMESTAMP_FULL));
    // Separamos la fecha del resto de la cadena
    String fecha_actual = fecha_hora_actual.substring(0, 10);
    // Separamos la hora del resto de la cadena
    String hora_actual = fecha_hora_actual.substring(11);

    // Comprobamos que se ha accionado el pulsador
    if(digitalRead(23) == HIGH) {

        // Vaciamos la pantalla OLED
        oled.clearDisplay();
        // Imprimimos el mensaje por defecto
        oled.setCursor(0, 0);
        oled.println("Registros");
        // Imprimimos la hora actual
        oled.setCursor(20, 32);
        oled.println(hora_actual);
        // Actualizamos nuestra OLED
        oled.display();

    }

    // Limpiamos la pantalla LCD
    lcd.clear();
    // Imprimimos en la primera línea la fecha actual
    lcd.setCursor(3, 0);
    lcd.print(fecha_actual);
    // Imprimimos en la primera línea la hora actual
    lcd.setCursor(4, 1);
    lcd.print(hora_actual);
    // Esperamos un poco antes de continuar
    delay(200);

}
