[SOLUCIONADO] Problema de activacion/desactivación de rele

[SOLUCIONADO]
Hola
Tengo un proyecto de control de temperatura en un termo de agua que va a los radiadores, esta agua a su vez va calentada por una estufa. Utilizo Arduino UNO, sensores d temp NTC, reles, pulsadores para un pequeño MENU, display. Uno de mis problemas, pq en general funciona, pero presenta algunos defectos, es que cuando las temp alcanzan los setpoints fijados activan los reles, pero estos se m activan y desactivan cuando la temp esta ligeramente por encima de los setpoints, una especie de histeresis corrupta o como q los valores de a temp, variaran muy rapidamente hacia abajo, pero ya cuando alcanza 2 grados por encima del setpoint se mantiene bien activados y las bombas funcionando, kisiera eliminar este defecto, pues le tengo en la programac, q si es mayor o igual se activen, pero no funciona correctamente, saludos
PD: el codigo lo recorto para q se muestre

#include <math.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>


int menu = 0;  //VARIABLE PARA PODER DESPLAZARME POR EL MENÚ
int SP1 = 60;   //SETPOINT DE TEMP ESTABLECIDO POR DEFECTO EN EL TERMO, PARA QUE SE MANDE H2O A LOS RADIADORES
int SP2 = 55;   //SETPOINT DE TEMP ESTABLECIDO POR DEFECTO DEL H2O A LA SALIDA DE LA ESTUFA
int SP3 = 85;   //SETPOINT DE TEMP MAXIMA ESTABLECIDA POR DEFECTO EN EL TERMO
bool o_n = 0;   //  VARIABLE PARA ACTIVAR LAS BOMBA HACIA LOS RADIADORES SI SE DEMANDA Y SE CUMPLE EL SETPOINT ESTABLECIDO
bool o_n2 = 0;    //  VARIABLE PARA ACTIVAR LAS BOMBA HACIA LOS RADIADORES DE LA COMPARACION SI ES MAX LA TEMP DEL TERMO
LiquidCrystal_I2C LCD1(0x27,20,4);  //DECLARANDO UN OBJETO DEL TIPO DISPLAYç
unsigned long t;   //VARIABLE PARA TRABAJAR CON MILLIS EN EL ENCENDIDO DE LA LUZ DE FONDO DEL DISPLAY
unsigned long t1;   //VARIABLE PARA TRABAJAR CON MILLIS EN EL MOSTRADO DE DATOS

byte grados[8] = {
  0b00000111,
  0b00000101,
  0b00000111,
  0b00000000,
  0b00000000,
  0b00000000,
  0b00000000,
  0b00000000,
};

void setup() {
  // put your setup code here, to run once:
  pinMode(13, OUTPUT);  //DECLARANDO PIN 13 COMO SALIDA PARA LA ACT/DESACTIVACIÓN DE LA BOMBA HACIA TERMO
  pinMode(12, OUTPUT);  //DECLARANDO PIN 12 COMO SALIDA PARA LA ACT/DESACTIVACIÓN DE LA BOMBA HACIA RADIADORES PISO 1
  pinMode(11, OUTPUT);  //DECLARANDO PIN 11 COMO SALIDA PARA LA ACT/DESACTIVACIÓN DE LA BOMBA HACIA RADIADORES PISO 2
  pinMode(10, INPUT);   //DECLARANDO PIN 10 COMO ENTRADA DE ACT/DESACTIVACIÓN TERMOSTATO PISO 1
  pinMode(9, INPUT);    //DECLARANDO PIN 9 COMO ENTRADA DE ACT/DESACTIVACIÓN TERMOSTATO PISO 2
  pinMode(8, INPUT);    //DECLARANDO PIN 8 COMO ENTRADA DEL BOTON DE SELECCIONAR LOS SETPOINTS
  pinMode(7, INPUT);    //DECLARANDO PIN 7 COMO ENTRADA DEL BOTON QUE DISMINUYE EL SETPOINT
  pinMode(6, INPUT);    //DECLARANDO PIN 6 COMO ENTRADA DEL BOTON QUE AUMENTA EL SETPOINT

  t = millis();
  t1 = millis();

}

