relay + boton y sensor DHT11 trabajar conjuntamente

Quiero que cuando pulse el boton se active el rele que esta conectada una minibomba y por otro lado que me lea la tempera y humedad con el dht11. Consigo con el codigo separado hacerlo trabajar pero cuando lo combino el dht11 con activar pulsando el botón la minibomba. No me funciona correctamente no me responde a los pulsos del boton

Aquí esta mi codigo
En que fallo para que responda el boton, cuando pulse que manda 1 y si pulso otra vez un 0 para abrir y cerrar una electrovalvula y trabaje conjuntamente con el sensor de temperatura y humedad.

#include <DHT11.h>

#include <DHT.h>
#include <DHT_U.h>

#define DHTTYPE DHT11

int boton = 11;
int led = 13;
int pump_on = 7;
boolean estadoAnterior = LOW;
boolean estadoActual = LOW;
boolean ledOn = false;
int cont=0;
const int DHTPin = 5;     // what digital pin we're connected to
 
DHT dht(DHTPin, DHTTYPE);
void setup()
{
  
  pinMode(boton, INPUT);
  pinMode(led, OUTPUT);
  pinMode(pump_on, OUTPUT);
  Serial.begin(9600);
   
  dht.begin();
  readSensor();
}


void loop()
{

    readCmd();
    readSensor();
 
}

void readSensor(void)
{
   // Wait a few seconds between measurements.
   delay(2000);
 
   // Reading temperature or humidity takes about 250 milliseconds!
   float h = dht.readHumidity();
   float t = dht.readTemperature();
 
   if (isnan(h) || isnan(t)) {
      Serial.println("Failed to read from DHT sensor!");
      return;
   }
   Serial.print("Humidity: ");
   Serial.print(h);
   Serial.println();
   Serial.print("Temperature: ");
   Serial.print(t);
   Serial.print(" *C ");
   Serial.println();
}

void readCmd(void)
{
  estadoActual = rebote(estadoAnterior);
  Serial.print(estadoActual);
  if (estadoAnterior == LOW && estadoActual == HIGH)
  {
    ledOn = !ledOn;
    cont++;
    Serial.println(cont);
  }
  estadoAnterior = estadoActual;
  
  digitalWrite(led, ledOn);
  digitalWrite(pump_on, !ledOn);
}
boolean rebote(boolean eAnterior)
{
  boolean eActual = digitalRead(boton);
  if (eAnterior != eActual)
  {
    delay(5);
    eActual = digitalRead(boton);
  }
  return eActual;
}

Bueno segun lo que veo en tu código es que tienes un delay de 2000 ( 2 segundos) en el cual se espera y na va a seguir el programa hasta que pase eso, en ves utilizar el delay utiliza milis aquí un pequeño ejemplo de cómo funciona y como lo puedes adaptar a tu código http://www.ardumania.es/ejercicio-2-blink-without-delay/