Programación de termostato

Pues eso que estoy haciendo un termostato con un sensor de temperatura dht22, un rele y mas tarde agregare un modulo wifi para controlarlo remotamente, pero tengo una duda. Ya lo tengo configurado para que se encienda cuando baje de 22 c la temperatura ambiente pero quiero poner 2 pulsadores, uno para bajar la temperatura a la que este se enciende y otro para subirla, por ejemplo de 0.5 en 0.5 c.
Es decir, si la temperatura de encendido esta a 22 y yo le doy al pulsador de bajar que esa temperatura me baje a 21.5 c

Dejo el codigo aqui:
pd: trabajo con un arduino mega.

#include "DHT.h"

#define DHTPIN 2     // Pin donde está conectado el sensor
#define rele 3      // Pin donde esta conectado el pin s del rele

//#define DHTTYPE DHT11   // Descomentar si se usa el DHT 11
#define DHTTYPE DHT22   // Sensor DHT22


DHT dht(DHTPIN, DHTTYPE);

int tempon = 22;    // Declaramos la temperatura a la que queremos que nuestra calefaccion se ponga en marcha

void setup() {
  Serial.begin(9600);
  Serial.println("Iniciando...");
  dht.begin();
  pinMode(rele, OUTPUT);
}
void loop() {
  delay(2000);
  float h = dht.readHumidity(); //Leemos la Humedad
  float t = dht.readTemperature(); //Leemos la temperatura en grados Celsius
  //--------Enviamos las lecturas por el puerto serial-------------
  Serial.print("Humedad ");
  Serial.print(h);
  Serial.print(" %t");
  Serial.print("Temperatura: ");
  Serial.print(t);
  Serial.print(" *C ");

  if ( t < tempon ) {
    digitalWrite(rele,HIGH);
    } else {
      digitalWrite(rele,LOW);
      }
}

La libreria del sensor DHT22 esta en archivos adjuntos

DHT-sensor-library-master.zip (16.5 KB)

Para eso tenés que declarar dos pines como entrada en pullup , en los cuales conectarás los pulsadores a masa. Dentro del loop preguntás si algún pulsador está presionado, y de ser así sumás o restás 0,5 a tu variable tempon, la cual debería ser float en lugar de int. Eso sería todo. Intentá escribir el código que no es tan difícil. Si no te funciona vamos viendo.

Pues esa es la duda que no se hacer lo que tu has dicho y no todo el codigo es copy paste, en vez de decirme que lo tengo mal podrias darme una solucion como ha hecho pablo. no me ha dado el codigo pero me ha dado unas bases y yo voy a buscar informacion sobre esas bases para seguir con mi codigo. :slight_smile:

@Nunomarquina debes comprender que todos los días en un alto porcentaje llega gente como tu pidiendo ayuda para que le hagan la tarea o su trabajo, y algunos lo toman de un modo y otros de otro. Acabas de ver justamente dos respuestas que te dicen lo mismo.

Ahora bien, el IDE tiene muchos ejemplos sobre pulsadores.
Este tema de presionar algo y que sume o reste, se ha respondido infinidad de veces. Pero si te pones a buscar pulsador sube temperatura o baja temperatura no se si lo vas a encontrar.

Pulsar algo y que incremente/decremente un contador es exactamente lo mismo que incrementar/decrementar 0.5. Solo cambia el tipo de variable y el incremento.

Entonces tienes pautas para trabajar y obtener buenos resultados.

Estudia como conectar un pulsador sea Pull-up pull-down o directamente conectado al pin.

Todo esto esta por el foro muchas veces. Solo debes leer con atención los hilos.

Bueno ya lo consegui, la cuestion estaba en no utilizar decimales ni vault sino hacer sumas compuestas y restas compuestas. dejo por aqui el codigo por si a alguien lo necesitase:

#include "DHT.h"

#define DHTPIN 2     // Pin donde está conectado el sensor
#define rele 3      // Pin donde esta conectado el pin s del rele
#define tempup 4    // Pin donde esta conectado el pulsador para subir la temperatura de activacion
#define tempdown 5    // Pin donde esta conectado el pulsador para bajar la temperatura de activacion
//#define DHTTYPE DHT11   // Descomentar si se usa el DHT 11
#define DHTTYPE DHT22   // Sensor DHT22

