Unir dos proyectos

Hola intente unir dos void loop de proyectos diferentes que por separado me funcionan los 2,compilando no me da ningun error pero solo me funcionan los infrarrojos,yo creo q es un tema de parentesis o que cierro o abro algo mal,alguien me echa una mano?

#include <Arduino.h>
#include <NECIRrcv.h>
// librerias infrarrojos
 #include <SimpleDHT.h>
// Librería  <SimpleDHT.h> del sensor de temperatura y humedad relativa
#include <SPI.h>
//Librería <SPI.h> del motor DC compatible con la minibomba de agua DC
#define humidity_sensor_pin A0
//Se define variable del sensor de humedad en el suelo en el pin A0
#define ldr_pin A5
//Defino variable del sensor de fotoresistencia LDR en el pin A5
 #define IRPIN 8   
 // El infrarrojos va conectado al pin8 y lo defino como irpin
  int led = 13;
  static int aux = 1;
NECIRrcv ir(IRPIN) ;

// for DHT11, 
//      VCC: 5V or 3V
//      GND: GND
//      DATA: 2
int pinDHT11 = 2;
// Se declara la variable pinDHT11 y lo asocio al pin 2
SimpleDHT11 dht11;
int ldr_value = 0;
//Se declara la variable ldr_value (fotoresistencia) y 
int water_pump_pin = 3;
//Se declara la variable mini bomba de agua y lo asocio al pin 3
int water_pump_speed = 255;
//Velocidad de la minibomba de agua oscila entre 100 como mínimo y 255 como máximo. Yo he //elegido 255 pero ustedes pueden elegir la que estimen conveniente. A más velocidad, mayor //bombeo de agua

void setup() {
  Serial.begin(9600);
    pinMode(led, OUTPUT);
  ir.begin() ;
}

void loop() {
  {
  unsigned long ircode ;
  while (ir.available()) { 
    ircode = ir.read() ;
    if(ircode == 1336998660){  /*en nuestro caso, corresponde con el botón encendido/apagado del mando*/
      if(aux == 0){
        digitalWrite(led, LOW);
        aux = 1;
      }
      else{
        digitalWrite(led, HIGH);
        aux = 0;
      }
    } 
  }
}
  // start working...
// Mide la temperatura y humedad relativa y muestra resultado
  Serial.println("*******************************");
  Serial.println("Sample DHT11...");
  
  // read with raw sample data.
  byte temperature = 0;
  byte humidity_in_air = 0;
  byte data[40] = {0};
  if (dht11.read(pinDHT11, &temperature, &humidity_in_air, data)) {
    Serial.print("Read DHT11 failed");
    return;
  }
  
  Serial.print("Sample RAW Bits: ");
  for (int i = 0; i < 40; i++) {
    Serial.print((int)data[i]);
    if (i > 0 && ((i + 1) % 4) == 0) {
      Serial.print(' ');
    }
  }
  Serial.println("");
  
  Serial.print("Sample OK: ");
  Serial.print("Temperature: ");Serial.print((int)temperature); Serial.print(" *C, ");
  Serial.print("Relative humidity in air: ");Serial.print((int)humidity_in_air); Serial.println(" %");
  
  // DHT11 sampling rate is 1HZ.

  // Ground humidity value in %
// Mide la humedad en el suelo en % y muestra el resultado
  
  int ground_humidity_value = map(analogRead(humidity_sensor_pin), 0, 1023, 100, 0);
  Serial.print("Ground humidity: ");
  Serial.print(ground_humidity_value);
  Serial.println("%");

  // Light value in %
// Mide la luminosidad en % y muestra el resultado

  int ldr_value = map(analogRead(ldr_pin), 1023, 0, 100, 0);
  Serial.print("Light: ");
  Serial.print(ldr_value);
  Serial.println("%");
   Serial.println("*******************************");

//**************************************************************
// Condiciones de riego 
// Si la humedad en el suelo es igual o inferior al 50%, si la luminosidad es inferior al 30%,
// Si la temperatura es inferior al 30%, entonces el sistema de riego riega. 
// En caso de que no se  cumpla alguno o ninguno de los 3 requisitos anteriores,
// el sistema de riego no riega
//**************************************************************
 if( ground_humidity_value <= 50 && ldr_value < 30 && temperature < 30) {
 digitalWrite(water_pump_pin, HIGH);
 Serial.println("Irrigate");
 analogWrite(water_pump_pin, water_pump_speed);
//El motor de la bomba de agua arranca con la velocidad elegida anteriormente en el código
 }
 else{
 digitalWrite(water_pump_pin, LOW);
 Serial.println("Do not irrigate");
//El motor de la bomba de agua se para y no riega
 }
 delay (100); 
// Ejecuta el código cada 100 milisegundos
}

Hola elgustavo8, creo que deberias pensar el programa de otra forma, quiero decir, al unir los dos proyectos estas haciendo poco eficaz la función Loop.

En mi opinion deberias crear varias funciones, por ejemplo:

  void medirHumedad()
  {
    int ground_humidity_value = map(analogRead(humidity_sensor_pin), 0, 1023, 100, 0);
    Serial.print("Ground humidity: ");
    Serial.print(ground_humidity_value);
    Serial.println("%");
  }

para llamar a esta función solo has de poner:

medirHumedad();

En cualquier caso te recomiendo la función millis(), es un contador de milisegundos, una estructura básica que recomendaba hace poco a otro compañero es esta:

unsigned long prevAccion1Millis = 0;
unsigned long prevAccion2Millis = 0;
unsigned long prevAccion3Millis = 0;
unsigned long prevAccion4Millis = 0;
const long accion1Millis = 500;
const long accion2Millis = 500;
const long accion3Millis = 500;
const long accion4Millis = 500;


void setup()
{


}

void loop()
{
  unsigned long currentMillis = millis(); // Se captura el tiempo actual

  // se comprueba si el tiempo actual menos el tiempo en que realizó esta rutina
  //por última vez es mayor que el intervalo (accion1Millis, 500 en el ejemplo).
  if(currentMillis - prevAccion1Millis >= accion1Millis)
  {
    // Si se cumple la condición se guarda el nuevo tiempo
    // en el que se ejecuta esta rutina
    prevAccion1Millis = currentMillis;
    

    // Aqui tu código

  }

  if(currentMillis - prevAccion2Millis >= accion2Millis)
  {
    prevAccion2Millis = currentMillis;
    // Aqui tu código
  }
 
  if(currentMillis - prevAccion3Millis >= accion3Millis)
  {
    prevAccion3Millis = currentMillis;
    // Aqui tu código
  }
  if(currentMillis - prevAccion4Millis >= accion4Millis)
  {
    prevAccion4Millis = currentMillis;
    // Aqui tu código
  }
}

donde te escribo "//Aqui tu código" haces por ejemplo la llamada al void medirHumedad()
medirHumedad(); o escribes el código que necestes que se ejecute.

Espero ayudarte :slight_smile: