Aquí el código integro de mi programa
const int led = 13; // pin de salida led
float analog = A1; // pin de entrada termistor
float voltIn = A2;
const int mosfet1 = 11; // pin salida mosfet 1
const int mosfet2 = 12; // pin salida mosfet 2
const int boton1 = 8; // pin pulsador +
const int boton2 = 9; // pin pulsador -
const int boton3 = 10; // pin pulsador
int temperatura;
int tempConfig;
byte horquilla = 2; // valor para evitar la histeresis
float tempActual, tempMedia;
byte point, cont;
int boton1Estado, boton2Estado;
int boton1UltimoEstado, boton2UltimoEstado;
byte boton1ContPulsacion, boton2ContPulsacion;
int botonMas, botonMenos, estado;
int calaberaX;
//--------------------------
// datos para las ecuaciones
//--------------------------
float vIn; // 5.0 por defecto
float rFija = 1000; // resistencia divisora de tension
float r25 = 15000; // resistencia NTC a 25º
float beta = 3950; // beta NTC 3950 por defecto
float t0 = 293.15; // temperatura de refencia, 293.15 por defecto
float vOut = 0.0;
float rNtc = 0.0;
float tempK = 0.0;
float tempC = 0.0;
float voltios = 0.0;
float lectura;
//---------
//Funciones
//---------
void activado(); //Funcion Estado ACTIVADO de las salidas
void desactivado(); //Funcion Estado DESACTIVADO de las salidas
void inicio();
void pantalla();
#include <PCD8544.h>
#include <math.h>
#include <EEPROM.h>
static PCD8544 lcd;
byte addr=0;
byte valor= EEPROM.read(addr);
int referencia = valor; // temperatura de referencia
int tempProg = referencia;
// Grafico sonrisa
static const byte glyph[] =
{
B00010000, B00110100, B00110000, B00110100, B00010000 };
// Imagen Angela
static const byte angela_ancho = 84;
static const byte angela_alto = 48;
static const byte angela [] = {
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF9,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xBD,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,0xBC,0xBC,0xB8,0xB8,0x78,0x38,0x31,0x31,0x31,0x31,0x31,0x39,0x19,0x1D,0x1F,0x1D,0x0E,0x0C,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x0F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
};
// Imagen Calabera
static const byte calabera_ancho = 84;
static const byte calabera_alto = 48;
static const byte calabera [] = {
0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x06,0x06,0x07,0x07,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x03,0x03,0x07,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
//-----------------
//Funcion principal
//-----------------
void setup()
{
lcd.begin(84, 48);
pinMode (led, OUTPUT); // configura led como salida
pinMode (analog, INPUT); // configura termistor como entrada
pinMode (voltIn, INPUT);
pinMode (mosfet1, OUTPUT); // configura mosfet1 como salida
pinMode (mosfet2, OUTPUT); // configura mosfet2 como salida
digitalWrite (boton1, LOW);
digitalWrite (boton2, LOW);
digitalWrite (boton3, LOW);
//Pantalla Iniciando
lcd.setCursor(0,0);
lcd.createChar(0,glyph); // añade el grafico sonrisa a la posicion "0" de la tabla ASCII
lcd.drawBitmap(angela, angela_ancho, angela_alto );
delay(2 *1000);
lcd.print("Iniciando ");
delay(0.5 *1000);
for (point=0; point<4 ; point++)
{
lcd.print(".");
delay(0.4 *1000);
}
lcd.setCursor(20, 2);
lcd.print("Virtudes");
lcd.setCursor(17, 3);
lcd.print("Te Quiero");
delay(1 *1000);
digitalWrite (led, LOW);
digitalWrite (mosfet1, LOW);
digitalWrite (mosfet2, LOW);
lcd.setCursor(0, 5);
lcd.print("Mosfet ");
lcd.print("OFF --)");
delay(1 *1000);
lcd.clear();
delay(0.5 *1000);
lcd.setCursor(20, 3);
lcd.print("Midiendo");
lcd.setCursor(5, 5);
lcd.print("####>> ");
for (point=0; point<5 ; point++)
{
lcd.write(0); // escribe el grafico sonrisa
delay(0.5 *1000);
}
for (int addr = 0; addr < 512; addr++)
EEPROM.write(addr, valor);
}
//---------------
//Funcion Ciclica
//---------------
void loop(){
lcd.setCursor(0, 0);
lcd.print("Temp prog ");
lcd.print(tempProg);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("-----)*(-----");
botonMas = digitalRead(boton1);
botonMenos = digitalRead(boton2);
if ((botonMas) || (botonMenos)== HIGH){
tempConfig = HIGH;
calaberaX = LOW;}
else if ((botonMas) || (botonMenos)== LOW){
tempConfig = LOW;
calaberaX = LOW;}
if ((botonMas) && (botonMenos) == HIGH)
{
tempConfig = LOW;
calaberaX = HIGH;
}
switch (calaberaX){
case HIGH:
pantalla();
break;
case LOW:
break;}
//if (botonMas == HIGH)
//estado = 1;
//else if (estado = 0);
//if (botonMenos == HIGH)
//estado = 2;
//else if (estado = 0);
switch (tempConfig){
case LOW:
desactivado();
break;
case HIGH:
activado();
break;
}
delay (0.3 *1000);
}
void activado(){
lcd.clear();
switch (botonMas) {
case HIGH:
tempProg = (tempProg+1);
lcd.setCursor(0, 0);
lcd.print("Temp prog ");
lcd.print(tempProg);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("- + -)+(- + -");
lcd.setCursor(0, 3);
lcd.print("- + -)+(- + -");
valor = tempProg;
EEPROM.write(addr, valor);
delay(0.3 *1000);
break;
case LOW:
break;
}
switch (botonMenos){
case HIGH:
tempProg = (tempProg-1);
lcd.setCursor(0, 0);
lcd.print("Temp prog ");
lcd.print(tempProg);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("-(-)-)-(-(-)-");
lcd.setCursor(0, 3);
lcd.print("- - -)-(- - -");
valor = tempProg;
EEPROM.write(addr, valor);
delay(0.3 *1000);
break;
case LOW:
break;}
lcd.setCursor(0, 5);
lcd.print("Configurando");
}
void desactivado(){
for (cont=0; cont<5; cont++)
{
float lectura = (analogRead(voltIn));
voltios = (((lectura *5) / 1024) * 2);
vIn = voltios;
vOut=(vIn/1024)*(analogRead(analog));
rNtc=(vIn*rFija)/(vIn-vOut);
tempK = beta/(log(rNtc/r25)+(beta/t0));
tempC = tempK-273.15;
tempMedia = tempMedia+tempC;
delay (0.2 *1000);
}
tempMedia = tempMedia/(cont+1);
tempActual = tempMedia;
lcd.setCursor(0, 3);
lcd.print("Temp: ");
lcd.print(tempActual);
lcd.print(" C");
lcd.setCursor(6,4);
lcd.print("VIn: ");
lcd.print(voltios);
lcd.print(" V");
if (tempMedia > tempProg)
{
digitalWrite (led, LOW);
digitalWrite (mosfet1, LOW);
digitalWrite (mosfet2, LOW);
lcd.setCursor(0, 5);
lcd.print("Mosfet ");
lcd.print("X-X OFF");
lcd.setCursor(0,2);
lcd.print("XXX--XXX--XXX");
}
else if (tempMedia < (tempProg-horquilla))
{
digitalWrite (led, HIGH);
digitalWrite (mosfet1, HIGH);
digitalWrite (mosfet2, HIGH);
lcd.setCursor(0,2);
lcd.print(" ");
lcd.setCursor(0,2);
for (cont=0; cont<7; cont++)
{
lcd.write(0);
lcd.print(" ");
delay (0.2 *1000);
}
lcd.setCursor(0, 5);
lcd.print("Mosfet ");
lcd.write(0);
lcd.write(0);
lcd.write(0);
lcd.print(")");
lcd.print(" ON");
}
}
void pantalla(){
lcd.clear();
lcd.drawBitmap(calabera, calabera_ancho, calabera_alto );
delay(3 *1000);
lcd.clear();
}