#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#include <Servo.h>
#define DEBUG false //if card code learning then true else false
#define Serial if(DEBUG)Serial
#define Trash_Button 2
#define servo_Trash 7
#define Fan_Button 3
#define Fan_Relay 4
#define Backlight_Button 5
#define Backlight_Led 6
#define DHTPIN 8
#define DHTTYPE DHT22
#define I2C_ADDR 0x27
#define LCD_COLUMNS 20
#define LCD_LINES 4
#define DEBOUNCE_DELAY 20
#define SERVO_MAX_ANGLE 160
#define SERVO_MIN_ANGLE 10
Servo servo;
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
DHT dht(DHTPIN, DHTTYPE);
uint8_t Fan_Status = 0, Fan_lastStatus = 0;
uint8_t Backlight_Status = 0, Backlight_lastStatus = 0;
uint8_t Trash_Status = 0, Trash_lastStatus = 0, servo_Angle;
uint16_t now_Time, last_Time = 0, interval = 2000;
uint8_t dht_Read_Enable = 1;
float h, t;
void setup()
{
Serial.begin(115200);
pinMode(Trash_Button, INPUT);
pinMode(Fan_Button, INPUT);
pinMode(Backlight_Button, INPUT);
pinMode(Fan_Relay, OUTPUT);
digitalWrite(Fan_Relay, LOW);
servo.attach(servo_Trash);
servo.write(SERVO_MIN_ANGLE);
lcd.init();
lcd.backlight();
dht.begin();
}
/*
* Çöp kutusu için zaman konulabilir.
*/
void loop()
{
now_Time = millis();
if (now_Time - last_Time >= interval)
{
last_Time = now_Time;
dht_Read_Enable = 1;
}
if (dht_Read_Enable = 1)
{
h = dht.readHumidity();
t = dht.readTemperature();
dht_Read_Enable = 0;
if (isnan(h) || isnan(t))
{
Serial.println(F("Failed to read from DHT sensor!"));
lcd.setCursor(0, 0);
lcd.print("Failed to read");
lcd.setCursor(0, 1);
lcd.print("from DHT sensor!");
return;
}
}
if (digitalRead(Fan_Button) == 0 && Fan_lastStatus == 0)
{
delay(DEBOUNCE_DELAY);
while(digitalRead(Fan_Button) == 0)
{
Fan_Status = 1;
}
}
else if (digitalRead(Fan_Button) == 0 && Fan_lastStatus == 1)
{
delay(DEBOUNCE_DELAY);
while(digitalRead(Fan_Button) == 0)
{
Fan_Status = 0;
}
}
Fan_lastStatus = Fan_Status;
if (digitalRead(Trash_Button) == 0 && Trash_lastStatus == 0)
{
delay(DEBOUNCE_DELAY);
while(digitalRead(Trash_Button) == 0)
{
Trash_Status = 1;
servo_Angle = SERVO_MAX_ANGLE;
}
}
else if (digitalRead(Trash_Button) == 0 && Trash_lastStatus == 1)
{
delay(DEBOUNCE_DELAY);
while(digitalRead(Trash_Button) == 0)
{
Trash_Status = 0;
servo_Angle = SERVO_MIN_ANGLE;
}
}
Trash_lastStatus = Trash_Status;
if (digitalRead(Backlight_Button) == 0 && Backlight_lastStatus == 0)
{
delay(DEBOUNCE_DELAY);
while(digitalRead(Backlight_Button) == 0)
{
Backlight_Status = 1;
}
}
else if (digitalRead(Backlight_Button) == 0 && Backlight_lastStatus == 1)
{
delay(DEBOUNCE_DELAY);
while(digitalRead(Backlight_Button) == 0)
{
Backlight_Status = 0;
}
}
Backlight_lastStatus = Backlight_Status;
digitalWrite(Fan_Relay, Fan_Status);
servo.write(servo_Angle);
digitalWrite(Backlight_Led, Backlight_Status);
Serial.print(F("Humidity: "));
Serial.print(h);
Serial.print(F("% Temperature: "));
Serial.print(t);
Serial.println(F("°C "));
//Temperature
lcd.setCursor(0, 0);
lcd.print("T:");
lcd.setCursor(2, 0);
lcd.print(t);
lcd.setCursor(7, 0);
lcd.print((char)(223));//Degrees Symbol
lcd.setCursor(8, 0);
lcd.print("C");
//Humdity
lcd.setCursor(11, 0);
lcd.print("H:");
lcd.setCursor(13, 0);
lcd.print(h);
lcd.setCursor(17, 0);
lcd.print("%");
//Trash Status
lcd.setCursor(0, 1);
lcd.print("Trash is ");
lcd.setCursor(9, 1);
if (Trash_Status == 1)
{
lcd.print("ON ");
}
else
{
lcd.print("OFF");
}
//Fan Status
lcd.setCursor(0, 2);
lcd.print("Fan is ");
lcd.setCursor(7, 2);
if (Fan_Status == 1)
{
lcd.print("ON ");
}
else
{
lcd.print("OFF");
}
//Back Light Status
lcd.setCursor(0, 3);
lcd.print("Backlight is ");
lcd.setCursor(13, 3);
if (Backlight_Status == 1)
{
lcd.print("ON ");
}
else
{
lcd.print("OFF");
}
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
servo1:GND
servo1:V+
servo1:PWM
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL
relay1:VCC
relay1:GND
relay1:IN
relay1:NC
relay1:COM
relay1:NO
dht1:VCC
dht1:SDA
dht1:NC
dht1:GND
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
btn2:1.l
btn2:2.l
btn2:1.r
btn2:2.r
btn3:1.l
btn3:2.l
btn3:1.r
btn3:2.r
r1:1
r1:2
r2:1
r2:2
r3:1
r3:2
led1:A
led1:C
r4:1
r4:2
led2:A
led2:C
r5:1
r5:2
relay2:VCC
relay2:GND
relay2:IN
relay2:NC
relay2:COM
relay2:NO