//FUNCIÓN QUE MIDE LA TEMPERATURA EN FUNCIÓN DE LOS PARÁMETROS DE CADA NTC---ECUACION Steinhart-Hart
double TermistorNTC(int RawADC) {  
double Temp;
Temp = log(((10240000/RawADC) - 9990));
Temp = 1 / (0.002343861912 + (0.00004746015750 + (0.0000007387844497 * Temp * Temp ))* Temp );   //PARÁMETROS CALCULADOS  https://www.thinksrs.com/downloads/programs/Therm%20Calc/NTCCalibrator/NTCcalculator.htm
Temp = Temp - 273.15;// Convierte de Kelvin a Celsius
return Temp;
} 

//FUNCIÓN QUE MIDE LA TEMPERATURA EN FUNCIÓN DE LOS PARÁMETROS DE CADA NTC---ECUACION Steinhart-Hart
double TermistorNTC1(int RawADC) {  
double Temp1;
Temp1 = log(((10240000/RawADC) - 9990));
Temp1 = 1 / (0.002036039101 + (0.00009106506794 + (0.0000006157252906 * Temp1 * Temp1 ))* Temp1 );   //PARÁMETROS CALCULADOS  https://www.thinksrs.com/downloads/programs/Therm%20Calc/NTCCalibrator/NTCcalculator.htm
Temp1 = Temp1 - 273.15;// Convierte de Kelvin a Celsius
return Temp1;
}

//FUNCIÓN QUE MIDE LA TEMPERATURA EN FUNCIÓN DE LOS PARÁMETROS DE CADA NTC---ECUACION Steinhart-Hart
double TermistorNTC2(int RawADC) {  
double Temp2;
Temp2 = log(((10240000/RawADC) - 9990));
Temp2 = 1 / (0.002064939141 + (0.00008349295632 + (0.0000006655146377 * Temp2 * Temp2 ))* Temp2 );   //PARÁMETROS CALCULADOS  https://www.thinksrs.com/downloads/programs/Therm%20Calc/NTCCalibrator/NTCcalculator.htm
Temp2 = Temp2 - 273.15;// Convierte de Kelvin a Celsius 
return Temp2;
}



