// Prueba de Reloj Tiempo Real (RTC) y Modulo I2C para LCD 2x16 By: http://dinastiatecnologica.com
// Conexion i2C :Arduino UNO SCL-> A5 SDA->A4 VCC->5V GND->GND
// Conexion RTC :Arduino UNO GND->GND VCC->5V SCL-> SCL SDA->SDA los dos pines despues del ...12,13,GND,AREF,SDA,SCL
// NOTA: se debe cargar dos veces este programa 1.Con la linea 9= RTC.adjust(DateTime(__DATE__, __TIME__));
// 2. Sin esa linea
#include <Wire.h>
#include "RTClib.h"
#include <LiquidCrystal_I2C.h>
//LiquidCrystal_I2C lcd(0x3F,16,2);
LiquidCrystal_I2C lcd(0x27, 16, 2);
RTC_DS1307 RTC;
int year=2023;
String yearaux = "2023";
int month=11;
int day=19;
int hour=23;
int minute=30;
int second=50;
int i;
boolean flag=false;
int Boton_Nueve=1; // variable para el boton de inicio
int conta;
void setup () {
pinMode(8, INPUT_PULLUP); // button1 is connected to pin 8
pinMode(9, INPUT_PULLUP); // button2 is connected to pin 9
Wire.begin(); // Inicia el puerto I2C
RTC.begin(); // Inicia la comunicaci¢n con el RTC
//RTC.adjust(DateTime(__DATE__, __TIME__)); // Establece la fecha y hora (Comentar una vez establecida la hora)
//el anterior se usa solo en la configuracion inicial
Serial.begin(9600); // Establece la velocidad de datos del puerto serie
lcd.init();
lcd.backlight();
lcd.clear();
}
void loop(){
Boton_Nueve=digitalRead(9); // lee el estado del boton 9
if(!digitalRead(8)){
flag=false;
Serial.print("flag: ");
Serial.println(flag);
Serial.println("adentro del boton 8");
String sub_S = yearaux.substring(2,4);
lcd.setCursor(0,0);
lcd.print("DATE:");
lcd.print(day);
lcd.print("/");
lcd.print(month);
lcd.print("/20");
lcd.print(sub_S);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print("TIME: ");
lcd.print(hour);
lcd.print(":");
lcd.print(minute);
lcd.print(":");
lcd.print(second);
i = 0;
long value;
value = sub_S.toInt(); //convertir texto a num
Serial.print("value: ");
Serial.println(value);
day = edit(5, 0, day);
month = edit(8, 0, month);
year = edit(13, 0, value);
hour = edit(5, 1, hour);
minute = edit(8, 1, minute);
Serial.print("day: ");
Serial.println(day);
Serial.print("month: ");
Serial.println(month);
Serial.print("year: ");
Serial.println(year);
}
if(flag==false){
RTC.adjust(DateTime(year, month, day, hour, minute, second));
flag=true;
Serial.println("RTC.adjust");
}
String sub_S = yearaux.substring(2,4);
Serial.print("yearaux: ");
Serial.println(sub_S );
Serial.print("dayfinal: ");
Serial.println(day);
Serial.print("monthfinal: ");
Serial.println(month);
Serial.print("yearfinal: ");
Serial.println(year);
Serial.print("hourfinal: ");
Serial.println(hour);
Serial.print("minutefinal: ");
Serial.println(minute);
//RTC.adjust(DateTime(year, month, day, hour, minute, second));
Serial.print("flag: ");
Serial.println(flag);
DateTime now = RTC.now(); // Obtiene la fecha y hora del RTC
Serial.print(now.day(), DEC); // dia
Serial.print('/');
Serial.print(now.month(), DEC); // Mes
Serial.print('/');
Serial.print(now.year(), DEC); // año
Serial.print(' ');
Serial.print(now.hour(), DEC); // Horas
Serial.print(':');
Serial.print(now.minute(), DEC); // Minutos
Serial.print(':');
Serial.print(now.second(), DEC); // Segundos
Serial.println();
lcd.setCursor(0,0);
lcd.print("DATE:");
lcd.print(now.day(), DEC);
lcd.print("/");
lcd.print(now.month(), DEC);
lcd.print("/");
lcd.print(now.year(), DEC);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print("TIME: ");
lcd.print(now.hour(), DEC);
lcd.print(":");
lcd.print(now.minute(), DEC);
lcd.print(":");
lcd.print(now.second(), DEC);
delay(1000); // La informaci¢n se actualiza cada 1 seg.
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(" ");
}
byte edit(byte x, byte y, byte parameter){
char text[3];
while(!digitalRead(8)); // Wait until button (pin #8) released
while(true){
//while(!digitalRead(9)){ // If button (pin #9) is pressed
Serial.print("Estado de boton: ");
Serial.println(Boton_Nueve);
if (Boton_Nueve==HIGH){
conta = conta + 1;
Serial.println("contador:");
Serial.println(conta);
parameter++;
if(i == 3 && parameter > 23) // If hours > 23 ==> hours = 0
parameter = 0;
if(i == 4 && parameter > 59) // If minutes > 59 ==> minutes = 0
parameter = 0;
if(i == 0 && parameter > 31) // If date > 31 ==> date = 1
parameter = 1;
if(i == 1 && parameter > 12) // If month > 12 ==> month = 1
parameter = 1;
if(i == 2 && parameter > 99) // If year > 99 ==> year = 0
parameter = 0;
sprintf(text,"%02u", parameter);
lcd.setCursor(x, y);
lcd.print(text);
digitalWrite(Boton_Nueve, LOW);
delay(200); // Wait 200ms
}
lcd.setCursor(x, y);
Serial.print("parametro: ");
Serial.println(parameter);
Serial.print("x: ");
Serial.println(x);
Serial.print("y: ");
Serial.println(y);
Serial.print("text: ");
Serial.println(text);
Serial.print("int i: ");
Serial.println(i);
lcd.print(" "); // Display two spaces
blink_parameter();
sprintf(text,"%02u", parameter);
lcd.setCursor(x, y);
lcd.print(text);
blink_parameter();
if(!digitalRead(8)){ // If button (pin #8) is pressed
i++; // Increament 'i' for the next parameter
return parameter; // Return parameter value and exit
}
}
}
void blink_parameter(){
byte j = 0;
while(j < 10 && digitalRead(8) && digitalRead(9)){
j++;
delay(25);
}
}