#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
LiquidCrystal_I2C lcd(0x27,16,2);
//---------------- LCD -----------------
//-------------- LM35 ------------------
const int lm35=A0;
//----------- Salidas ------------------
const int ventilador=10;
const int foco=11;
//------------ Keypad ------------------
const byte FILAS=4;
const byte COLUMNAS=4;
char teclas[FILAS][COLUMNAS]={
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte filasPins[FILAS]={9,8,7,6};
byte columnasPins[COLUMNAS]={5,4,3,2};
Keypad teclado=Keypad(makeKeymap(teclas),filasPins,columnasPins,FILAS,COLUMNAS);
//--------------------------------------
String buffer="";
float temperatura=0;
int setPoint=0;
bool editando=false;
//--------------------------------------
void setup(){
pinMode(ventilador,OUTPUT);
pinMode(foco,OUTPUT);
digitalWrite(ventilador,LOW);
digitalWrite(foco,LOW);
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(5,0);
lcd.print("HELLO");
delay(2000);
lcd.clear();
}
//--------------------------------------
void loop(){
leerTemperatura();
char tecla=teclado.getKey();
if(tecla){
// comienza edición
if(!editando){
editando=true;
buffer="";
lcd.clear();
}
if(tecla>='0' && tecla<='9'){
if(buffer.length()<2){
buffer+=tecla;
}
}
else if(tecla=='#'){
if(buffer.length()>0){
buffer.remove(buffer.length()-1);
}
}
else if(tecla=='*'){
if(buffer.length()>0){
setPoint=buffer.toInt();
}
editando=false;
lcd.clear();
}
}
//------------- Mostrar ----------------
if(editando){
lcd.setCursor(0,0);
lcd.print("Ingrese SET");
lcd.setCursor(0,1);
lcd.print(buffer);
}
else{
lcd.setCursor(0,0);
lcd.print("LM35:");
lcd.setCursor(6,0);
lcd.print(temperatura,1);
lcd.print((char)223);
lcd.print("C ");
lcd.setCursor(0,1);
lcd.print("SET:");
lcd.setCursor(5,1);
lcd.print(setPoint);
lcd.print((char)223);
lcd.print("C ");
}
//---------- Control -------------------
if(!editando){
if(temperatura>setPoint){
digitalWrite(ventilador,HIGH);
digitalWrite(foco,LOW);
}
else if(temperatura<setPoint){
digitalWrite(ventilador,LOW);
digitalWrite(foco,HIGH);
}
else{
digitalWrite(ventilador,LOW);
digitalWrite(foco,LOW);
}
}
delay(150);
}
//--------------------------------------
void leerTemperatura(){
int lectura=analogRead(lm35);
float voltaje=lectura*5.0/1023.0;
temperatura=voltaje*100.0;
}