Hola
Me complace saludarles y con la molestia de solicitarles ayuda, resumo breve mente que estoy realizando mi primer proyecto en ARDUINO MEGA, consiste en una camara de cuidados neonatales.
El programa inicia con 4 preguntas con los cuales introduciremos datos y/o parametros por medio de un teclado matricial, esto últimos los utilizamos para trabajar en el loop, el problema que tengo es durante la ejecución del loop , quiero utilizar el keypad para encender y/o apagar un rele.
Hice una prueba queriendo solo imprimir el caracter del teclado en el monitor pero presento problemas como :
Problemas con el tiempos del delay
No entra a tiempo la tecla
No entra ninguna letra
Aveces dejo presionada la tecla mucho tiempo y funciona
De antemano muchas gracias por su atención y esperando se encuentren bien de salud durante esta epidemia , manténganse seguros.
adjunto mi sketch
#include <Key.h> ////libreria del teclado
#include <Keypad.h>
#include <LiquidCrystal_I2C.h> // Libreria LCD_I2C
LiquidCrystal_I2C lcd(0x27,20,4); // si no te sale con esta direccion puedes usar (0x3f,16,2) || (0x27,16,2) ||(0x20,16,2)
const byte FILAS = 4; // define numero de filas
const byte COLUMNAS = 4; // define numero de columnas
char keys[FILAS][COLUMNAS] = { // define la distribucion de teclas
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte pinesFilas[FILAS] = {24, 26, 28, 30}; // pines correspondientes a las filas
byte pinesColumnas[COLUMNAS] = {32, 34, 36, 38}; // pines correspondientes a las columnas
Keypad teclado = Keypad(makeKeymap(keys), pinesFilas, pinesColumnas, FILAS, COLUMNAS); // crea objeto
#include "DHT.h"
#define DHTPIN 10 // define sensor en pin 10
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
const int rele = 4; /// pines de los rele NO LOS USO POR EL MOMENTO HASTA RESOLVER EL ENCENDIDO CON EL TECLADO
const int rele2 = 3;
char TECLA = ' '; // almacena la tecla presionada
char CLAVE[2]; // almacena en un array 2 digitos ingresados
int INDICE = 0; // indice del array
char TECLA2 = ' '; // almacena la tecla presionada
char CLAVE2[2]; // almacena en un array 2 digitos ingresados
int INDICE2 = 0; // indice del array
char TECLA3 = ' '; // almacena la tecla presionada
char CLAVE3[2]; // almacena en un array 2 digitos ingresados
int INDICE3 = 0; // indice del array
char TECLA4 = ' ';
char CLAVE4[2]; // almacena en un array 2 digitos ingresados
int INDICE4 = 0; // indice del array
char TECLA5 = ' '; ///// ALMACEN PARA LA TECLA PRESIONADA
int tempmax = 0;
int humeminima = 0;
int humedadmax = 0;
int tempmin = 0;
/////////////////////////////////// SET UP///////////////////////////////////////////////////////////
void setup() { //// mi setuo de inicio
Serial.begin(9600);
lcd.init();
lcd.begin(20, 4);
lcd.backlight();
Bienvenida();
Pregunta1();
Pregunta3();
Pregunta2();
Pregunta4();
}
void Bienvenida()
{
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("*** Bienvenido *** ");
lcd.setCursor(1,1);
lcd.print(" ** NeoCan ** ");
lcd.setCursor(2,2);
lcd.print("by: Brandon Loo");
delay(6000);
}
void Pregunta1()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Ingrese Temp Max:");
while(TECLA != '#'){
TECLA = teclado.getKey();
if(TECLA){
CLAVE[INDICE] = TECLA; // almacena en array la tecla presionada
INDICE++; // incrementa indice en uno
lcd.setCursor(INDICE,1);
lcd.print(TECLA);
}
}
tempmax = (String(CLAVE[0]).toInt()*10) + String(CLAVE[1]).toInt();
}
void Pregunta2()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Ingrese Humedad Min:");
while(TECLA2 != '#'){
TECLA2 = teclado.getKey();
if(TECLA2){
CLAVE2[INDICE2] = TECLA2; // almacena en array la tecla presionada
INDICE2++; // incrementa indice en uno
lcd.setCursor(INDICE2,1);
lcd.print(TECLA2);
}
}
humeminima = (String(CLAVE2[0]).toInt()*10) + String(CLAVE2[1]).toInt();
}
void Pregunta3()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Ingrese Temp Min:");
while(TECLA3 != '#'){
TECLA3 = teclado.getKey();
if(TECLA3){
CLAVE3[INDICE3] = TECLA3; // almacena en array la tecla presionada
INDICE3++; // incrementa indice en uno
lcd.setCursor(INDICE3,1);
lcd.print(TECLA3);
}
}
tempmin = (String(CLAVE3[0]).toInt()*10) + String(CLAVE3[1]).toInt();
}
void Pregunta4()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Ingrese Hume Max:");
while(TECLA4 != '#'){
TECLA4 = teclado.getKey();
if(TECLA4){
CLAVE4[INDICE4] = TECLA4; // almacena en array la tecla presionada
INDICE4++; // incrementa indice en uno
lcd.setCursor(INDICE4,1);
lcd.print(TECLA4);
}
}
humedadmax = (String(CLAVE4[0]).toInt()*10) + String(CLAVE4[1]).toInt();
}
/////////////////////////////////////////////////////////////////////// LOOP ///////////////////////////////////////////////////////
void loop() {
int h = dht.readHumidity();
int c = dht.readTemperature();
lcd.clear();
dht.begin();
lcd.setCursor(0,0);
lcd.print("Temp:");
lcd.print(c);
lcd.setCursor(9,0);
lcd.print("Humedad:");
lcd.print(h);
lcd.print("%");
lcd.setCursor(0,1);
lcd.print("MIN-MAX");
lcd.setCursor(0,2);
lcd.print(tempmin);
lcd.setCursor(3,2);
lcd.print("<>");
lcd.setCursor(6,2);
lcd.print(tempmax);
lcd.setCursor(10,1);
lcd.print("MIN-MAX");
lcd.setCursor(10,2);
lcd.print(humeminima);
lcd.setCursor(13,2);
lcd.print("<>");
lcd.setCursor(16,2);
lcd.print(humedadmax);
lcd.setCursor(0,3);
lcd.print("LAMP(A) UV(B)");
/////delay(5000); TENGO DUDAS EN DELAYS
if(c>= tempmax){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Ventilador ON");
delay(1000);
digitalWrite(rele,HIGH);
}else{
digitalWrite(rele,LOW);
}
if(h<=humeminima){
lcd.clear();
lcd.setCursor(0,2);
lcd.print("Humedad ON");
delay(1000);
digitalWrite(rele2,HIGH);
}else{
digitalWrite(rele2,LOW);
}
if(c<=tempmin){
lcd.clear();
lcd.setCursor(0,2);
lcd.print("Foco ON");
delay(1000);
/////digitalWrite(rele2,HIGH); definir rele ::: DESACTIVADOS LOS RELES MIENTRAS CORRIGO MIS FALLAS
}else{
//// digitalWrite(rele2,LOW); definir rele
}
///////////////////// PRUEBAS PARA VER SI ENTRA EL TECLADO Y POR ENDE PODER ENCEDER UN RELE //////////////
TECLA5 = teclado.getKey();
Serial.print("Valor de Tecla5 = ");
Serial.println(TECLA5);
if (TECLA5 =='A')
{
Serial.println("entro a la a ");
}
else if (TECLA5 =='B')
{
Serial.println("entro a la b ");
}
delay(500);
}