DHT dht(DHTPIN, DHTTYPE);

int t1;
int tempon = 2200;    // Declaramos la temperatura a la que queremos que nuestra calefaccion se ponga en marcha

void setup() {
  Serial.begin(9600);
  Serial.println("Iniciando...");
  dht.begin();
  pinMode(rele, OUTPUT);
  pinMode(tempup, INPUT_PULLUP);
  pinMode(tempdown, INPUT_PULLUP);
}
void loop() {
  delay (115);
  float h = dht.readHumidity(); //Leemos la Humedad
  float t = dht.readTemperature(); //Leemos la temperatura en grados Celsius
  //--------Enviamos las lecturas por el puerto serial-------------
  Serial.print("Humedad ");
  Serial.print(h);
  Serial.print(" %t");
  Serial.print("Temperatura: ");

  int readtempup = digitalRead(tempup);   // Leemos el estado del pulsador para subir la temperatura y lo alojamos en una variable
  int readtempdown = digitalRead(tempdown);   // Leemos el estado del pulsador para bajar la temperatura y lo alojamos en una variable

  t1 = t * 100;
  Serial.print(t1);
  Serial.print(" *C *100 ");

  if (readtempup == LOW) {
    tempon += 50;
    } else {
      
      }
   if (readtempdown == LOW) {
    tempon -= 50;
    } else {
      
      }

      Serial.print("tempon: ");
      Serial.print(tempon);    // Mostramos la temperatura de activacion a traves del puerto serial

  if (t1 < tempon) {
    digitalWrite(rele,HIGH);
    } else {
      digitalWrite(rele,LOW);
      }
}

La libreria para el sensor esta en el primer mensaje en archivos adjuntos.

Ya que ahora hiciste tu tarea, nosotros podemos mostrarte como podria funcionar con incrementos/decrementos de 0.5°C

#include "DHT.h"

#define DHTPIN    2    // Pin donde está conectado el sensor
#define rele      3    // Pin donde esta conectado el pin s del rele
#define tempup    4    // Pin donde esta conectado el pulsador para subir la temperatura de activacion
#define tempdown  5    // Pin donde esta conectado el pulsador para bajar la temperatura de activacion
//#define DHTTYPE DHT11   // Descomentar si se usa el DHT 11
#define DHTTYPE DHT22   // Sensor DHT22

DHT dht(DHTPIN, DHTTYPE);

float tempon = 22.0;    // Declaramos la temperatura a la que queremos que nuestra calefaccion se ponga en marcha
bool readtempup, readtempupAnt;
bool readtempdown, readtempdownAnt;

void setup() {
  Serial.begin(9600);
  Serial.println("Iniciando...");
  dht.begin();
  pinMode(rele, OUTPUT);
  pinMode(tempup, INPUT_PULLUP);
  pinMode(tempdown, INPUT_PULLUP);
}

void loop() {
  delay (115);
  float h = dht.readHumidity(); //Leemos la Humedad
  float t = dht.readTemperature(); //Leemos la temperatura en grados Celsius
  //--------Enviamos las lecturas por el puerto serial-------------
  Serial.print("Humedad ");
  Serial.print(h);
  Serial.print(" %t");
  Serial.print("Temperatura: ");

  readtempup = digitalRead(tempup);   // Leemos el estado del pulsador para subir la temperatura y lo alojamos en una variable
  readtempdown = digitalRead(tempdown);   // Leemos el estado del pulsador para bajar la temperatura y lo alojamos en una variable

  Serial.print(t);
  Serial.print(" *C ");

  if (!readtempup && readtempupAnt) {
      tempon += 0.5;
  } 
  readtempupAnt = readtempup; 

  if (!readtempdown && readtempdownAnt) {
      tempon -= 0.5;
  }
  readtempdownAnt = readtempdown;

  Serial.print("tempon: ");
  Serial.print(tempon);    // Mostramos la temperatura de activacion a traves del puerto serial

  if (t < tempon) {
      digitalWrite(rele,HIGH);
  } else {
      digitalWrite(rele,LOW);
  }
}