/*
Menu por puerto serial
*/
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 rtc;
String dias[7] = { "Domingo", "Lunes", "Martes", "Miercoles", "Jueves",
"Viernes", "Sabado" };
String meses[12] = { "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio",
"Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre" };
void setup() {
Serial.begin(9600);
if (!rtc.begin()) {
Serial.println(F("No se encuentra el dispositivo"));
while (1)
;
}
// Mensaje de bienvenida
start();
}
void loop() {
char opcion;
while(true){
if (Serial.available() > 0) {
opcion = Serial.read();
break;
}
}
// Lee y descarta un byte de datos desde el buffer
clearSerialBuffer();
switch(opcion){
case '1':
Serial.println("Opción 1");
mostrarTiempo();
break;
case '2':
Serial.println("Opción 2");
ajustarTiempo();
start();
break;
case '3':
Serial.println("Opción 3");
rtc.adjust(DateTime("2022-12-18T18:00:00"));
start();
break;
default:
Serial.println("Opcion incorrecta.");
break;
}
}
void start(){
Serial.println("Bienvenido al sistema. Elija una opcion:");
Serial.println("\n1. Iniciar el sistema.");
Serial.println("2. Ajustar fecha y hora.");
Serial.println("3. Cargar valores por defecto e iniciar el sistema.");
}
void mostrarTiempo(){
while(true){
DateTime tiempo = rtc.now();
String timestamp = String (dias[tiempo.dayOfTheWeek()]) + String(" ") +
String(tiempo.day(), DEC) + String(" de ") +
String(meses[tiempo.month() - 1]) + String(" de ") +
String(tiempo.year(), DEC) + String(" | ") +
String(tiempo.hour(), DEC) + String(':') +
String(tiempo.minute(), DEC) + String(':') +
String(tiempo.second(), DEC);
Serial.println("Sistema en ejecucion.");
Serial.println(timestamp);
delay(1000);
}
}
void ajustarTiempo(){
char buffer[20];
Serial.println("Ingresar fecha y hora en formato ISO8601 (2022-12-18T18:00:00):");
while(true){
if (Serial.available() > 0) {
Serial.readBytesUntil('\n', buffer, 20);
Serial.print("El dato ingresado es: ");
Serial.println(buffer);
break;
}
}
rtc.adjust(DateTime(buffer));
Serial.println("Sistema actualizado.");
}
void clearSerialBuffer() {
delay(100);
while (Serial.available()) {
Serial.read();
}
}