void loop() {
  // put your main code here, to run repeatedly:

  int A0;   // LECTURA DE LA ENTRADA ANALOG 1 CORRESPONDIENTE A LA TEMPERATURA 1 DEL TERMO
  int A1;   // LECTURA DE LA ENTRADA ANALOG 2 CORRESPONDIENTE A LA TEMPERATURA 2 DEL H2O DE LA ESTUFA
  int A2;   // LECTURA DE LA ENTRADA ANALOG 3 CORRESPONDIENTE A LA MAXIMA TEMPERATURA DEL TERMO
  
  double T1;   // VARIABLE PROCESADA Q CONTIENE LA TEMPERATURA 1 DEL TERMO
  double T2;   // VARIABLE PROCESADA Q CONTIENE LA TEMPERATURA 2 DEL H2O DE LA ESTUFA
  double T3;   // VARIABLE PROCESADA Q CONTIENE LA TEMPERATURA 3 MAXIMA DEL TERMO

  bool PISO_1 = 0;   //VARIABLE QUE ALMACENA LA ACTIVACIÓN DEL TERMOSTATO DEL PISO 1
  bool PISO_2 = 0;   //VARIABLE QUE ALMACENA LA ACTIVACIÓN DEL TERMOSTATO DEL PISO 2 
  
  A0 = analogRead(0);  // LEYENDO EL VALOR DE LA T1 POR LA ENTRADA DIGITAL 0 Y PONIENDOLO EN LA VARIABLE TEMPORAL A0
  A1 = analogRead(1);  // LEYENDO EL VALOR DE LA T2 POR LA ENTRADA DIGITAL 1 Y PONIENDOLO EN LA VARIABLE TEMPORAL A1
  A2 = analogRead(2);  // LEYENDO EL VALOR DE LA T3 POR LA ENTRADA DIGITAL 2 Y PONIENDOLO EN LA VARIABLE TEMPORAL A3

  T1 = TermistorNTC(A0); //LLAMANDO A LA FUNCION QUE CONVIERTE A TEMPERATURA EL VOLTAJE DE LA ENTRADA EN CUESTIÓN
  T2 = TermistorNTC(A1); //LLAMANDO A LA FUNCION QUE CONVIERTE A TEMPERATURA EL VOLTAJE DE LA ENTRADA EN CUESTIÓN
  T3 = TermistorNTC(A2); //LLAMANDO A LA FUNCION QUE CONVIERTE A TEMPERATURA EL VOLTAJE DE LA ENTRADA EN CUESTIÓN

  int entrarmenu = 1;  //VARIABLE PARA PODER SALIR DE LA CONFIGURACION DE SETPOINTS  
  bool L = 0;          //VARIABLE PARA PODER ILUMINAR EL DISPLAY
  
  if ((digitalRead(8) == 0) || (digitalRead(7) == 0) || (digitalRead(6) == 0))
  {
      L = 1;
  }
   
  PISO_1 = digitalRead(10);
  PISO_2 = digitalRead(9);


  if (o_n == 1 || o_n2 == 1)
  {
      digitalWrite(12, HIGH);   
  }
  else 
  {
      digitalWrite(12, LOW);
  }
    //ENCUESTANDO SI SE ACTIVA LA SEÑAL DEL TERMOSTATO DEL PISO 1 Y SI LA TEMP DEL TERMO CUMPLE PARA PODER HACER PASAR EL H2O HACIA LOS RADIADORES
  if (PISO_1 == HIGH && T1 >= SP1 ){
    o_n = 1;
    //digitalWrite(12, HIGH);   //ACTIVANDO LA BOMBA DE SUMINISTRO DE AGUA A 60C HACIA LOS RADIADORES
  } else {
        o_n = 0;  
    //digitalWrite(12, LOW);
          }

    //ENCUESTANDO SI SE ACTIVA LA SEÑAL DEL TERMOSTATO DEL PISO 2 Y SI LA TEMP DEL TERMO CUMPLE PARA PODER HACER PASAR EL H2O HACIA LOS RADIADORES
  //if (PISO_2 == HIGH && SP1 >= 35 ){
    //digitalWrite(11, HIGH);   //ACTIVANDO LA BOMBA DE SUMINISTRO DE AGUA A 60C HACIA LOS RADIADORES
  //}
  //else {
    //digitalWrite(11, LOW);
  //}

  //COMPRABANDO Q LA TEMPERATURA DEL AGUA DEL TERMO NO SE CALIENTE DEMASIADO
  if (T3 >= SP3)
  {
    //if (PISO_1 == HIGH || PISO_2 == HIGH)   //COMPROBANDO SI ALGUNO DE LOS TERMOSTATOS DE LOS PISOS ESTÁN ACTIVOS
    //{
      //if (PISO_1 == HIGH)   //COMPRUEBA CUAL PISO TIENE MENOR TEMPERATURA QUE EL SETPOINT FIJADO
      //{
        o_n2 = 1;
        //digitalWrite(12, HIGH);
      //}// else {digitalWrite(11, HIGH);}   
    //}else {
        //digitalWrite(12, HIGH);
        //digitalWrite(11, HIGH);
        //}
  }
  else
  {
      o_n2 = 0;
  }
        
  //COMPROBANDO SI LA TEMPERATURA DEL AGUA DE LA ESTUFA ES SUFICIENTE PARA HACERLA CIRCULAR HACIA EL TERMO
  if (T2 >= SP2)
  {
      digitalWrite(13, HIGH);   //ACTIVANDO LA BOMBA DE SUMINISTRO DE AGUA HACIA EL TERMO    
  } 
  else 
  {
      digitalWrite(13, LOW);
  }
  
     
  
}

Primero un consejo, crea constantes asociadas a los pines de salida, se complica leer el código teniendo que ir a cada rato a ver en setup() a que corresponde el pin estas poniendo en HIGH/LOW.

Por otro lado, lo de la histéresis deberías definirlo tu al hacer la comparación.
Por ej.

if (PISO_1 == HIGH && T1 >= SP1 ){
  o_n = 1;
} 
else if(PISO_1 == HIGH && T1 < SP1 * 0.9 ) { // 90% de SP1
   o_n = 0;  
}

Así activa a partir de SP1 pero desactiva por debajo del 90% de SP1
Por ej., activa a partir de 30° y desactiva por debajo de 27°
Yo fije un 90% multiplicando por 0.9 pero fácilmente puedes llevarlo a 95% multiplicando por 0.95 o 93% con 0.93

Otra posibilidad es fijar una temperatura menor restando cierta cantidad de grados, por ej.

if (PISO_1 == HIGH && T1 >= SP1 ){
  o_n = 1;
} 
else if(PISO_1 == HIGH && T1 < SP1 - 2 ) { 
   o_n = 0;  
}

Así desactiva 2° por debajo de SP1.
Volviendo al ej. anterior, activa a partir de 30° y desactiva por debajo de 28°.

Saludos

