РЕШЕНО Работа с dht11 и непонятное выполнение условий

Тема в разделе "Arduino & Shields", создана пользователем Ukt001, 30 янв 2021.

  1. Ukt001

    Ukt001 Нуб

    При влажности воздуха меньше 30 должно выводиться "Low humidity", при влажности больше 50 "High humidity", ну а больше 30 и меньше 50 - "Normal Humidity". Но вот не задача. Когда на дисплее должна быть надпись "Low humidity", мерцает "Normal Humidity", а под ней очень тускло видно "Low humidity".

    Код (C++):
    #include <Adafruit_Sensor.h>
    #include <LiquidCrystal_I2C.h>
    #include <DHT.h>
    #include <DHT_U.h>

    LiquidCrystal_I2C lcd(0x27, 20, 4);



    #define DHTPIN 2

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

    void setup() {
      lcd.init();
      lcd.backlight();
      dht.begin();
    }

    void loop() {
      // Ожидание 2 секунды перед началом цикла
      if(millis() > 2000) {
        // Считываем влажность
        float h = dht.readHumidity();
        // Считываем температуру
        float t = dht.readTemperature();

        // Проверяем измерения.
        if (isnan(h) || isnan(t)) {
          lcd.print(F("UNKNOWN ERROR"));
          return;
        }
        // ТЕМПЕРАТУРА ВОЗДУХА
        // Если меньше 20 - Cold. Если больше 28 - Hot. Если больше 20 и меньше 28 - Normal.
        if (t < 20) {
            lcd.setCursor(0, 2);
            lcd.print("Cold");
         
          }
        if (t > 28) {
            lcd.setCursor(0, 2);
            lcd.print("Hot");
          }
        if (t > 20 || t < 28) {
            lcd.setCursor(0, 2);
            lcd.print("Normal Temperature");
          }

        // ВЛАЖНОСТЬ ВОЗДУХА
        //Если меньше 30 - Low humidity. Если больше 50 - High humidity. Если меньше 50 и больше 30 - Normal humidity
        if (h < 30) {
            lcd.setCursor(0, 3);
            lcd.print("Low humidity");
         
          }
        if (h > 50) {
            lcd.setCursor(0, 3);
            lcd.print("High humidity");
          }
        if (h > 30 || h < 50) {
            lcd.setCursor(0, 3);
            lcd.print("Normal humidity");
          }  
        lcd.setCursor(0,0);
        lcd.print(t);
        lcd.setCursor(0,1);
        lcd.print(h);
       
    }
    }
     
  2. Airbus

    Airbus Радиохулиган Модератор

    А кто будет за Вас писать else в конструкции if else?
     
    Ukt001 нравится это.
  3. AlexU

    AlexU Гуру

    Условия лучше привести к виду:
    Код (C++):
    if (h < 30) {
            .....................
          }
    else if (h > 50) {
            ......................
          }
    else {
            ......................
          }
    Это касается и температуры и влажности.
     
    Ukt001 и Airbus нравится это.
  4. Ukt001

    Ukt001 Нуб

    Извините за столь глупый вопрос, не досмотрел.:( Спасибо.