#include <Wire.h>
#include "RTClib.h"
#include <LiquidCrystal.h>
LiquidCrystal lcd(10, 11, 5, 4, 3, 2);
RTC_DS3231 rtc;
const int hourButtonPin = 7; // Pin del botón para aumentar la hora
//de la alarma
const int minuteButtonPin = 6; // Pin del botón para aumentar los
//minutos de la alarma
const int alarmLED1Pin = 8; // Pin del primer LED de la alarma
const int alarmLED2Pin = 9; // Pin del segundo LED de la alarma
const int controlMotorA = A0; // Pin del segundo LED de la alarma
const int controlMotorB = A1; // Pin del segundo LED de la alarma
unsigned long startTime = 0; // Variable para registrar el tiempo de inicio
const unsigned long duration = 10000; //giro motor
const int alarmTriggeredLED = 12; // Pin del LED que se enciende cuando
//la alarma se activa
int hourAlarm = 21; //HORA INICIAL
int minuteAlarm = 28; //MINUTO INICIAL
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
if (!rtc.begin()) {
Serial.println(F("No se pudo encontrar el RTC"));
while (1);
}
if (rtc.lostPower()) {
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
pinMode(hourButtonPin, INPUT);
pinMode(minuteButtonPin, INPUT);
pinMode(alarmLED1Pin, OUTPUT);
pinMode(alarmLED2Pin, OUTPUT);
pinMode(alarmTriggeredLED, OUTPUT);
pinMode(controlMotorA, OUTPUT);
pinMode(controlMotorB, OUTPUT);
}
void loop() {
DateTime now = rtc.now();
if (digitalRead(hourButtonPin) == LOW) {
delay(200); // Debounce
hourAlarm = (hourAlarm + 1) % 24;
digitalWrite(alarmLED1Pin, HIGH);
delay(500); // Delay para evitar rebotes
digitalWrite(alarmLED1Pin, LOW);
}
if (digitalRead(minuteButtonPin) == LOW) {
delay(200); // Debounce
minuteAlarm = (minuteAlarm + 1) % 60;
digitalWrite(alarmLED2Pin, HIGH);
delay(500); // Delay para evitar rebotes
digitalWrite(alarmLED2Pin, LOW);
}
if (now.hour() == hourAlarm && now.minute() == minuteAlarm)
{
digitalWrite(alarmTriggeredLED, HIGH);
digitalWrite(alarmLED1Pin, HIGH);
digitalWrite(alarmLED2Pin, HIGH);
if (startTime == 0)
{
startTime = millis(); // Registrar el tiempo de inicio cuando se
//cumple la condición
digitalWrite(controlMotorA, HIGH);
digitalWrite(controlMotorB, LOW);
Serial.println("LED Encendido");
}
// Verificar si ha pasado el tiempo deseado
if (millis() - startTime >= duration) {
digitalWrite(controlMotorA, LOW);
digitalWrite(controlMotorB, LOW);
Serial.println("LED Apagado");
startTime = 1; // Restablecer el tiempo de inicio
}
} else {
startTime = 0; // Restablecer el tiempo de inicio
digitalWrite(alarmTriggeredLED, LOW);
digitalWrite(alarmLED1Pin, LOW);
digitalWrite(alarmLED2Pin, LOW);
}
lcd.setCursor(0,0);
lcd.print("T. act: ");
lcd.print(now.hour());
lcd.print(":");
lcd.print(now.minute());
lcd.print(":");
lcd.print(now.second());
Serial.print("Tactual: ");
Serial.print(now.hour());
Serial.print(":");
Serial.print(now.minute());
Serial.print(":");
Serial.print(now.second());
lcd.setCursor(0,1);
lcd.print("H. Dosis: ");
lcd.print(hourAlarm);
lcd.print(":");
lcd.print(minuteAlarm);
Serial.print(" Hora ALARMA: ");
Serial.print(hourAlarm);
Serial.print(":");
Serial.println(minuteAlarm);
}