Buenos días,
este es mi primer mensaje y mi primer "proyecto" con Arduino, llevo varias semanas, leyendo y buscando información con la que he logrado hacer funcionar "casi" la idea que tenía en mente.
Me he topado con un problema y no logro dar con la solución, aunque posiblemente para muchos de vosotros pueda ser un error evidente, yo no logro solucionarlo.
RESUMEN DE LO QUE QUIERO HACER:
un sistema que cuando llegue a una temperatura determinada (que puedo variar a conveniencia mediante el uso de dos botones uno sube y el otro baja la temperatura de activación del relé.
Para ello y hasta donde he avanzado utilizo:
- nano (chino),
- dos sensores DS18B20,
- dos botones,
- un relé,
- pantalla LCD con I2C.
El problema surge que quiero dar un valor inicial a la temperatura de activación del relé, por ejemplo 30, en el código tengo indicado esa variable a la que he llamado "Tmax" de la siguiente manera:
int Tmax = 30;
pero, cuando se inicia el Arduino en el Monitor Serie si me aparece 30,
pero en la pantalla LCD donde he indicado que imprima el valor Tmax, siempre empieza con el valor 0, y me veo obligado a ir subiendo hasta el valor que quiera usando el botón asignado a sumar.
Os paso el código, seguramente exista una manera más eficiente de hacerlo, pero como os digo, acabo de empezar en esto y lo he ido sacando poco a poco, con la información que he podido ir recogiendo,
saludos y gracias de antemano.
/*2024-06-08
ok - LECTOR DOS SENSORES
ok - IMPRESION EN PANTALLA I2C
ok - INICIO RELÉ
ok - CAMBIO TEMPARTUTA Tmax CON BOTONES 08-06-2024
NO - poner temperatura Tmax incial a un valor especifico
*/
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal_I2C.h> // Librería LCD con módulo I2C
#define ONE_WIRE_BUS 2 // PIN de datos sensores
#define LED 8 // Indica pin del led
OneWire oneWire(ONE_WIRE_BUS); // Configuramos para comunicar con otros dispositivos 1-Wire
DallasTemperature sensores(&oneWire); // Indicamos el pin asignado al sensor 1-Wire a DallasTemperature
LiquidCrystal_I2C lcd(0x27,16,2); // Si no funciona cambiar por una de estas: (0x3f,16,2) (0x27,16,2) (0x20,16,2)
// pin de botones
const int BotonMasPin = 4; // Pin del botón de incremento
const int BotonMenosPin = 5; // Pin del botón de decremento
int incrementButtonState = 0; // Variable para leer el estado del botón de incremento
int decrementButtonState = 0; // Variable para leer el estado del botón de decremento
int T1 = 0; // variable donde guardaremos la temperatura leida del sensor 1
int T2 = 0; // variable donde guardaremos la temperatura leida del sensor 2
int Tmax = 30; // temperatura marcada de inicio RELE
void setup()
{
Serial.begin(9600);
pinMode(BotonMasPin, INPUT); // Configurar el pin del botón de incremento como entrada
pinMode(BotonMenosPin, INPUT); // Configurar el pin del botón de decremento como entrada
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(6,0); // indica posición del cursor
lcd.print("IN"); // Print a message to the LCD.
lcd.setCursor(6,1); // indica posición del cursor
lcd.print("OUT"); // Print a message to the LCD.
Serial.println(Tmax); // Mostrar el valor en el monitor serie
}
void loop()
{
sensores.requestTemperatures(); // Enviamos el comando para obtener la temperatura
float T1 = sensores.getTempCByIndex(0); // Almacenamos la temperatura leida por el sensor 1
float T2 = sensores.getTempCByIndex(1); // Almacenamos la temperatura leida por el sensor 2
float Tmax; // Almacenamos el valor de Tmax
incrementButtonState = digitalRead(BotonMasPin); // Leer el estado del botón de incremento
decrementButtonState = digitalRead(BotonMenosPin); // Leer el estado del botón de decremento
if (incrementButtonState == HIGH && Tmax <30){ // Si el botón de incremento está presionado
Tmax++; // Incrementar la variable
Serial.println(Tmax,00); // Mostrar el valor en el monitor serie
}
if (decrementButtonState == HIGH && Tmax >20){ // Si el botón de decremento está presionado
Tmax--; // Decrementar la variable
Serial.println(Tmax,00); // Mostrar el valor en el monitor serie
}
//CODIGO IMPRESION EN LCD
lcd.setCursor(14,1); // Posición de cursor
lcd.print (Tmax, 0); // Imprime (tempMAX)
lcd.setCursor(0, 0); //Posición de cursor
lcd.print(T1); //Imprime (temp) temperatura:
lcd.setCursor(0, 1); //Posición de cursor
lcd.print(T2); //Imprime (temp) temperatura:
//CODIGO ACTIVAR RELE
if(T2>Tmax) {
digitalWrite(LED,HIGH); //si cumple condición enciende LED
lcd.setCursor(10,0); //posición de cursor
lcd.print(" ON"); //imprime ON
} else{
digitalWrite(LED,LOW); //si cumple condición enciende LED
lcd.setCursor(10,0); //Posición de cursor
lcd.print("OFF "); //imprime OFF
}
}