#include <LiquidCrystal.h>
#include <Time.h>
#include <TimeLib.h>
#include<Keypad.h>
LiquidCrystal lcd(7, 8, 9, 10, 11, 12); // ( RS, EN, d4, d5, d6, d7)
const byte filas = 4;
const byte columnas = 4;
byte pinesF[filas] = {9,8,7,6};
// f1,f2,f3,f4
byte pinesC[columnas] = {5,4,12,11};
// c1,c2,c3,c4
char teclas[filas][columnas] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
Keypad teclado = Keypad(makeKeymap(teclas), pinesF, pinesC, filas, columnas);
int EVpin = 9; // pin al que conectamos la electroválvula de riego
//Defino horas de riego Inicio a las 00:01 y termina a las 00:02//
//(poned las horas a las que hagais las pruebas)//
byte horaInicio1 = 06, minutoInicio1 = 00;
byte horaFin1 = 06, minutoFin1 = 02;
boolean esHoraRiego(){
//Para hacer las comparaciones de cuando empezar y cuando terminar, lo paso todo a minutos.
//Por eso momentoInicio = 13*60 + 11 = 791 y de fin = 13*60 + 12 = 792
//También se podría hacer una doble comparación de horaActual con horaInicio y horaFin
//y de minutoActual con minutoInicio y minutoFin
int momentoInicio1 = (horaInicio1 * 60) + minutoInicio1;
int momentoFin1 = (horaFin1 * 60) + minutoFin1;
int momentoAhora1 = (hour() * 60) + minute();
//Esto es que si hemos pasado o estamos en el momento de inicio , pero antes del momento del fin…
if((momentoInicio1<=momentoAhora1) && (momentoAhora1<momentoFin1)){
return true; // estamos en período de riego: devolver “true”
}
else {
return false; // no estamos en período de riego: devolver “false”
}
}
void setup()
{
lcd.begin(16, 2);
pinMode (EVpin, OUTPUT);
Serial.begin(9600);
//Pongo el reloj en la hora actual (en mi caso las 20:40:00 del 29/11/2018)
//con setTime(hours, minutes, seconds, days, months, years);
setTime(14, 00, 00, 8, 12, 2018);
}
void loop()
{
Serial.print("Son las: "); //Muestro por el puerto serie la hora;
Serial.print(String(hour()) + ":" + String(minute()) + ":" + String(second()));
if(esHoraRiego()){ //comprobamos si es la hora del riego
Serial.println(" --> Es hora riego!!"); // es hora de riego: informo por serie
digitalWrite (EVpin, HIGH); // activo la EV
}
else {
Serial.println(" --> No es hora riego"); // no es hora de riego: informo por serie
digitalWrite (EVpin, LOW); // cierro la EV
}
delay(1000); // espero 1s
}
Hola @Gabriel21, necesitas leer primero las normas y editar tu hilo de acuerdo a las mismas.
Te paso privado con instrucciones.
Tu programa tiene algunos problemas a futuro.
setTime(14, 00, 00, 8, 12, 2018);
a menos que lo comentes hará que tu RTC se reinicie siempre con esa hora.
He modificado muy sutilmente para mejorar tu consulta y ademas no tiene sentido que cada vez que entres a consultar por una hora vuelvas a generar todos las horas ya que simplemente pueden ser constantes.
const int momentoInicio1 = horaInicio1 * 60 + minutoInicio1;
const int momentoFin1 = horaFin1 * 60 + minutoFin1;
const int momentoInicio2 = horaInicio2 * 60 + minutoInicio2;
const int momentoFin2 = horaFin2 * 60 + minutoFin2;
const int momentoInicio3 = horaInicio3 * 60 + minutoInicio3;
const int momentoFin3 = horaFin3 * 60 + minutoFin3;
const int momentoInicio4 = horaInicio4 * 60 + minutoInicio4;
const int momentoFin4 = horaFin4 * 60 + minutoFin4;
const int momentoInicio5 = horaInicio5 * 60 + minutoInicio5;
const int momentoFin5 = horaFin5 * 60 + minutoFin5;
const int momentoInicio6 = horaInicio6 * 60 + minutoInicio6;
const int momentoFin6 = horaFin6 * 60 + minutoFin6;
boolean esHoraRiego(){
int momentoAhora = hour() * 60 + minute();
if (momentoInicio1<=momentoAhora && momentoAhora <momentoFin1 )
return true; // estamos en período de riego: devolver "true"
if (momentoInicio2<=momentoAhora && momentoAhora<momentoFin2)
return true; // estamos en período de riego: devolver "true"
if (momentoInicio3<=momentoAhora && momentoAhora<momentoFin3)
return true; // estamos en período de riego: devolver "true"
if (momentoInicio4<=momentoAhora && momentoAhora<momentoFin4)
return true; // estamos en período de riego: devolver "true"
if (momentoInicio5<=momentoAhora && momentoAhora<momentoFin5)
return true; // estamos en período de riego: devolver "true"
if (momentoInicio6<=momentoAhora && momentoAhora<momentoFin6)
return true; // estamos en período de riego: devolver "true"
else
return false; // no estamos en período de riego: devolver "false"
}
Asi se postean los códigos.
Hola gracias por contestar si esque no le cambie jaj, queria que se modificara la hora porque luego hay cambio de horario
Si claro pero cambiarás la hora por teclado pero primero ordenemos el anterior.
busca la librería Keypad usando como siempre Google: Arduino Keypad
Eso es lo que se, se guardar 2 digitos en una variable pero no se como hacer lo mismo en otra variable
Ya veo.. tienes que cargar la hora, minuto de inicio y la hora y minuto de fin?
Bueno.. No son tareas ni simples ni difíciles
Imagina crear un camino de preguntas y respuestas.
Si sabes cargar dos puedes cargar muchas variables.
Vas preguntando
hora inicio: y cargas los dos valores x teclado
De nuevo
minuto inicio y cargas los dos valores de nuevo
y siempre igual
Termina con una tecla como # x ejemplo o lo que tengas en tu teclado.
Se comprende?
Es una secuencia..
A cada paso que das, le corresponde una respuesta y no sale hasta completar con una tecla que lo indica
Consejo:
Arma otro sketch: con Keypad y LCD y trabaja esta parte.
Cuando este dominada lo incorporas pero no todo junto ahora.
No lo logro esta algo complicado para alguien que no sabe jaja
Aiudaa xd
Leiste las normas? Me dirás que si. Que dice respecto de la impaciencia? Re lee por favor!!
La gente duerme, tiene trabajo, obligaciones y una vida, y tu posteas
Today at 02:12:47
No lo logro esta algo complicado para alguien que no sabe jaja
y apenas 6 hs despues
Today at 08:00:07
Aiudaa xd
entonces cálmate!!
Tu desesperación no es la nuestra. Para eso hay tiempos perdidos o cosas no estudiadas en su momento.
Además acabo de ver que este hilo no tiene ni idea para donde va, no tiene consulta ni objetivo, ni duda?
Yo se que quieres hacer pero debes expresarlo debidamente en el comienzo del hilo.
Asi que vuelve, edita el primer post y explica lo que pretendes.