Проблема с условием if

Итак, мой проект включает определение температуры в помещении с помощью датчика dth11. моя идея состоит в том, чтобы добавить 3 светодиодных индикатора, каждый из которых представляет температуру, если холодно, жарко или идеально.

проводка и кодирование выполнены, и все работает. Однако у меня возникла проблема: идеальная температура всегда включена, независимо от того, жарко или холодно. пример: если температура низкая, светодиод холода будет мигать, а светодиод идеальной температуры будет гореть.

#include <Adafruit_Sensor.h>
#include <DHT.h>
#define DHTPIN A0
#define DHTTYPE DHT11
#define LED_TOO_COLD 6
#define LED_PERFECT 8
#define LED_TOO_HOT 7
DHT dht(DHTPIN, DHTTYPE);
void setup() {
  Serial.begin(9600);
  Serial.println("DHT11 test!");

  dht.begin();
}

void loop() {

  pinMode (6 , OUTPUT);
  pinMode (7 , OUTPUT);
  pinMode (8 , OUTPUT);
  delay(2000);

  float h = dht.readHumidity();
  float t = dht.readTemperature();
  float f = dht.readTemperature(true);


  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  Serial.print("Humidity: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.println(" *C ");
  if (t < 22) {
    Serial.println("Too cold!");
    digitalWrite(6, HIGH);
    digitalWrite(7, LOW);
    digitalWrite(8, LOW);
    delay (2000);
  }
   if (t >26) {
    Serial.println("Too hot!");
    digitalWrite(7, HIGH);
    digitalWrite(6, LOW);
    digitalWrite(8, LOW);
    delay (2000);


  } else {
    Serial.println("Perfect temperature!");
    digitalWrite(8, HIGH);
    digitalWrite(6, LOW);
    digitalWrite(7, LOW);
    delay (2000);
  }

}

, 👍1


1 ответ


1

во-первых, переместите настройки pinMode() в раздел setup.

в вашем коде при температуре 21 активными контактами будут 6 и 8. вам следует переписать код следующим образом:

1:

if (t < 22) {
  ... это холодная температура ...
} else if (t > 26) {
  ... это жаркая температура ...
} else {
  ... это не температура ...
}

2:

if (t < 22) {
... его холодная температура ...
}
if (t > 26) {
... жарко...
}
if (t >= 22 && t <= 26) {
... это ни темп ...
}

и мой вам небольшой совет, перепишите так, читабельнее

digitalWrite(6, HIGH);
digitalWrite(7, LOW);
digitalWrite(8, LOW);

digitalWrite(6, LOW);
digitalWrite(7, HIGH);
digitalWrite(8, LOW);

digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, HIGH);

визуальное изменение ENUMS (например, LOW или HIGH) более заметно, чем изменение чисел (6/7/8)

,