Hola
He logrado complementar la lcd con el teclado, lo que no he podido realizar es que el tiempo y la temperatura ingresada utilizarla para encender o apagar la ampolleta o el motor.
Destacar que dependiendo la temperatura ambiente debo aumentar a una temperatura maxima en un lapso de tiempo, luego mantener constante la temperatura maxima durante un lapso de tiempo. Bajar la temperatura durante un lapso establecido y mantener la temperatura final durante un periodo constante.
#include <Keypad.h> //incluye libreria del teclado
#include <LiquidCrystal.h> //incluye libreria del lcd
const byte FILAS = 4; //define el teclado
const byte COLUMNAS = 4;
char keys[FILAS][COLUMNAS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte pinesFilas[FILAS] = {7,6,5,4};
byte pinesColumnas[COLUMNAS] = {3,2,1,0};
Keypad teclado = Keypad(makeKeymap(keys), pinesFilas, pinesColumnas, FILAS, COLUMNAS);
LiquidCrystal lcd(13,12,11,10,9,8); //define el lcd
const int sensorpin = A0; //define el sensor de temperatura
int Tinicial = 0; //define la temperatura ambiente
int Tmax = 0; //define la temperatura maxima a calentar
int Tfinal = 0; //define la temperatura final entre temperatura ambiente y temperatura maxima
int taumento = 0; //define el tiempo que demora en aumentar la temperatura de Tambiente a Tmax
int tcte1 = 0; //define el tiempo que mantiene la temperatura maxima
int tbajada = 0; //define el tiempo que demora en disminuir de temperatura maxima a temperatura final
int tcte2 = 0; //define el tiempo para mantener constante la temperatura final
int boton = 0; //registro del boton pulsado
int S = 0; //segundos transcurridos
int resistencia = A3; //Resistencia electrica de horno representada por una ampolleta
int ventilador = A2; //ventilador representador por un motor
void setup(){
pinMode(A2,LOW); //Mantiene apagado el motor y la ampolleta
pinMode(A3,LOW);
lcd.begin(16,2);
}
void loop(){
S=millis()/1000;
int valor = analogRead(sensorpin); //mide y muestra la temperatura ambiente
float voltaje = (valor / 1024.0)*5.0;
float temperatura = (voltaje - 0.5)*100;
lcd.setCursor(0,0);
lcd.print("T° ambiente");
lcd.setCursor(0,1);
lcd.print(temperatura);
lcd.setCursor(6,1);
lcd.print("°C");
lcd.setCursor(0,0);
delay(3000);
lcd.clear();
lcd.home();
Tinicial = temperatura; //guarda la temperatura ambiente
lcd.print("Ingrese T°max"); //solicita ingresar la temperatura maxima
lcd.setCursor(6,1);
lcd.print("°C");
lcd.setCursor(0,1);
while(boton != '#'){
boton = teclado.getKey();
if(boton != NO_KEY){
if((boton >= '0') && (boton <='9')){
valor=(valor+10) + boton-48;
lcd.print(boton-48);
Tmax = boton-48; //guarda la temperatura maxima
}
}
}
lcd.setCursor(0,0);
delay(3000);
lcd.clear();
lcd.home();
boton = 0;
lcd.print("Tiempo aumento"); //solicita ingresar el tiempo que demora en aumentar de temperatura ambiente a temperatura maxima
lcd.setCursor(6,1);
lcd.print("Minutos");
lcd.setCursor(0,1);
while(boton != '#'){
boton = teclado.getKey();
if(boton != NO_KEY){
if((boton >= '0') && (boton <='9')){
valor=(valor+10) + boton-48;
lcd.print(boton-48);
taumento = (boton-48); //guarda el tiempo
}
}
}
lcd.setCursor(0,0);
delay(3000);
lcd.clear();
lcd.home();
boton = 0;
lcd.print("Tiempo cte1"); //solicita ingresar el tiempo constante de temperatura maxima
lcd.setCursor(6,1);
lcd.print("Minutos");
lcd.setCursor(0,1);
while(boton != '#'){
boton = teclado.getKey();
if(boton != NO_KEY){
if((boton >= '0') && (boton <='9')){
valor=(valor+10) + boton-48;
lcd.print(boton-48);
tcte1 = boton-48; //guarda el tiempo
}
}
}
lcd.setCursor(0,0);
delay(3000);
lcd.clear();
lcd.home();
boton = 0;
lcd.print("Ingrese T°final"); //solicita ingresar la temperatura final entre temperatura ambiente y temperatura maxima
lcd.setCursor(6,1);
lcd.print("°C");
lcd.setCursor(0,1);
while(boton != '#'){
boton = teclado.getKey();
if(boton != NO_KEY){
if((boton >= '0') && (boton <='9')){
valor=(valor+10) + boton-48;
lcd.print(boton-48);
Tfinal = boton-48; //guarda la temperatura final
}
}
}
lcd.setCursor(0,0);
delay(3000);
lcd.clear();
lcd.home();
boton = 0;
lcd.print("Tiempo bajada"); //solicita ingresar el tiempo que demora en disminuir de temperatura maxima a temperatura final
lcd.setCursor(6,1);
lcd.print("Minutos");
lcd.setCursor(0,1);
while(boton != '#'){
boton = teclado.getKey();
if(boton != NO_KEY){
if((boton >= '0') && (boton <='9')){
valor=(valor+10) + boton-48;
lcd.print(boton-48);
tbajada = boton-48; //guarda el tiempo
}
}
}
lcd.setCursor(0,0);
delay(3000);
lcd.clear();
lcd.home();
boton = 0;
lcd.print("Tiempo cte2"); //solicita ingresar el tiempo constante de la temperatura final
lcd.setCursor(6,1);
lcd.print("Minutos");
lcd.setCursor(0,1);
while(boton != '#'){
boton = teclado.getKey();
if(boton != NO_KEY){
if((boton >= '0') && (boton <='9')){
valor=(valor+10) + boton-48;
lcd.print(boton-48);
lcd.setCursor(6,1);
lcd.print("Minutos");
tcte2 = boton-48; //guarda el tiempo
}
}
}
lcd.setCursor(0,0);
delay(3000);
lcd.clear();
lcd.home();
boton = 0;
if (S <= taumento){ //enciende la ampolleta durante el tiempo para aumentar la temperatura
digitalWrite(A3,HIGH);
digitalWrite(A2,LOW);
}
if (S <= tcte1){ //mantiene la temperatura maxima
digitalWrite(A3,LOW);
digitalWrite(A2,LOW);
}
if (S <= tbajada){ //enciende el ventilador durante el tiempo de disminuir la temperatura
digitalWrite(A3,LOW);
digitalWrite(A2,HIGH);
}
if (S <= tcte2) { //mantiene la temperatura final constante
digitalWrite(A3,LOW);
digitalWrite(A2,LOW);
}
}