¿Como le hago para poner una hora mediante el teclado matricial?

Buenas noches, actualmente estoy trabajando en los ultimos pasos para mi proyecto. estoy intentado poner la fecha y hora en una pantalla LCD pero pulsando los botones del teclado matricial, el objetivo de esto es que a la hora que yo puse en la pantalla la fecha y hora se active un modulo rele.

Aqui el problema viene que nose muy bien como programar el teclado matricial para que ponga los digitos en la pantalla lcd y esos digitos que puse en la pantalla sea la hora en la cual se va a estar activando el rele.

He estado investigando pero no hay informacion acerca de eso y lo intente por mi propia cuenta pero me confundo mucho. Por favor si no le es de mucha molestia en ayudarme con eso.

Aqui les dejo el codigo como complemento

#include <RTClib.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>


RTC_DS3231 rtc;

#define countof(a) (sizeof(a) / sizeof(a[0]))
const byte COLUMNAS = 3;
const byte FILAS = 4;
char hexaKeys [FILAS][COLUMNAS] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'*','0','#'}
};
byte rowPins[FILAS] = {8, 7, 6, 5}; 
byte colPins[COLUMNAS] = {4, 3, 2};

LiquidCrystal_I2C lcd (0x27,2, 1, 0, 4, 5, 6, 7);

Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, FILAS, COLUMNAS); 

int sensordelsuelo= A0;
int porcentajesensorsuelo;
int sensordelluvia= A1;
int valor;
int fotoresistencia=A2;
int valorfotoresistencia;
int porfotoresistencia;
//int motordeagua= 9;
//int motoruno=6;
//int motordos= 10;
void setup() {
 
  Wire.begin();
  rtc.begin();
  Serial.begin(9600);
  //Serial.print("hola");
 //rtc.adjust(DateTime(__DATE__, __TIME__));
  lcd.setBacklightPin(3, POSITIVE);
 lcd.setBacklight(HIGH);
  lcd.begin(20, 4);
  lcd.clear();
  pinMode(fotoresistencia, INPUT);
// pinMode(motoruno, OUTPUT);
   //pinMode(motordos, OUTPUT);
 //pinMode(motordeagua,OUTPUT);

}

 void loop() {

 
 char customKey = customKeypad.getKey();
   if(customKey){
  lcd.setCursor(17,3);
   lcd.print(customKey);
  // Serial.println(tecla);
  }
  
  lcd.setCursor(0,1);
  lcd.print("Regando:");
  lcd.setCursor(0,2);
  lcd.print("luminosidad:");
  lcd.setCursor(0,3);
  lcd.print("humedad:");
  lcd.setCursor(11,1);
  lcd.print("temp:30C");

   int humedad= analogRead(sensordelsuelo);
   porcentajesensorsuelo= map(humedad, 0, 1023, 0 ,100);
   lcd.setCursor(8,3);
   lcd.print(porcentajesensorsuelo);
   lcd.print("%");
   
  
   valor = analogRead(sensordelluvia);

    valorfotoresistencia= analogRead(fotoresistencia);
     porfotoresistencia= map(valorfotoresistencia, 0, 1023, 0 ,100);
     lcd.setCursor(12,2);
     lcd.print(porfotoresistencia);
     lcd.print("%");

     DateTime fecha = rtc.now();
     lcd.setCursor(0,0);
     lcd.print(fecha.day());
     lcd.print("/");
     lcd.print(fecha.month());
     lcd.print("/");
     lcd.print(fecha.year());
     lcd.setCursor(11,0);
     lcd.print(fecha.hour());
     lcd.print(":");
     lcd.print(fecha.minute());
     lcd.print(":");
     lcd.print(fecha.second());
     

  if (customKey == '*') { 
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("hora de riego");
  lcd.setCursor(0,1);
  lcd.print("hora inicial");
  lcd.setCursor(0,2);
  lcd.print("hora final");
  lcd.setCursor(0,3);
  lcd.print("# para regresar");}
  
   
  } 
  
//digitalWrite(motoruno, HIGH);
 //digitalWrite(motordos, HIGH);
// delay(5000);
//digitalWrite(motoruno, LOW);
//digitalWrite(motordos, LOW);
 //delay(5000); 
//digitalWrite(motordeagua, HIGH);
//delay(5000);
//digitalWrite(motordeagua, LOW);
//delay(5000);

Aqui hay un ejemplo y simulación de como alguien implementa una alarma y un reloj Alarma con teclado matricial y LCD i2C
En el ejempo muestra como debes destinar unas determinadas teclas para setear la alarma de riego, e incluso un boton para ingresar hora manualmente.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.