Gracias por la ayuda, pero hoy comprobé de nuevo, y lo q me sucede, es q cuando por ejemplo pongo el setpoint de cualq temperatura en 66, cuando el valor de la temp está por encima de 66 ligeramente, se activa y desactiva el relé, muy seguido, no se estabiliza hasta q supere los 66 en varios puntos, 66,30 por ejemplo, revisaré el código de nuevo, pero no encuentro dond se desactiva, o sea q es lo q sucede, saludos

Aunque la intención fue buena se te escapó gatul que los SPX los define como enteros entonces
hay que definir SP1,2 y 3 como float para tambien hacer comparaciones como corresponde.
No se puede comparar un int con un float.

if (T1 >= SP1)

T1 es float y SP1 es int.

He corregido el código muy sutilmente con las sugerencias de gatul mas las mías.
Recuerda no usar mayúsculas en los comentarios. No es apropiado.

#include <math.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#define bombaTermo  13   // DECLARANDO PIN 13 COMO SALIDA PARA LA ACT/DESACTIVACIÓN DE LA BOMBA HACIA TERMO
#define bombaRadP1  12   // DECLARANDO PIN 12 COMO SALIDA PARA LA ACT/DESACTIVACIÓN DE LA BOMBA HACIA RADIADORES PISO 1
#define bombaRadP2  11   // DECLARANDO PIN 11 COMO SALIDA PARA LA ACT/DESACTIVACIÓN DE LA BOMBA HACIA RADIADORES PISO 2
#define TermoP1     10   // DECLARANDO PIN 10 COMO ENTRADA DE ACT/DESACTIVACIÓN TERMOSTATO PISO 1
#define TermoP2      9   // DECLARANDO PIN  9 COMO ENTRADA DE ACT/DESACTIVACIÓN TERMOSTATO PISO 2
#define botonSP      8   // DECLARANDO PIN 8 COMO ENTRADA DEL BOTON DE SELECCIONAR LOS SETPOINTS
#define botonSPMenos 7   // DECLARANDO PIN 7 COMO ENTRADA DEL BOTON QUE DISMINUYE EL SETPOINT
#define botonSPMas   6   // DECLARANDO PIN 6 COMO ENTRADA DEL BOTON QUE AUMENTA EL SETPOINT


// DECLARANDO PIN 6 COMO ENTRADA DEL BOTON QUE AUMENTA EL SETPOINT
int menu = 0;           // VARIABLE PARA PODER DESPLAZARME POR EL MENÚ
float SP1 = 60.0;       // SETPOINT DE TEMP ESTABLECIDO POR DEFECTO EN EL TERMO, PARA QUE SE MANDE H2O A LOS RADIADORES
float SP2 = 55.0;       // SETPOINT DE TEMP ESTABLECIDO POR DEFECTO DEL H2O A LA SALIDA DE LA ESTUFA
float SP3 = 85.0;       // SETPOINT DE TEMP MAXIMA ESTABLECIDA POR DEFECTO EN EL TERMO
bool o_n = 0;           // VARIABLE PARA ACTIVAR LAS BOMBA HACIA LOS RADIADORES SI SE DEMANDA Y SE CUMPLE EL SETPOINT ESTABLECIDO
bool o_n2 = 0;          // VARIABLE PARA ACTIVAR LAS BOMBA HACIA LOS RADIADORES DE LA COMPARACION SI ES MAX LA TEMP DEL TERMO

LiquidCrystal_I2C LCD1(0x27,20,4);  //DECLARANDO UN OBJETO DEL TIPO DISPLAY
unsigned long t;        // VARIABLE PARA TRABAJAR CON MILLIS EN EL ENCENDIDO DE LA LUZ DE FONDO DEL DISPLAY
unsigned long t1;       // VARIABLE PARA TRABAJAR CON MILLIS EN EL MOSTRADO DE DATOS

byte grados[8] = {
  0b00000111,
  0b00000101,
  0b00000111,
  0b00000000,
  0b00000000,
  0b00000000,
  0b00000000,
  0b00000000,
};

void setup() {
  // put your setup code here, to run once:
  pinMode(bombaTermo, OUTPUT);  
  pinMode(bombaRadP1, OUTPUT);  
  pinMode(bombaRadP2, OUTPUT);  
  pinMode(TermoP1, INPUT);   
  pinMode(TermoP2, INPUT);    
  pinMode(botonSP, INPUT);    
  pinMode(botonSPMenos, INPUT);    
  pinMode(botonSPMas, INPUT);    
  
  t = millis();
  t1 = millis();
}
  
