Hola querida comunidad... hacía mucho que no posteaba...
Por cuestiones de trabajo grupal empece a estudiar un poco arduino (siempre estuve con los pic).
Compre para hacer un proyecto de control de temperaturas de un aire acondicionado de mi casa una placa ARDUINO UNO, al cual le incluí una placa de 4 relay y un lcd de 16x2 y una placa I2C para adaptarle al LCD.
La cuestión es la siguiente:
Antes de adaptarle el I2C al LCD, mi código dentro de todo iba bastante fluido, pero al cargarle la librería del adaptador I2C, el timer me hace colgar el sistema y no se que pasa, ya probe con timer 1 y timer 2 de la placa y sigue tildado...
#include <MsTimer2.h>
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h> // F Malpartida's NewLiquidCrystal library
#include <Thermistor.h>
//PINES DEL LCD//////////////////////////////////////////////////////////////////////
#define I2C_ADDR 0x27
#define BACKLIGHT_PIN 3
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);
////////////////////////////////////////////////////////////////////////////////////
Thermistor temp(0);
//RELAY'S/////////////////////////////////////////////////////////////
#define compresor 12 //Pin del Compresor
#define velocidadBaja 11
#define velocidadMedia 10
#define velocidadAlta 9
#define valvulaInv 8
//////////////////////////////////////////////////////////////////////
//BOTONES/////////////////////////////////////////////////////////////
#define suboTemp 5 //Pin Boton Subir Temperatura
#define bajoTemp 4 //Pin Boton Bajar Temperatura
#define botonVelocidadForz 3
//////////////////////////////////////////////////////////////////////
int temperaturaSET = 24; //Temperatura Seteada
int banderaArrancarComp = 0; //Bandera que habilita encender el compresor
int tempAmbiente = 0; //Variable que almacena la temperatura
int banderaArrancarForz = 0; //Bandera que habilita encender el forzador
int encTime = 0; //Bandera que indica si el timer del forzador esta encendido
int cuenta = 0; //Variable que cuenta las cantidades de veces que el timer cuenta
int velocidadForzador = 2;
int ACTIVADOTIMER = 0;
#define LED_OFF 0
#define LED_ON 1
void setup()
{
lcd.begin(16,2); //Se configura el tipo del lcd a 16x2
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
lcd.setCursor(0,0); //Se posiciona el cursor
lcd.print("IDEC Temp: "); //Se escibe en la primer línea
lcd.setBacklight(1);
pinMode(compresor, OUTPUT); //Se configura el pin Compresor como salida
pinMode(velocidadBaja, OUTPUT); //Se configura el pin Forzador como salida
pinMode(velocidadMedia, OUTPUT);
pinMode(velocidadAlta, OUTPUT);
pinMode(valvulaInv, OUTPUT);
pinMode(suboTemp, INPUT); //Se configura el pin de subir temperatura como entrada
pinMode(bajoTemp, INPUT); //Se configura el pin de bajar temperatura como entrada
pinMode(botonVelocidadForz, INPUT); //Se Configura el pin de Velocidad del forzador como entrada
encTime = 0;
MsTimer2::set(5000, flash);
MsTimer2::start();
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void loop()
{
if (encTime == 1)
{
lcd.setCursor(12, 0);
tempAmbiente = temp.getTemp();
lcd.print(tempAmbiente);
lcd.setCursor(0,1);
lcd.print("Set: ");
lcd.setCursor(6,1);
lcd.print(temperaturaSET);
}
if (encTime == 0)
{
lcd.setCursor(12, 0);
tempAmbiente = temp.getTemp();
lcd.print(tempAmbiente);
lcd.setCursor(0,1);
lcd.print("Set: ");
lcd.setCursor(6,1);
lcd.print(temperaturaSET);
}
//C O N S U L T A M O S S I L A T E M P A M B I E N T E E S M A Y O R A L A S E T E A D A/////////////////////////////////////////
if (tempAmbiente > (temperaturaSET + 1)) //Consultamos si la temperatura ambiente es mayor a dos grados por sobre la temperatura seteada
{
if (encTime == 0)
{ //Consulta si el timer del compresor ya fue encendido (en caso de no ser así)
encTime = 1;
}
}
//S I P R E S I O N A M O S U N B O T O N///////////////////////////////////////////////////////////////////////////////
if (digitalRead(suboTemp) == 0) //Si el boton de subir de temperatura se preciona
{
temperaturaSET = temperaturaSET + 1; //Temperatura seteada la aumentamos un grado
delay(1000); //Delay de 1 seg para evitar repeticiones
}
if (digitalRead(bajoTemp) == 0) //Si el boton de bajar de temperatura se preciona
{
temperaturaSET = temperaturaSET - 1; //Temperatura seteada lo disminuimos en grado
delay(1000); //Delay de 1 seg para evitar repeticiones
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//SUB RUTINAS
//S I P R E S I O N A M O S C A M B I O D E M A R C H A///////////////////////////////////////////////////////
void cambiomarcha(void)
{
velocidadForzador = velocidadForzador + 1;
if (velocidadForzador == 3)
{
velocidadForzador = 0;
}
switch(velocidadForzador)
{
case 0:
digitalWrite(velocidadAlta, LOW);
delay(50);
digitalWrite(velocidadBaja, HIGH);
break;
case 1:
digitalWrite(velocidadBaja, LOW);
delay(50);
digitalWrite(velocidadMedia, HIGH);
break;
case 2:
digitalWrite(velocidadMedia, LOW);
delay(50);
digitalWrite(velocidadAlta, HIGH);
break;
}
}
///////////////////////////////////////R U T I N A D E L T I M E R////////////////////////////////////////////////////////////
void flash(void)
{
cuenta = cuenta + 1; //Variable que cuenta las veces que entra en la rutina para saber cuanto tiempo estamos esperando
if (cuenta == 4) //Si entramos 4 veces en la rutina...
{
banderaArrancarComp = 1; //Habilitamos el encendido del compresor
encTime = 1; //Indica que el timer ha entrado en los 4 minutos
cuenta = 0;
digitalWrite(compresor, HIGH); //Ponemos el pin del compresor en estado bajo
banderaArrancarComp = 0; //desactivamos la banndera del compresor
lcd.setCursor(9,1); //Posicionamos el cursor
lcd.print("COM"); //Imprimimos en pantalla //cuenta lo igualamos a 0
}
if (cuenta ==2) //Si entramos 2 veces en la rutina...
{
lcd.setCursor(0,1);
cambiomarcha();
banderaArrancarForz = 1; //Habilitamos el encendido del forzador
encTime = 1; //Indica que el timer ha entrado en los 2 minutos
lcd.setCursor(13,1); //Posicionamos el cursor
lcd.print("FOR");
}
}
aquí esta el código... alguna sugerencia??
Saludos.-