Buenas tarde, tengo una duda sobre como registrar el dato mínimo y máximo que se obtiene de un sensor.
Por ejemplo si en 10 lecturas el menor es 6 y el mayor es 20 que se registre ese hasta que se detecte uno menor.
Gracias de antemano por la atención.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcdA(0x27,20,4); // LCD 0x27
LiquidCrystal_I2C lcdB(0x26,16,2); // LCD 0x27
int tempC ;
int pin = A0;
int SHMin = tempC ;
int SHMax ;
void setup() {
lcdA.init();
lcdB.init();
lcdA.backlight();
lcdB.backlight();
Serial.begin(9600);
}
void loop()
{
tempC = analogRead(pin);
tempC = (5.0 * tempC * 100.0)/1024.0;
lcdA.setCursor(0, 0);
lcdA.print(tempC);
SHMin = tempC;
if(tempC <= SHMin){
SHMin = tempC;
lcdB.setCursor(0, 0);
lcdB.print(SHMin);
delay(1000);
}
delay (1000);
}
Ese es el que utilizo esta incorrecto solo se actualiza igual no se quedas en el mínimo obtenido,solo para dar referencia a lo que busco.
Saludos
Aquí tienes el programa con unos cambios y el comentario del porqué en cada líneas cambiada.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcdA(0x27,20,4); // LCD 0x27
LiquidCrystal_I2C lcdB(0x26,16,2); // LCD 0x27
int tempC ;
int pin = A0;
int SHMin = 999 ; // <== Inicializar con un valor muy alto para asegurarnos que laprimera vez actualiza el mínimo
int SHMax = -999; // <== Inicializar con un valor muy bajo para asegurarnos que la primera vez actualiza el máximo
void setup() {
lcdA.init();
lcdB.init();
lcdA.backlight();
lcdB.backlight();
Serial.begin(9600);
}
void loop()
{
tempC = analogRead(pin);
tempC = (5.0 * tempC * 100.0)/1024.0;
lcdA.setCursor(0, 0);
lcdA.print(tempC);
// SHMin = tempC; <== Esta línea no ha de ir aquí. Hace que siempre el "mínimo" sea la temperatura actual.
if(tempC <= SHMin){
SHMin = tempC;
lcdB.setCursor(0, 0);
lcdB.print(SHMin);
// delay(1000); <== no hace falta esperar, ya espera al final del loop()
}
delay (1000);
}
Creo que básicamente el problema lo tenías con la inicialización del mínimo, que creo que inicialmente lo tendrías a cero.
Aunque te falta el tratamiento del máximo, creo que con esto sabrás cómo hacerlo.
Ya me dirás si te ha funcionado. No lo he probado.
IgnoranteAbsoluto:
Ya me dirás si te ha funcionado. No lo he probado.
Hola que tal Ignorante Absoluto, lo eh cargado y si guarda un numero pero no se actualiza si se encuentra un numero menor.
y también se cambia si lee uno mayor lo cual no es lo que busco.
Gracias por la respuesta
¿Has hecho los cuatro cambios? ¿Incluído comentar o borrar esta línea que está antes del if?
// SHMin = tempC; <== Esta línea no ha de ir aquí. Hace que siempre el "mínimo" sea la temperatura actual
.
Disculpa era otro el error pero ya se soluciono.
Comparto el código SALUDOS MUCHAS GRACIAS.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcdA(0x27, 20, 4);
LiquidCrystal_I2C lcdB(0x26, 16, 2);
int tempC ;
int s;
int pin = A0;
int SHMin = 10000 ;
int SHMax = -10000;
void setup() {
lcdA.init();
lcdB.init();
lcdA.backlight();
lcdB.backlight();
Serial.begin(9600);
}
void loop()
{
s = analogRead(pin);
tempC = (5.0 * s * 100.0) / 1024.0;
lcdA.setCursor(0, 0);
lcdA.print(tempC);
if (tempC > SHMax) {
SHMax = tempC;
lcdB.setCursor(0, 1);
lcdB.print(SHMax);
}
if (tempC < SHMin) {
SHMin = tempC;
lcdB.setCursor(0, 0);
lcdB.print(SHMin);
}
delay (1000);
}