//FUNCIÓN QUE MIDE LA TEMPERATURA EN FUNCIÓN DE LOS PARÁMETROS DE CADA NTC---ECUACION Steinhart-Hart
float TermistorNTC(int RawADC) { 
  double Temp;
  Temp = log(((10240000/RawADC) - 9990));
  Temp = 1 / (0.002343861912 + (0.00004746015750 + (0.0000007387844497 * Temp * Temp ))* Temp );   //PARÁMETROS CALCULADOS  https://www.thinksrs.com/downloads/programs/Therm%20Calc/NTCCalibrator/NTCcalculator.htm
  Temp = Temp - 273.15;// Convierte de Kelvin a Celsius
  
  return (float) Temp;
}

//FUNCIÓN QUE MIDE LA TEMPERATURA EN FUNCIÓN DE LOS PARÁMETROS DE CADA NTC---ECUACION Steinhart-Hart
float TermistorNTC1(int RawADC) { 
  double Temp1;
  float tmp;
  Temp1 = log(((10240000/RawADC) - 9990));
  Temp1 = 1 / (0.002036039101 + (0.00009106506794 + (0.0000006157252906 * Temp1 * Temp1 ))* Temp1 );   //PARÁMETROS CALCULADOS  https://www.thinksrs.com/downloads/programs/Therm%20Calc/NTCCalibrator/NTCcalculator.htm
  Temp1 = Temp1 - 273.15;// Convierte de Kelvin a Celsius
    return (float) Temp1;
}

//FUNCIÓN QUE MIDE LA TEMPERATURA EN FUNCIÓN DE LOS PARÁMETROS DE CADA NTC---ECUACION Steinhart-Hart
float TermistorNTC2(int RawADC) { 
  double Temp2;
  float tmp;
  Temp2 = log(((10240000/RawADC) - 9990));
  Temp2 = 1 / (0.002064939141 + (0.00008349295632 + (0.0000006655146377 * Temp2 * Temp2 ))* Temp2 );   //PARÁMETROS CALCULADOS  https://www.thinksrs.com/downloads/programs/Therm%20Calc/NTCCalibrator/NTCcalculator.htm
  Temp2 = Temp2 - 273.15;// Convierte de Kelvin a Celsius
    return (float) Temp2;
}

void loop() {
  // put your main code here, to run repeatedly:

  int A0;   // LECTURA DE LA ENTRADA ANALOG 1 CORRESPONDIENTE A LA TEMPERATURA 1 DEL TERMO
  int A1;   // LECTURA DE LA ENTRADA ANALOG 2 CORRESPONDIENTE A LA TEMPERATURA 2 DEL H2O DE LA ESTUFA
  int A2;   // LECTURA DE LA ENTRADA ANALOG 3 CORRESPONDIENTE A LA MAXIMA TEMPERATURA DEL TERMO
 
  float T1;   // VARIABLE PROCESADA Q CONTIENE LA TEMPERATURA 1 DEL TERMO
  float T2;   // VARIABLE PROCESADA Q CONTIENE LA TEMPERATURA 2 DEL H2O DE LA ESTUFA
  float T3;   // VARIABLE PROCESADA Q CONTIENE LA TEMPERATURA 3 MAXIMA DEL TERMO

  bool PISO_1 = 0;   //VARIABLE QUE ALMACENA LA ACTIVACIÓN DEL TERMOSTATO DEL PISO 1
  bool PISO_2 = 0;   //VARIABLE QUE ALMACENA LA ACTIVACIÓN DEL TERMOSTATO DEL PISO 2
 
  A0 = analogRead(0);  // LEYENDO EL VALOR DE LA T1 POR LA ENTRADA DIGITAL 0 Y PONIENDOLO EN LA VARIABLE TEMPORAL A0
  A1 = analogRead(1);  // LEYENDO EL VALOR DE LA T2 POR LA ENTRADA DIGITAL 1 Y PONIENDOLO EN LA VARIABLE TEMPORAL A1
  A2 = analogRead(2);  // LEYENDO EL VALOR DE LA T3 POR LA ENTRADA DIGITAL 2 Y PONIENDOLO EN LA VARIABLE TEMPORAL A3

  T1 = TermistorNTC(A0); //LLAMANDO A LA FUNCION QUE CONVIERTE A TEMPERATURA EL VOLTAJE DE LA ENTRADA EN CUESTIÓN
  T2 = TermistorNTC(A1); //LLAMANDO A LA FUNCION QUE CONVIERTE A TEMPERATURA EL VOLTAJE DE LA ENTRADA EN CUESTIÓN
  T3 = TermistorNTC(A2); //LLAMANDO A LA FUNCION QUE CONVIERTE A TEMPERATURA EL VOLTAJE DE LA ENTRADA EN CUESTIÓN

  int entrarmenu = 1;  //VARIABLE PARA PODER SALIR DE LA CONFIGURACION DE SETPOINTS 
  bool L = 0;          //VARIABLE PARA PODER ILUMINAR EL DISPLAY
 
  if ((digitalRead(botonSP) == 0) || (digitalRead(botonSPMenos) == 0) || (digitalRead(botonSPMas) == 0))  {
      L = 1;
  }
   
  PISO_1 = digitalRead(TermoP1);
  PISO_2 = digitalRead(TermoP2);

  if (o_n == 1 || o_n2 == 1)   {
      digitalWrite(bombaRadP1, HIGH);   
  }
  else   {
      digitalWrite(bombaRadP1, LOW);
  }
  
  //ENCUESTANDO SI SE ACTIVA LA SEÑAL DEL TERMOSTATO DEL PISO 1 Y SI LA TEMP DEL TERMO CUMPLE PARA PODER HACER PASAR EL H2O HACIA LOS RADIADORES
  if (PISO_1) {
      if (T1 >= SP1 )
          o_n = 1;
      if (T1 < SP1 * 0.9 ) // 90% de SP1
          o_n = 0;  

  }
  
  //COMPRABANDO Q LA TEMPERATURA DEL AGUA DEL TERMO NO SE CALIENTE DEMASIADO
  if (T3 >= SP3)  {
      o_n2 = 1;
  }
  else   {
      o_n2 = 0;
  }
       
  //COMPROBANDO SI LA TEMPERATURA DEL AGUA DE LA ESTUFA ES SUFICIENTE PARA HACERLA CIRCULAR HACIA EL TERMO
  if (T2 >= SP2)  {
      digitalWrite(bombaTermo, HIGH);   //ACTIVANDO LA BOMBA DE SUMINISTRO DE AGUA HACIA EL TERMO   
  }
  else  {
      digitalWrite(bombaTermo, LOW);
  }
}

