Buenas de nuevo, estoy realizando un proyecto para mi acuario en el cual voy a controlar temperatura de agua, iluminación etc, la cuestión es que quiero cambiar el sp de la temperatura del agua y la hora de encendido de la iluminación con una matriz de 4x4, he probado un ejemplo de matriz y me funciona bien pero no se como implementarla a mi proyecto, gracias de antemano.
Este es el código que he utilizado para probar la matriz
#include<Keypad.h>
const byte filas = 4;
const byte columnas = 4;
byte pinesF[filas] = {53,51,49,47};
byte pinesC[columnas] = {45,43,41,39};
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);
char tecla;
void setup() {
Serial.begin(9600);
}
void loop() {
tecla = teclado.getKey();
if (tecla != 0)
Serial.print(tecla);
}
Y aquí adjunto mi proyecto de acuario
#include <OneWire.h> //SE INCLUYE LA LIBRERIA ONEWIRE PARA LA SONDA DS18B20
#include <Time.h>
#include <Wire.h>
#include <DS1307RTC.h>
#include <LiquidCrystal.h> //SE DECLARA LA LIBRERIA PARA EL LCD
#include <DallasTemperature.h> //SE DECLARA LA LIBRERIA PARA LA SONDA DS18B20
#define ONE_WIRE_BUS 13 //SE DEFINE EL PIN DATA DE LA SONDA DS18B20
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
float tempC = 0;
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
int iluminacion = 22; // ILUMINACION HACE REFERENCIA AL PIN Nº22 (OUTPUT)
int calentador = 6; // CALENTADOR HACE REFERENCIA AL PIN Nº6 (OUTPUT)
void setup() {
pinMode(iluminacion, OUTPUT); // SE DECLARA EL PIN Nº22 COMO SALIDA
pinMode(calentador, OUTPUT); // SE DECLARA EL PIN Nº6 COMO SALIDA
sensors.begin(); //SE INICIALIZA EL SENSOR
lcd.begin(16,2); // SE DEFINE LOS CARACTERES Y LINEAS DE LA PANTALLA
lcd.clear(); // SE LIMPIA LA PANTALLA
setSyncProvider(RTC.get); // Vamos a usar el RTC
setSyncInterval(86400000); // Sincronizo una vez cada 24 horas
digitalWrite(iluminacion, LOW); // APAGAR ILUMINACIÓN AL ARRANCAR ARDUINO
}
void loop() {
sensors.requestTemperatures();
tempC = sensors.getTempCByIndex(0);
delay(1000);
lcd.setCursor(2,1);
lcd.print(tempC);
lcd.setCursor (8,1);
lcd.print("GRADOS");
if (tempC <= 20.0) {
digitalWrite(calentador,LOW); // se enciende la resistencia
lcd.setCursor(0,0);
lcd.print("CALENTANDO AGUA ");
}
if (tempC >= 21.0){
digitalWrite(calentador,HIGH); //se apaga la resistencia
lcd.setCursor(0,0);
lcd.print(" TEMPERATURA OK ");
}
if (tempC <= 19.0){
lcd.setCursor (0,0);
lcd.print("FALLO CALENTADOR");
}
if (esHora()) { //SI ES LA HORA ACTIVAMOS ILUMINACION
digitalWrite(iluminacion, LOW);
delay(1000);
} else {
digitalWrite(iluminacion , HIGH); //SI NO ES LA HORA APAGAMOS ILUMINACION
delay(1000);
}
}
boolean esHora() {
byte horaInicio = 18; //DEFINIR HORA-MINUTO DE INICIO Y HORA-MINUTO APAGADO
byte minutoInicio = 45;
byte horaFin = 18;
byte minutoFin = 46;
int momentoInicio = (horaInicio * 60) + minutoInicio; //SE PASA TODO A MINUTOS PARA HACER LAS COMPARACIONES
int momentoFin = (horaFin * 60) + minutoFin;
int momentoAhora = (hour() * 60) + minute();
//Esto es que si hemos pasado o estamos en el momento de inicio , pero antes del momento del fin…
if ((momentoInicio <= momentoAhora) && (momentoAhora < momentoFin)) {
//devolver "Cierto" en esta función "esHora"
return true;
} else {
//devolver "Falso" en esta función "esHora"
return false;
}
}