manipular reles

hola que tal? Mi idea es realizar un invernadero, para ello cuento con dos sensores (DHT11 ; YL69) con su codigo

#include <DHT.h>

#define DHTPIN 7
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

int Valor;

void setup() {
  Serial.begin(9600);
  dht.begin();
  Serial.println("http://arubia45.blogspot.com.es");
}

void loop() {
  loop1();
  loop2();
  // Esto es para ejecución secuencial. Si necesitaras ejecutar cosas simultáneamente,
  // habría que hacer más modificaciones y usar millis.
}
void loop1() {
  Serial.print("Sensor de Humedad valor:");
  Valor = analogRead(0);
  Serial.print(Valor);
  if (Valor <= 355)
    Serial.println(" demasiada agua");
  if ((Valor > 355) and (Valor <= 700))
    Serial.println(" humedad aceptable");
  if (Valor > 700)
    Serial.println(" seco, necesitas regar");
  // delay(1000); // Lo comento por si queres que aparezcan TODOS los datos cada segundo
}


void loop2() {
  int h = dht.readHumidity();// Lee la humedad
  int t = dht.readTemperature(); //Lee la temperatura
  //////////////////////////////////////////////////Humedad
  Serial.print("Humedad de Ambiente: ");
  Serial.print(h);//Escribe la humedad
  Serial.println(" %");
  ///////////////////////////////////////////////////Temperatura
  Serial.print("Temperatura: ");
  Serial.print(t);//Escribe la temperatura
  Serial.println(" C");
  delay (1000);

  Serial.println ();
}

y necesito manipular 4 reles para ello he echo este codigo para controlar uno solo

int ledpin=13;
void setup() {
Serial.begin(9600);
pinMode(ledpin,OUTPUT);
}

void loop() {
  
 while (Serial.available()==0);
 char val=Serial.read();
 if (val=='0'){
  Serial.println("apagado");
  digitalWrite(ledpin,HIGH);
}
else if (val=='1'){
  Serial.println("encendido");
  digitalWrite(ledpin,LOW);
}
else{
  Serial.println("invalid");
}
}

el problema empieza cuando intento controlar los otros 3 reles y tener informacion de los sensores.
Agradesco su ayuda, espero haber sido lo suficientemente correcto e intendible.

Te pregunto algo: Estas conectando el pin de salida #13 de tu arduino directamente al relé? Que tipo de rele estas utilizando? Ya sabes cuanta corriente consume la bobina de ese rele? Estas usando un diodo antiparalelo?

Lo mas seguro es que estas conectando los otros 3 reles a la misma salida del arduino y obvio que no tendrá la potencia suficiente para activarlos. Te recomiendo uses optoacopladores para separar las corrientes y aislar tu arduino o sistema de control del sistema de potencia.

Saludos

Necesitas fusionar también un tercer programa? Luego te ayudo con eso.

Mientras tanto necesito saber: qué caracter/comando activa/desactiva cada uno de los cuatro relés? Debe haber alguno que encienda/apague todos?

El tipo de rele que estoy utilizando es el modulo rele de arduino que ya viene pronto para conectar (nose si me explico) debajo dejo una imagen. que comando activa y desactiva podria ser cualquier numero, lo que debo poder activar y desactivar los cuatro reles por separados, mi idea es luego de tener todo esto armado poderlo controlar por EventGhost y luego desde un celular. Pero primero lo primero. muchas gracias por sus rapidas respuestas. saludos
PD: estoy utilizando arduino uno

rele.jpg

Mira esto:

#include <DHT.h>

#define DHTPIN 7
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

const byte rele1 = 10;
const byte rele2 = 11;
const byte rele3 = 12;
const byte rele4 = 13;

int Valor;
unsigned long tAnterior = 0;

void setup() {
  pinMode(rele1, OUTPUT);
  pinMode(rele2, OUTPUT);
  pinMode(rele3, OUTPUT);
  pinMode(rele4, OUTPUT);
  Serial.begin(9600);
  dht.begin();
  Serial.println("http://arubia45.blogspot.com.es");
}

void loop() {
  unsigned long tActual = millis();
  if (tActual - tAnterior >= 1000) {
    // Leer de los sensores cada segundo. De esta forma podremos controlar los relés mientras esta acción espera
    tAnterior = tActual;
  loop1();
  loop2();
  }
  // Sé que vas a necesitar simultaneidad, así que ahora usamos millis para los retrasos
  loop3();
}
void loop1() {
  Serial.print("Sensor de Humedad valor:");
  Valor = analogRead(0);
  Serial.print(Valor);
  if (Valor <= 355)
    Serial.println(" demasiada agua");
  if ((Valor > 355) and (Valor <= 700))
    Serial.println(" humedad aceptable");
  if (Valor > 700)
    Serial.println(" seco, necesitas regar");
  // delay(1000); // Lo comento por si queres que aparezcan TODOS los datos cada segundo
}


void loop2() {
  int h = dht.readHumidity();// Lee la humedad
  int t = dht.readTemperature(); //Lee la temperatura
  //////////////////////////////////////////////////Humedad
  Serial.print("Humedad de Ambiente: ");
  Serial.print(h);//Escribe la humedad
  Serial.println(" %");
  ///////////////////////////////////////////////////Temperatura
  Serial.print("Temperatura: ");
  Serial.print(t);//Escribe la temperatura
  Serial.println(" C");
  //delay (1000); // Ahora sí necesitamos simultaneidad, así que adiós al delay
  Serial.println ();
}

void loop3() {
  char val = 0;
  if (Serial.available())
  val = Serial.read();

  switch (val) {
    case '1':
    digitalWrite(rele1, !digitalRead(rele1));
    // Alterna el estado del relé. No se limita a "solo encender" o "solo apagar"
    break;

    case '2':
    digitalWrite(rele2, !digitalRead(rele2));
    break;

    case '3':
    digitalWrite(rele3, !digitalRead(rele3));
    break;

    case '4':
    digitalWrite(rele4, !digitalRead(rele4));
    break;

    case 0: break;
    
    default:
    Serial.println("No valido");
    }
}

Dependiendo del caracter que reciba ('1', '2', '3' o '4') encenderá/apagará el relé correspondiente.

La lectura de los sensores sigue como siempre ha sido.

Que tal, muchas gracias por tu respuesta Lucario448 pero al momento de compilar me da error.
"collect2.exe: error: Id returned 5 exit status

exit status 1
Error compilacion en tarjeta arduino/genuino uno..