Arduino код для измерение влажности и температуры вывода их на LCD дисплей
Можно ли улучшить код?
Если кратко то код для измерение влажности и температуры вывода их на LCD дисплей и в случае если температура огромная или маленькая то включается одно из реле.
Весь код:
#include <DHT.h>
#include <Wire.h> // библиотека для управления устройствами по I2C
#include <LiquidCrystal_I2C.h> // подключаем библиотеку для QAPASS 1602
#define DHTTYPE DHT22
#define DHTPIN 3
#define relayPin_warm 2
#define relayPin_cold 11
DHT dht(DHTPIN, DHTTYPE);
float hum;
float temp;
byte temp_status = 0;
unsigned long timer = 0;
/*
start - temp_status = 0
too cold - temp_status = 1
too warm - temp_status = 2
*/
LiquidCrystal_I2C lcd(0x27,16,2);
void setup() {
Serial.begin(9600);
pinMode(relayPin_warm, OUTPUT);
pinMode(relayPin_cold, OUTPUT);
dht.begin();
lcd.begin(16, 2);
}
void loop(){
if (millis() - timer > 1000) {
timer = millis();
hum = dht.readHumidity();
temp = dht.readTemperature();
if (temp < 18) {
if (temp_status != 1) {
if (temp_status == 2) {
digitalWrite(relayPin_warm, LOW); // disable warm relay
}
digitalWrite(relayPin_cold, HIGH); // enable cold relay
temp_status = 1;
}
}
else if (temp > 21) {
if (temp_status != 2) {
if (temp_status == 1) {
digitalWrite(relayPin_cold, LOW); // disable cold relay
}
digitalWrite(relayPin_warm, HIGH); // enable warm relay
temp_status = 2;
}
}
else {
if (temp_status == 1) {
digitalWrite(relayPin_cold, LOW); // disable cold relay
}
else if (temp_status == 2) {
digitalWrite(relayPin_warm, LOW); // disable warm relay
}
temp_status = 0;
}
lcd.setCursor(0, 0); //
lcd.print("TEMP: "); //
lcd.print(temp); //
lcd.print('C'); // working with
lcd.setCursor(0, 1); // lcd dispaly
lcd.print("HUM: "); //
lcd.print(hum); //
lcd.print('%'); //
}
}
Ответы (1 шт):
Автор решения: Alex F
→ Ссылка
Повторная запись одного и того же значения на выходной пин не имеет отрицательных последствий - с точки зрения устройства, подключенного к этому пину, ничего не произошло. Поэтому можно избавиться от переменной temp_status:
// ...
temp = dht.readTemperature();
digitalWrite(relayPin_cold, (temp < 18 ? HIGH : LOW));
digitalWrite(relayPin_warm, (temp > 21 ? HIGH : LOW));
lcd.setCursor(0, 0);
// ...