Os pongo código, perdonar que esta poco depurado y hay muchas kakitas por ahi, tener en cuenta que estoy en pruebas. bueno no me deja es muy grande lo parto
//Librerias necesarias para el SERVO
//#include <Servo.h>
//Librerias necesarias Pantalla 20x4
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
uint8_t pellet[8] = {10,0x15,10,0,0x11,0x11,14,14};
uint8_t bujia[8] = {4,4,4,14,14,14,14,4};
LiquidCrystal_I2C lcd(0x27,20,4);
//Declaracion variables
// estas dos variables se usan para controlar el tiempo
unsigned long tiempoActual = 0;
const int segundo = 1000;
const int minuto = segundo*60;
const byte PULSADO = 0;
const byte ON = 1;
const byte OFF = 0;
const byte AUTO =2;
const byte BAJO = 150;
const byte MEDIO = 200;
const byte ALTO = 250;
const byte MENUSTATUS =0;
const byte MENUMOTOR=1;
const byte MENUBUJIA =2;
const byte MENUCICLO =3;
const byte MENUSIRV =4;
const byte MENUVENT =5;
const byte MaxMenus = 5;
// Variables de los dispositivos
byte tiempoCicloMotor = 20; // cada x segundos
byte tiempomotorencendido = 2; // enciende el motor x segundos
byte segundosmotor = 0; // tiempo transcurrido desde que se enciende el motor de pellet
int valorSensorLuz =0;
int tempInterior=0;
int tempAgua=0;
//byte veloVent = ALTO; // velocidad del ventilador
//---------------------------------------
// Definicion de dispositivos de salida
byte pinMotor=6; // pin que controla rele del motor de pellet.
byte pinBujia=7; // pin que enciende la bujia
byte pinVentilador=10; // pin para el ventilador (PWM)
//byte pinServo = 9; // para SERVO -- creo que tienen que ser el 9 o 10
byte ledArduino = 13;
//---------------------------------------
// Definicion de dispositivos de entrada DIGITALES
byte pulsadorMas = 5; // para incrementar valor
byte pulsadorMenos = 2; // para decrementar valor
byte pulsadorMenuAtras = 3; // se usa para cambiar por los menus
byte pulsadorMenu = 4; // se usa para cambiar por los menus
//---------------------------------------
//---------------------------------------
// Definicion de dispositivos de entrada ANALOGICOS
byte sensorLuz = A2; // para leer celula fotovoltaica
byte sensorTempInt = A5; // leer temperatura ambiente
byte sensorTempAgua = A0; // leer temperatura ambiente
// A5 y A4 o se si estaran jodidos
//---------------------------------------
// estados dispositivos
byte estadopulsadormas = OFF;
byte estadopulsadormenos = OFF;
byte estadopulsadormenu = OFF;
byte estadopulsadormenuatras = OFF;
byte estadoMotor = AUTO;
byte estadoBujia = OFF;
byte estadoVentilador = ALTO;
boolean hayLuz = false;
//---------------------------------------
// --estadoMenu--
// 0 trabajando.
// 1 Bujia encendida ON|OFF.
// 2 Segundos ciclo motor pellet.
// 3 Segundos motor encendido pellet.
// 4 Ventilador ON|OFF
// 5 Modo 20x3
// 6 Modo 30X3
// 7 Segundos ciclo motor ceniza. // no de momento
// 8 Segundos motor encendido ceniza. // no de momento
byte estadoMenu = 0;
//-------------------------------------
// variables para el SERVO
//Servo miServo;
//int angulo=60;
void setup() {
lcd.init(); // initialize the lcd
lcd.backlight();
// creamos caracter de pellet y bujia
lcd.createChar(0, pellet);
lcd.createChar(1,bujia);
lcd.home();
pinMode(pinMotor,OUTPUT);
pinMode(pinBujia,OUTPUT);
pinMode(ledArduino,OUTPUT);
pinMode(pulsadorMas, INPUT_PULLUP);
pinMode(pulsadorMenos, INPUT_PULLUP);
pinMode(pulsadorMenu, INPUT_PULLUP);
pinMode(pulsadorMenuAtras, INPUT_PULLUP);
// pinMode(sensorLuz,INPUT);
// pinMode(sensorTempInt,INPUT);
// pinMode(sensorTempAgua,INPUT);
// miServo.attach(pinServo);
//Iniciamos el fondo retroiluminado
lcd.backlight();
//Iniciamos la pantalla
lcd.init();
}
void loop() {
unsigned char comando=0;
if (millis() >= tiempoActual+segundo)
{
tiempoActual=millis();
if (estadoMotor==AUTO){
++segundosmotor;
}
compruebaSalidas();
botones();
pintainfo();
// analogWrite(pinVentExt, veloVentExt); //ventilador exterior
//miServo.write(angulo);
}
else
{
compruebaEntradas();
leesensores();
}
}
//----------------------------------------------
// comprueba si se ha pulsado algún boton
void compruebaEntradas() {
if (digitalRead(pulsadorMas)== PULSADO) {
estadopulsadormas = ON;
}
if (digitalRead(pulsadorMenos)== PULSADO) {
estadopulsadormenos = ON;
}
if (digitalRead(pulsadorMenu)== PULSADO) {
estadopulsadormenu = ON;
}
if (digitalRead(pulsadorMenuAtras)== PULSADO) {
estadopulsadormenuatras = ON;
}
}
//--------------------------------------------------
// activa las salidas oportunas
void compruebaSalidas (){
// --------------- MOTOR ----------------
if (estadoMotor==ON)
{
digitalWrite(pinMotor, HIGH);
digitalWrite(ledArduino, HIGH);
//angulo=60; //abrimos compuerta
segundosmotor = 0;
lcd.setCursor(19,3);//Saltamos a la 4 linea
lcd.write(0);//pintamos sirviendo
}
else if (estadoMotor==AUTO)
{
if (segundosmotor == tiempoCicloMotor)
{
digitalWrite(pinMotor, HIGH);
digitalWrite(ledArduino, HIGH);
//angulo=60; //abrimos compuerta
segundosmotor = 0;
lcd.setCursor(19,3);//Saltamos a la 4 linea
lcd.write(0);//pintamos sirviendo
}
else if (segundosmotor == tiempomotorencendido)
{
digitalWrite(pinMotor, LOW);
digitalWrite(ledArduino, LOW);
//angulo=170; //cerramos compuerta pero hay que esperar 1 o segundos
lcd.setCursor(19,3);//Saltamos a la 4 linea
lcd.print(" ");//Escribimos en la 4 linea
}
}
else if (estadoMotor==OFF)
{
digitalWrite(pinMotor, LOW);
segundosmotor = 0;
//angulo=170; //cerramos compuerta
lcd.setCursor(19,3);//Saltamos a la 4 linea
lcd.print(" ");//Escribimos en la 4 linea
}
// --------------- MOTOR ----------------
// --------------- BUJIA ----------------
if (estadoBujia==ON)
{
if (hayLuz)
{
digitalWrite(pinBujia,LOW);
lcd.setCursor(18,3);//Saltamos a la 4 linea
lcd.print(" ");//Escribimos en la 4 linea
}
else
{
digitalWrite(pinBujia,HIGH);
lcd.setCursor(18,3);//Saltamos a la 4 linea
lcd.write(1);//pintamos bujia
}
}
else
{
digitalWrite(pinBujia,LOW);
lcd.setCursor(18,3);//Saltamos a la 4 linea
lcd.print(" ");//Escribimos en la 4 linea
}
// --------------- BUJIA ----------------
// --------------- VENTILADOR ----------------
analogWrite(pinVentilador, estadoVentilador); // damos velocidad al ventilador
}