/* Hello Wokwi! */
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#include <EEPROM.h>
#define DHTPIN 2
#define HEATER 3
#define HUMIDIFIER 4
#define FAN1 5
#define FAN2 6
#define LIGHT 7
#define DIFF 0.1
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 20, 4);
byte coolerIcon[] = { B00000, B10011, B11010, B00100, B01011, B11001, B00000, B00000};
byte termIcon[8]={B00100, B01010, B01010, B01110, B01110, B11111, B11111, B01110}; //icon for termometer
byte dropIcon[8]={B00100, B00100, B01010, B01010, B10001, B10001, B10001, B01110};//icon for water droplet
byte customChar[] = { B01100, B11000, B11001, B11111, B11110, B00000, B00000, B00000};
byte Char2[] = {
B00000,
B00000,
B00000,
B00000,
B00001,
B00111,
B01010,
B01100
};
byte heaterChar[] = { B00110,
B01001,
B10101,
B10101,
B10101,
B10110,
B10000,
B00000};
void setup() {
pinMode(HEATER, OUTPUT);
pinMode(HUMIDIFIER, OUTPUT);
pinMode(FAN1, OUTPUT);
pinMode(FAN2, OUTPUT);
pinMode(LIGHT, OUTPUT);
lcd.init();
lcd.createChar(0, coolerIcon);
lcd.createChar(1, termIcon);
lcd.createChar(2, dropIcon);
lcd.createChar(4, Char2);
lcd.createChar(5, customChar);
lcd.createChar(6, heaterChar);
lcd.backlight();
lcd.setCursor(1, 0);
dht.begin();
}
byte heating = 0;
byte cooling = 0;
float setTemp = 37.8;
float setHum = 60;
void loop() {
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Check if any reads failed and exit early (to try again).
if (isnan(temperature) || isnan(humidity)) {
lcd.setCursor(0, 0);
lcd.print(F("DHT sensor error"));
return;
}
//lcd.print(F("Humidity: "));
//lcd.print(humidity);
//lcd.print(F("% Temperature: "));
lcd.setCursor(0, 0);
lcd.print(char(1));
lcd.print(temperature,1);
lcd.print((char)223);
lcd.print(' ');
lcd.setCursor(8, 0);
lcd.print(char(2));
lcd.print(humidity,0);
lcd.print("% ");
lcd.setCursor(1,1);
lcd.print(char(4));
lcd.print(char(5));
lcd.print(char(0));
lcd.print(millis()/1000);
{
if (temperature <= setTemp - DIFF){ // właczenie sie przkaznika gdy temp otoczenia jest mniejsza od minmalnej temp oraz mniejsza od maksymalnej
digitalWrite(HEATER, LOW);
}
else if (temperature >= setTemp + DIFF){ // wylączenie sie przekaznika gdy jest rowna lub wieksza maksymalnej
digitalWrite(HEATER, HIGH);
}
}
delay(999);
}