Con esta función le aplico la histeresis o el retardo en actuar a un rele:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); // 0x27 es la direccion del LCD 16x2
int tolerancia = 5;
void setup()
{
lcd.init();
lcd.backlight(); //enciende la iluminacion
}
void loop()
{
lcd.clear();
lcd.setCursor(5, 0);
lcd.print ("Tol. ");
lcd.print (tolerancia);
entra (random(-10, 10) );
delay(2000);
}
void entra (int x)
{
if (((x >= 0) && ( x <= tolerancia)) || ((x <= 0) && ( x >= (tolerancia - (tolerancia * 2)))))
{
lcd.setCursor(0, 0);
lcd.print(x);
lcd.setCursor(0, 1);
lcd.print("Entra");
}
else
{
lcd.setCursor(0, 0);
lcd.print(x);
lcd.setCursor(0, 1);
lcd.print("No Entra");
}
}
Un saludo.
Creo que la función que postee anteriormente no funciona ni hace lo que tenia que hacer correctamente, sorry
la culpa la tienen demasiadas horas delante del ordenador.
Creo que ahora funciona bien y la solución era mucho mas sencilla:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); // 0x27 es la direccion del LCD 16x2
int tolerancia = 5;
void setup()
{
lcd.init();
lcd.backlight(); //enciende la iluminacion
}
void loop()
{
Histeresis (random(-10, 10), random(-10, 10), tolerancia );
delay(2000);
}
// x = Es un valor fijo, por ejemplo el que hemos programado o estipulado.
// y = Puede ser el valor obtenido por una sonda.
// t = La tolerancia o magen que hemos estipulado, la histeresis.
void Histeresis (int x, int y, int t)
{
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("X: ");
lcd.print(x);
lcd.print(" Y: ");
lcd.print(y);
lcd.setCursor(0, 0);
lcd.print("Tol: ");
lcd.print(t);
lcd.setCursor(6, 0);
int superior, inferior = 0;
superior = x + t; //valor fijo + tolerancia
inferior = x - t; //valor fijo + tolerancia
if ((y >= inferior) && (y <= superior))
{
lcd.print(" Si");
}
else
{
lcd.print(" No");
}
}
Un saludo.