По идеи должен быть датчик температуры отображающийся на дисплее и датчик уровня воды на трёх лэд

#include <Wire.h>                       // библиотека для протокола I2C 
#include <LiquidCrystal_I2C.h> // подключаем библиотеку для LCD 1602
#include <DHT.h>                         // подключаем библиотеку для датчика

LiquidCrystal_I2C LCD(0x3F,16,2);  // присваиваем имя LCD для дисплея
DHT dht(2, DHT11); 

byte simvol[8] = { 
0b11100,
0b10100,
0b11100,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000,
};                         // сообщаем на каком порту будет датчик
int lowerThreshold = 420;
int upperThreshold = 520;



// Выводы, подключенные к датчику
#define sensorPower 9
#define sensorPin A0

// Переменная для хранения значения уровня воды
int val = 0;

// Объявляем выводы, к которым подключены светодиоды
int redLED = 13;
int yellowLED = 12;
int greenLED = 11;
void setup()
{
   LCD.init();            // инициализация LCD дисплея
   LCD.backlight();  // включение подсветки дисплея
   dht.begin();         // запускаем датчик DHT11

  Serial.begin(9600);
  pinMode(sensorPower, OUTPUT);
  digitalWrite(sensorPower, LOW);

  // Настроить выводы светодиодов на выход
  pinMode(redLED, OUTPUT);
  pinMode(yellowLED, OUTPUT);
  pinMode(greenLED, OUTPUT);

  // Изначально выключить все светодиоды
  digitalWrite(redLED, LOW);
  digitalWrite(yellowLED, LOW);
  digitalWrite(greenLED, LOW);
 }

 void loop() 
 {
   // считываем температуру (t) и влажность (h)
   float h = dht.readHumidity();
   float t = dht.readTemperature();
 

   // выводим температуру (t) и влажность (h) на жк дисплей
   LCD.setCursor(0,0);
   LCD.print("Hum:");
   LCD.print(h );
   LCD.setCursor(10,0);
   LCD.print("%");
   LCD.createChar(1, simvol);
   
   LCD.setCursor(10,1); // ставим курсор на 1 символ первой строки
   LCD.print(char(1)); // печатаем символ на первой строке

   LCD.setCursor(0,1);
   LCD.print("Temp:");
   LCD.print(t);

   delay(100);
}  
  int readSensor(){
    
    if (level == 0) 
   {
    Serial.println("Water Level: Empty");
    digitalWrite(redLED, LOW);
    digitalWrite(yellowLED, LOW);
    digitalWrite(greenLED, LOW);
   }
  else if (level > 0 && level <= lowerThreshold) 
   {
    Serial.println("Water Level: Low");
    digitalWrite(redLED, HIGH);
    digitalWrite(yellowLED, LOW);
    digitalWrite(greenLED, LOW);
   }
  else if (level > lowerThreshold && level <= upperThreshold) 
   {
    Serial.println("Water Level: Medium");
    digitalWrite(redLED, LOW);
    digitalWrite(yellowLED, HIGH);
    digitalWrite(greenLED, LOW);
   }
  else if (level > upperThreshold) 
  {
    Serial.println("Water Level: High");
    digitalWrite(redLED, LOW);
    digitalWrite(yellowLED, LOW);
    digitalWrite(greenLED, HIGH);
   }
  


// Данная функция используется для получения показаний
 

  digitalWrite(sensorPower, HIGH);
  delay(10);
  val = analogRead(sensorPin);
  digitalWrite(sensorPower, LOW);
  return val;
}

помогите в чем здесь ошибка и как её исправить

Поясните, что за ошибка?
Если компиляции - приведите сообщение компилятора полностью.

Если дело в том, что код работает не так, как вы ожидали - будет полезно пояснить, что этот код делает, как он должен работать по задумке и как на самом деле - и чем одно отличается от другого.

А где вызывается функция
readSensor() ?

просто я решил объединить два кода в один но почему-то выдает ошибку либо в строках с if либо строку с loop

это она?

И где она вызывается?

Так почему вы не покажете эти сообщения об ошибках?

где она должна быть?

Compilation error: ‘level’ was not declared in this scope

Вы бы лучше первоначальные скетчи показали !

английским владеете? Написано - переменная level не определена в коде. И она таки не определена. Значит надо найти в исходном коде, где и как она была описана и сделать в новом коде так же.
И так по всем не описанным переменным, если будут