Chanfles!
Suerte que @surbyte vio el error.

Al margen, te iba a sugerir que probaras la librería threshold (acá algo de Luis Llamas al respecto)

Saludos

No se si ese es el error? Yo vi eso que antes se me pasaba por alto.
Se debe ser muy cuidadoso en las comparaciones, comparar naranjas con manzanas siempre da resultados desafortunados. Para evitarlo hay que ser prolijo al programar.
Una manera de serlo cuando se comienza es ponerle una letra a las variables que indiquen el tipo de variable utilizada.
Veamos un ejemplo llamo dato definido como entero int, flotante float, o doulble flotante de doble precisión.

int idato;
float fdato;
double ddato;

de ese modo SP1 hubiera sido
iSP1
y al encontrarse con fT1 le hubiera llamado la atención.

if (fT1 >= iSP1)

es una manera de trabajar que he observado en algunos programadores y realmente es muy útil cuando el programa es grande o cuando se esta comenzando.

¿Sabés que hice la prueba de comparar un float con un int e inesperadamente funciona correctamente?

Hice la típica de imprimir si una variable es mayor, menor o igual que la otra, y sin importar el orden en que ponga las variables respecto al operador, el resultado es correcto.

Me sorprendió, esperaba que el orden tipificara la comparación pero resultó que no.

PD: lo de poner un prefijo que identifique el tipo de variable viene de la guía de estilo de VB. :wink:

Muchas gracias, por la ayuda implementé todo lo que m recomendaron y en los primeros ensayos me funcionó bien, tengo q montarlo y seguir probandolo a tope, decirle q solo arreglando lo del tipo de datos no me solucionó el problema tuve q incluirle la histéresis también, les diré desp d más pruebas si soluciono completamente el problema.

PD: Me pueden ayudar con el tema del LCD 2004 en el mismo proyecto
el topics es:
Problema con Display LCD 2004 y controlador I2C, caracteres extraños

En el código que estamos viendo no hay referencia al LCD.
Cúal es el problema?

Lo explica en el tema Problema con Display LCD 2004 y controlador I2C, caracteres extraños al tiempo.

Moderador;
Okay pero no podemos discutir el mismo tema en dos hilos.
Da por solucionado este hilo colocando [SOLUCIONADO] en el post ininicial y seguimos en el otro o tendré que cerrarlo yo por doble posteo.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.