Hola buenas, me he buscado un poc por ahi, pero parece ser que todos los ejemplos hablan de funciones
int, y bueno la cosa va a asi;
tengo esta subrutina;
boolean termostato(){
analogRead(sondaTempRefrigeracion);
tempVitrina= map(sondaTempRefrigeracion, 500, 4500, -40, 60); //revisar la hoja de datos de la sonda
if(tempVitrina => inicioRefrigeracion){
termostato = true;
lcd.print ("Compresor ON");
refrigeracionyventiladores(); }
else if(tempVitrina <= finalRefrigeracion){
termostato = false;
lcd.print ("Compresor OF");
soloventiladores(); }
Quiero lograr que la subritina lea una sonda de temperatura, mapee el valor de -40 a 60°C
que estaremos usando mas adelante.
En resumidas cuentas.... necesito saber como cambiar el estado de boolean termostato();
entre true y false
La ideas que tengo son;
1.- La subrutina evalua la temperatura actual de la vitrina y la comprara contra el limite inferior, si es mayor ... enciende la refrigeracion... esta evaluando la temperatura y una vez que alcanza el limite superior, empieza un delay (SIN DELAY) quiero que el cogido haga algo asi como;
Si tem == deseada
contar 5 segundos
entonces{ incia subrutina de paro de frio}
si temp => deseada
contar 5 segundos
entonces {inicia subrutina de frio}
La razon por la que no quiero usar delay, es por que voy a hacer mas funciones, y esto entorpeceria el programa.
Les dejo el pedacito de programa que llevo
ya que me ha señalado dos errores uno que esperaba un > antes de un pointer.
y otro que c++ prohibe comprar int contra boolean creo.
//LIBRERIAS
#include <LiquidCrystal.h>
//DECLARACION DE PINES
const byte sondaTempRefrigeracion = A0;
const byte sondaTempCongelacion = A1;
const byte solCompresor = 2;
const byte solEvaporador =3;
const byte compresor = 4;
const byte ventiladores = 5;
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);
//VARIABLES QUE PUEDEN SER ALTERADAS DURANTE EL PROGRAMA
int tempVitrina = 0;
int tempCongelador = 0;
int inicioRefrigeracion =0;
int finalRefrigeracion =0;
int temCongelador = 0;
//FLAGS
boolean Encendido = false;
void setup(){
//INICIALIZACION
digitalWrite(solCompresor, LOW);
digitalWrite(solEvaporador, LOW);
digitalWrite(compresor, LOW);
digitalWrite(ventiladores, LOW);
}
void loop(){
if (Encendido == true){
boolean termostato();
if(termostato == false){
soloventiladores();}
//else if(termostato == true){
refrigeracionyventiladores();}
else{
lcd.print( "Vitrina Apagada");
}
}
boolean termostato(){
analogRead(sondaTempRefrigeracion);
tempVitrina= map(sondaTempRefrigeracion, 500, 4500, -40, 60); //revisar la hoja de datos de la sonda
if(tempVitrina => inicioRefrigeracion){
termostato = true;
lcd.print ("Compresor ON");
refrigeracionyventiladores(); }
else if(tempVitrina <= finalRefrigeracion){
termostato = false;
lcd.print ("Compresor OF");
soloventiladores(); }
}
void refrigeracionyventiladores(){
digitalWrite(ventiladores, HIGH);
// delay(1500);
digitalWrite(compresor, HIGH);
}
void soloventiladores(){
digitalWrite(ventiladores, HIGH);
// delay(1500);
digitalWrite(compresor, LOW);
}
Gracias por sus comentarios.
-Alex-