Falla en código para activar y desactivar relé

Buenos días amigos, espero se encuentren bien.
Tengo la siguiente inquietud, tengo un relé conectado a la salida 4 de Arduino y la idea es que cuando el sensor me marque una temperatura indicada se active, y se desactive si la excede, pero no logro realizar ese procedimiento , al iniciar el Arduino a la corriente el relé se activa pero inmediatamente se apaga.
Agradezco a quien me desee colaborar, gracias.
C++:
#include <Wire.h>   
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2); //0X27F - 0X20F

#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT22 //DHT22

DHT dht(DHTPIN, DHTTYPE);
 //crear pines de 5v

void setup() {
  lcd.init();
  lcd.backlight();
  lcd.clear();
  pinMode(8,OUTPUT);
  pinMode(11,OUTPUT);
pinMode(4,OUTPUT);
  dht.begin();
}

void loop() {
  digitalWrite(8,HIGH);
  digitalWrite(11,HIGH);

float h = dht.readHumidity();    // Lee la humedad
float t= dht.readTemperature();

lcd.clear();//Elimina todos los simbolos del LCD
lcd.setCursor(0,0);//Posiciona la primera letra despues del segmento 5 en linea 1           
lcd.print("Humedad:");
lcd.setCursor(8,0);
lcd.print(h);//Escribe la humedad
lcd.print("%");                   

lcd.setCursor(0,1);
lcd.print("Temperatura: ");
lcd.setCursor(12,1);
lcd.print(t);//Escribe la temperatura
lcd.print("C");                 
delay (2500);

if(t<37.7) {
  digitalWrite(4, HIGH);
  lcd.setCursor(0,0);
  lcd.print("LED.HIGH ");
}

 else if(t>37.7) {
  digitalWrite(4, LOW);
  lcd.setCursor(0,0);
  lcd.print("LED.OFF ");
}
}
 
Hola.

No tengo mucha idea de programación en Arduino, pero me parece que tu problema está ahí.

Código:
if(t<37.7) {
digitalWrite(4, HIGH);
lcd.setCursor(0,0);
lcd.print("LED.HIGH ");

}
else if(t>37.7) {
digitalWrite(4, LOW);
lcd.setCursor(0,0);
lcd.print("LED.OFF ");

}

El else en este caso debería ir sin el siguiente if, ya que no va a haber tercera condición.

Además, me parece que deberías agregar una temporización para una histéresis, porque si la temperatura se mantiene cerca de los 37,7°C, la medición puede oscilar y vas a tener la salida prendiendo y apagando constantemente.

Saludos.
 
El else va sin condición.

Código:
if(t<37.7) {
digitalWrite(4, HIGH);
lcd.setCursor(0,0);
lcd.print("LED.HIGH ");

}
else {
digitalWrite(4, LOW);
lcd.setCursor(0,0);
lcd.print("LED.OFF ");

}
 
Ya lo solucioné terminando la condición else con ;

else(t>37.7); {
digitalWrite(4, LOW);
lcd.setCursor(0,0);
lcd.print("LED.OFF ");

Muchas gracias amigo por responder, te lo agradezco.
 
Última edición por un moderador:
Atrás
Arriba