problema unir codigos de sensores

Soy nuevo en esto de arduino y intento unir 3 codigos de sensores (luz, humedad y co2). El problema es que por separado funcionan bien pero cuando los junto y intento que se muestren por un lcd, no sale nada por este. Creo que el problema esta en la entrada del de co2 pero no se

#include  <Wire.h>
#include  <LiquidCrystal_I2C.h>
#define pwmPin 10
byte cmd[9] = {0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79};

char response[9];
int prevVal = LOW;
int th, tl, ppm;

int valorLDR = 0; //Creamos la variable de tipo número entero para almacenar los datos recogidos del sensor analógico LDR (Light Dependant Resitor). 
int pinLDR = A0;    //Seleccionamos el pin analógico A0 como input del sensor LDR. // YL-39 + YL-69 humidity sensor
int porcentajeluz;
int porcentajehumedad;
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
byte humidity_sensor_pin = A1;
byte humidity_sensor_vcc = 6;
byte pwmpin = 10;



void setup() { 
   lcd.begin(16, 2);

   
  // Init the humidity sensor board
  pinMode(humidity_sensor_vcc, OUTPUT);
  digitalWrite(humidity_sensor_vcc, LOW);
  pinMode(pwmPin, INPUT);
  while (!Serial);
  delay(1000);
  Serial.begin(9600);
 
  
}

int read_humidity_sensor() {
  digitalWrite(humidity_sensor_vcc, HIGH);
  delay(500);
  int value = analogRead(humidity_sensor_pin);
  digitalWrite(humidity_sensor_vcc, LOW);
  return 1023 - value;

}
void loop() {
  

//CO2 via pwm

    do {

        th = pulseIn(pwmPin, HIGH, 1004000) / 1000.0;

        tl = 1004 - th;

        ppm = 2000 * (th-2)/(th+tl-4);

    } while (ppm < 0.0);


    



  
  //Imprimirmos humedad
  porcentajehumedad = map(read_humidity_sensor(), 20, 720, 0, 100); 
  valorLDR = analogRead(pinLDR); //Leemos el valor del pinLDR y lo guardamos en la variable creada.
  porcentajeluz = map(valorLDR, 0, 1024, 0, 100);  
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("luz%");
  lcd.setCursor(5, 0);
  lcd.print(porcentajeluz);
  lcd.setCursor(8, 0);
  lcd.print("ppm");
  lcd.setCursor(12, 0);
  lcd.print(ppm);
  lcd.setCursor(0, 1);
  lcd.print("humd%");
  lcd.setCursor(6, 1);
  lcd.print(porcentajehumedad);
  
  
  delay(5000);
}

Prueba con estas correcciones:

int th, tl, ppm;                   //Error th debe ser unsigned long
LiquidCrystal_I2C lcd(0x27,16,2);  //Suponiendo que el lcd de 16 columnas x 2 filas

Tu problema son los delays. Si tus tres códigos son iguales ( con delays) , es imposible unirlos y que funcionen.
Mira este tutorial que escribí hace un tiempo.
Saludos

Ese tutorial esta en el Indice de temas tutoriales porque es sumamente didáctico. Por favor sigue el consejo de PeterKantTropus, te será de mucha ayuda.