Buenas tardes ,tengo este programa todo funciona bien , pero quiero que en la salida LED del pin 6 del arduino ,apenas yo configure la alarma me active el pin 6 para activar un rele para poder encender una bombilla ,les agradezco su ayuda!!
#include <LiquidCrystal.h> //Libreria del LCD
LiquidCrystal lcd(5,4,3,2,1,0); //Pins del LCD
//#include <DS1307RTC.h> //Librerias del Reloj
//#include <Time.h>
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC;
#include <Keypad.h> //Libreria para el teclado
char pulsacion;
const byte Filas = 4; //Cuatro filas
const byte Cols = 3; //Tres columnas
byte Pins_Cols[] = { 9, 8, 7}; //Pines Arduino para las columnas
byte Pins_Filas[] = {13, 12, 11,10}; // Pines Arduino para las filas
char Teclas [ Filas ][ Cols ] =
{
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'},
};
Keypad Teclado1 = Keypad(makeKeymap(Teclas), Pins_Filas, Pins_Cols, Filas, Cols); //Creamos lo que va a ser nuestro Keypad, que llamaremos "Teclado1"
//Tener en cuenta que el Keypad ahora es de 4x3. La columna Nº1 no la vamos a usar.
int alarma=A0, LED=6 ;
int i;
int pulsacion1;
int seg1,min1,hor1,ano1,mes1,dia1; //Hora que trae el reloj DS1307RTC
int min2,hor2; //Hora que defino yo como alarma. Solo me interesan la hora y los minutos
void setup() {
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, sincronizandola con el de el ordenador. (Comentar una vez establecida la hora)
lcd.clear();
lcd.setCursor(0,0);
lcd.begin(16,2); //Las medidas del display
pinMode(alarma,INPUT);
pinMode(LED,OUTPUT);
}
void loop() {
lcd.clear();
if(analogRead(alarma)<512){ //Mientras el pulsador NO este pulsado...
DateTime now = RTC.now();
// En la anterior linea ya suponemos que el reloj ha sido SETeado en otro momento
// y que la hora ya esta en la memoria. Esa hora esta en now().
//De aqui en adelante nos vamos a dedicar a escribir la hora en la pantalla.
lcd.setCursor(0,0);
lcd.print("FECHA:");
lcd.setCursor(6,0);
dia1=now.day();
if(dia1<10){lcd.print("0");
lcd.setCursor(7,0);}
lcd.print(dia1);
lcd.setCursor(8,0);
lcd.print("/") ;
lcd.setCursor(9,0);
mes1=now.month();
if(mes1<10){lcd.print("0");
lcd.setCursor(10,0);}
lcd.print(mes1);
lcd.setCursor(11,0);
lcd.print("/") ;
lcd.setCursor(12,0);
ano1=now.year();
if(ano1<10){lcd.print("0");
lcd.setCursor(13,0);}
lcd.print(ano1);
lcd.setCursor(0,1) ;
hor1=now.hour();
if(hor1<10){lcd.print("0");
lcd.setCursor(1,1);}
lcd.print(hor1);
lcd.setCursor(2,1);
lcd.print(":") ;
lcd.setCursor(3,1);
min1=now.minute();
if(min1<10){lcd.print("0");
lcd.setCursor(4,1);}
lcd.print(min1);
lcd.setCursor(5,1);
lcd.print(":") ;
lcd.setCursor(6,1);
seg1=now.second();
if(seg1<10){lcd.print("0");
lcd.setCursor(7,1);}
lcd.print(seg1);
delay(1000);}
else{ //Cuando se pulse el pulsador...
//Pediremos al usuario que escriba la hora en la que quiere hacer sonar la alarma.
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Escribe la hora");
delay(1000);
//La hora, constara de cuatro numeros ( 2 para los minutos y 2 para los segundos )
// Por ello, daremos 5 vueltas dentro de un for, esperando a que el usuario pulse una tecla.
// En la tercera vuelta (i=2), no debemos pedir al usuario que nos de un valor, sino que escribiremos " : " que separan las horas de los minutos.
for(i=0;i<5;i++){
char pulsacion;
lcd.setCursor(i,1);
if(i==2){lcd.print(":");}
else{
pulsacion=Teclado1.waitForKey(); // Esperamos a que pulse un boton.
lcd.print(pulsacion); //Escribimos el el valor de pulsacion en el LCD.
switch(pulsacion){ // Pulsacion es de tipo char, por eso hemos definido al principio de programa "pulsacion1", de tipo int,
// Que tendra un valor numerico que sera el de la hora en la que el usuario ha definido la alarma.
//Este valor, sera dependiendo el boton pulsado en el teclado matricial, que hemos guardado en pulsacion.
case '1': pulsacion1=1;
break;
case '2': pulsacion1=2;
break;
case '3': pulsacion1=3;
break;
case '4': pulsacion1=4;
break;
case '5': pulsacion1=5;
break;
case '6': pulsacion1=6;
break;
case '7': pulsacion1=7;
break;
case '8': pulsacion1=8;
break;
case '9': pulsacion1=9;
break;
case '0': pulsacion1=0;
}
switch(i){
case 0: hor2=pulsacion1*10; //Sabemos que el primer valor de los minutos sera un valor en decimas
break;
case 1: hor2=hor2+pulsacion1; // El segundo valor de los minutos que sera una unidades
break;
case 3: min2=pulsacion1*10; //Primer valor de los segundos que sera un valor en decimas
break;
case 4: min2=min2+pulsacion1; //Segundo valor de los segundos que sera en unidades
break;}
}
delay(500);
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Alarma");
lcd.setCursor(0,1);
lcd.print("Configurada");
delay(3000);
lcd.clear();
while(min1!=min2||hor1!=hor2){ //Mientras la hora de la alarma escrita por el usuario, y la hora real sean diferentes,
//escribiremos la hora real y la de la alarma en la pantalla.
DateTime now = RTC.now();
lcd.setCursor(0,0);
lcd.print("HORA");
lcd.setCursor(0,1);
lcd.print("Ala.");
lcd.setCursor(6,0) ; //dibujamos la hora real
hor1=now.hour();
if(dia1<10){lcd.print("0");
lcd.setCursor(7,0);}
lcd.print(hor1);
lcd.setCursor(8,0);
lcd.print(":") ;
lcd.setCursor(9,0);
min1=now.minute();
if(min1<10){lcd.print("0");
lcd.setCursor(10,0);}
lcd.print(min1);
lcd.setCursor(11,0);
lcd.print(":") ;
lcd.setCursor(12,0);
seg1=now.second();
if(seg1<10){lcd.print("0");
lcd.setCursor(13,0);}
lcd.print(seg1);
lcd.setCursor(6,1) ; //dibujamos la hora de la alarma
if(hor2<10){lcd.print("0");
lcd.setCursor(7,1);}
lcd.print(hor2);
lcd.setCursor(8,1);
lcd.print(":") ;
lcd.setCursor(9,1);
if(min2<10){lcd.print("0");
lcd.setCursor(10,1);}
lcd.print(min2);
delay(1000);
}
//En cuanto sea la hora, saltara la alarma, se encenderan los LEDs y sonara el zumbador.
lcd.clear();
lcd.setCursor(0,0);
lcd.print("ES LA HORA!!");
while(analogRead(alarma)<512){ //Hasta que pulsemos de nuevo alarma, no va a parar de hacer luz y ruido.
digitalWrite(LED,HIGH);
delay(1000);
digitalWrite(LED,LOW);
delay(1000);} //Alarma es un pulsador. Hay que quedarse un rato hasta que lea justo 1.
delay(3000);
}//Final del else de arriba
}//Final de programa
FD24V2JIM2B2MPF.ino (6.96 KB)