Dar un valor inicial a una variable

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

     
}
}

Elimina esta línea de loop()

float Tmax;

Declara una variable local que tiene el mismo nombre que la Tmax *global.
Por ser local tiene mayor prioridad y la global se ignora.

Gracias por tu respuesta,

Al eliminar:
float Tmax, no imprime en el LCD el valor Tmax,
he seguido haciendo pruebas y se ha solucionado
además de eliminar float Tmax que me indicas:

  • modificando del loop y eliminando los dos ceros a la derecha de la coma en la línea siguiente:
 lcd.print (Tmax,00);                         // Imprime (tempMAX)

y lo he dejado de esta manera:

 lcd.print (Tmax);                              // Imprime (tempMAX)

muchas gracias por la ayuda,
un pasito más y ya puedo seguir complicando un poca más mi proyecto.

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