в основном ошибка компиляции выходит просто в разных местах

не бывает просто “ошибки компиляции”. Каждая ошибка разаная и для каждой компилятор пишет, что именно не так - вот как выше с переменной.
Все эти ошибки нужно исправить.
Писать что у вас “ошибка компиляции” - бессмысленно и просто глупо.

int lowerThreshold = 420;
int upperThreshold = 520;

// Выводы, подключенные к датчику
#define sensorPower 9
#define sensorPin A0

// Переменная для хранения значения уровня воды
int val = 0;

// Объявляем выводы, к которым подключены светодиоды
int redLED = 12;
int yellowLED = 13;
int greenLED = 11;

void setup() 
{
  Serial.begin(9600);
  pinMode(sensorPower, OUTPUT);
  digitalWrite(sensorPower, LOW);

  // Настроить выводы светодиодов на выход
  pinMode(redLED, OUTPUT);
  pinMode(yellowLED, OUTPUT);
  pinMode(greenLED, OUTPUT);

  // Изначально выключить все светодиоды
  digitalWrite(redLED, LOW);
  digitalWrite(yellowLED, LOW);
  digitalWrite(greenLED, LOW);
}

void loop() 
{
  int level = readSensor();

  if (level == 0) 
  {
    Serial.println("Water Level: Empty");
    digitalWrite(redLED, LOW);
    digitalWrite(yellowLED, LOW);
    digitalWrite(greenLED, LOW);
  }
  else if (level > 0 && level <= lowerThreshold) 
  {
    Serial.println("Water Level: Low");
    digitalWrite(redLED, HIGH);
    digitalWrite(yellowLED, LOW);
    digitalWrite(greenLED, LOW);
  }
  else if (level > lowerThreshold && level <= upperThreshold) 
  {
    Serial.println("Water Level: Medium");
    digitalWrite(redLED, LOW);
    digitalWrite(yellowLED, HIGH);
    digitalWrite(greenLED, LOW);
  }
  else if (level > upperThreshold) 
  {
    Serial.println("Water Level: High");
    digitalWrite(redLED, LOW);
    digitalWrite(yellowLED, LOW);
    digitalWrite(greenLED, HIGH);
  }
  delay(1000);
}

// Данная функция используется для получения показаний
int readSensor() 
{
  digitalWrite(sensorPower, HIGH);
  delay(10);
  val = analogRead(sensorPin);
  digitalWrite(sensorPower, LOW);
  return val;
}

код уровня воды

#include <Wire.h>                       // библиотека для протокола I2C 
#include <LiquidCrystal_I2C.h> // подключаем библиотеку для LCD 1602
#include <DHT.h>                         // подключаем библиотеку для датчика

LiquidCrystal_I2C LCD(0x3F,16,2);  // присваиваем имя LCD для дисплея
DHT dht(2, DHT11);                          // сообщаем на каком порту будет датчик

byte simvol[8] = { 
0b11100,
0b10100,
0b11100,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000,
};
void setup() {
   LCD.init();            // инициализация LCD дисплея
   LCD.backlight();  // включение подсветки дисплея
   dht.begin();         // запускаем датчик DHT11
}

void loop() {
   // считываем температуру (t) и влажность (h)
   float h = dht.readHumidity();
   float t = dht.readTemperature();

   // выводим температуру (t) и влажность (h) на жк дисплей
   LCD.setCursor(0,0);
   LCD.print("Hum:");
   LCD.print(h);
   LCD.setCursor(10,0);
   LCD.print("%");
   LCD.createChar(1, simvol);
   
   LCD.setCursor(10,1); // ставим курсор на 1 символ первой строки
   LCD.print(char(1)); // печатаем символ на первой строке

   LCD.setCursor(0,1);
   LCD.print("Temp:");
   LCD.print(t);

   delay(100);
}

код датчика температуры и влажности

их надо объединить в один

В вашем случае все просто - соединяете вместе функции setup() обоих кодов, потом так же loop(). Ничего не забываете.
Функцию ReadSensor() просто копируете.

Пробуете, показываете в форум.

спасибо всем
код сработал
иду тестировать

может “скомпилировался”? Учитесь выражаться правильно, а то вас никто не поймет

Хоть и понедельник, но 13-ое.

3 лайка