Проблема с условием 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);
}
}
@Faisal, 👍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)
- Возможно ли, чтобы температура тела, кровяное давление, оксиметр и датчик частоты пульса находились только в одном Arduino UNO?
- Что выбрать между датчиками температуры и влажности: AM230x или DHT22?
- (Код ультразвукового датчика: такого файла или каталога нет)
- BMP280 возвращает 0
- Несколько неблокирующих таймеров обратного отсчета?
- Датчик HC-SR505 PIR выдает только HIGH уровень
- Колебания показаний датчика температуры LM35 (+- 5°C) с Arduino UNO
- Отправка данных из ESP8266 в PHP