/*
FAN
HUMIDIFIER
Egg Turner - Automatic
Days
*/
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
#include "DHT.h"
Adafruit_SSD1306 lcd(128, 64, &Wire, 4);
#define DHTPIN 7
#define DHTTYPE DHT22
#define btnUp 4
#define btnOk 8
#define btnDown 12
#define btnBack 13
#define eggTurner 2
#define lamp 3
#define fan 5
#define humidifier 6
boolean statusBtnUp = false;
boolean statusBtnOk = false;
boolean statusBtnDown = false;
boolean statusBtnBack = false;
boolean statusEggBtnUp = false;
boolean statusEggBtnOk = false;
boolean statusEggBtnDown = false;
boolean statusEggBtnBack = false;
boolean UP = false;
boolean OK = false;
boolean DOWN = false;
boolean BACK = false;
DHT dht(DHTPIN, DHTTYPE);
unsigned long timeNow = 0;
unsigned long timeLast = 0;
float tempset = 35;
float humset = 50;
float daysset = 0;
int page = 1;
int menuItem = 1;
int eggTItem = 1;
int eggAuto = 1;
void setup() {
dht.begin();
lcd.begin(SSD1306_SWITCHCAPVCC, 0x3C);
lcd.clearDisplay();
pinMode(btnUp, INPUT_PULLUP);
pinMode(btnOk, INPUT_PULLUP);
pinMode(btnDown, INPUT_PULLUP);
pinMode(btnBack, INPUT_PULLUP);
pinMode(DHTPIN, INPUT);
//Output for Relays
pinMode(eggTurner, OUTPUT);
pinMode(lamp, OUTPUT);
pinMode(fan, OUTPUT);
pinMode(humidifier, OUTPUT);
Serial.begin(9600);
}
void loop() {
appear();
statusBtnUp = digitalRead(btnUp);
statusBtnOk = digitalRead(btnOk);
statusBtnDown = digitalRead(btnDown);
statusBtnBack = digitalRead(btnBack);
pressed_Up();
pressed_Ok();
pressed_Down();
pressed_Back();
// button up
// page 1 (Main Menu)
if (UP && page == 1) {
UP = false;
menuItem --;
if (menuItem < 1)menuItem = 3;
}
// page 4(Egg Turner)
if (UP && page == 4) {
UP = false;
eggTItem --;
if (eggTItem < 1)eggTItem = 2;
}
//button down
// page 1 (Main Menu)
if (DOWN && page == 1) {
DOWN = false;
menuItem ++;
if (menuItem > 3)menuItem = 1;
}
// page 4 (EggTurner)
if (DOWN && page == 4) {
DOWN = false;
eggTItem ++;
if (eggTItem > 2)eggTItem = 1;
}
//button ok
if (OK) {
OK = false;
if (page == 1 && menuItem == 1) {
page = 2;
} else if (page == 1 && menuItem == 2) {
page = 3;
} else if (page == 1 && menuItem == 3) {
page = 4;
}
}
//button back
if (BACK) {
BACK = false;
if (page == 2 || page == 3 || page == 4) {
page = 1;
}
eggAuto = 0;
}
//delay(1000);
}
//--------------------------------------------------------------------------------
void pressed_Up() {
if (statusBtnUp != statusEggBtnUp) {
if (statusBtnUp == 0) {
UP = true;
}
delay(50);
}
statusEggBtnUp = statusBtnUp;
}
void pressed_Ok() {
if (statusBtnOk != statusEggBtnOk) {
if (statusBtnOk == 0) {
OK = true;
}
delay(50);
}
statusEggBtnOk = statusBtnOk;
}
void pressed_Down() {
if (statusBtnDown != statusEggBtnDown) {
if (statusBtnDown == 0) {
DOWN = true;
}
delay(50);
}
statusEggBtnDown = statusBtnDown;
}
void pressed_Back() {
if (statusBtnBack != statusEggBtnBack) {
if (statusBtnBack == 0) {
BACK = true;
}
delay(50);
}
statusEggBtnBack = statusBtnBack;
}
//----------------------------------------------------------------------------
//everything that appears on the LCD is in this function
void appear() {
float hum = dht.readHumidity();
float temp = dht.readTemperature();
if (page == 1) {
lcd.clearDisplay();
lcd.setTextSize(1);
lcd.setTextColor(WHITE);
lcd.setCursor(26, 0);
lcd.print("Egg Incubator");
if (menuItem == 1) {
lcd.setCursor(5, 17);
lcd.setTextColor(WHITE);
lcd.print("> Temperature");
} else {
lcd.setCursor(5, 17);
lcd.setTextColor(WHITE);
lcd.print(" Temperature");
}
if (menuItem == 2) {
lcd.setCursor(5, 27);
lcd.setTextColor(WHITE);
lcd.print("> Humidity");
} else {
lcd.setCursor(5, 27);
lcd.setTextColor(WHITE);
lcd.print(" Humidity");
}
if (menuItem == 3) {
lcd.setCursor(5, 37);
lcd.setTextColor(WHITE);
lcd.print("> Egg Turner");
} else {
lcd.setCursor(5, 37);
lcd.setTextColor(WHITE);
lcd.print(" Egg Turner");
}
} else if (page == 2) {
lcd.clearDisplay();
lcd.setTextSize(1);
lcd.setTextColor(WHITE);
lcd.setCursor(18, 0);
lcd.print("Set Temperature");
lcd.setTextSize(2);
lcd.setCursor(27,15);
lcd.print(tempset);
lcd.print("C ");
lcd.setTextSize(1);
lcd.setCursor(9, 35);
lcd.print("Current Temperature");
lcd.setCursor(30, 50);
lcd.print(temp);
if (digitalRead(btnUp) == LOW)
{tempset = tempset + 0.1;
}
if (digitalRead(btnDown) == LOW && tempset > 30.1)
{tempset = tempset - 0.1;
}
if (tempset >= temp){
digitalWrite(lamp, HIGH);
} else if(tempset < temp){
digitalWrite(lamp, LOW);
}
} else if (page == 3) {
lcd.clearDisplay();
lcd.setTextSize(1);
lcd.setTextColor(WHITE);
lcd.setCursor(25, 0);
lcd.print("Set Humidity");
lcd.setTextSize(2);
lcd.setCursor(27,15);
lcd.print(humset);
lcd.print("% ");
lcd.setTextSize(1);
lcd.setCursor(14, 35);
lcd.print("Current Humidity");
lcd.setCursor(30, 50);
lcd.print(hum);
if (digitalRead(btnUp) == LOW)
{humset = humset + 0.5;
}
if (digitalRead(btnDown) == LOW && humset > 45)
{humset = humset - 0.5;
}
if (humset >= hum){
digitalWrite(fan, HIGH);
digitalWrite(humidifier, HIGH);
}
else if(humset < hum){
digitalWrite(fan, LOW);
digitalWrite(humidifier, LOW);
}
} else if (page == 4) {
lcd.clearDisplay();
lcd.setTextSize(1);
lcd.setTextColor(WHITE);
lcd.setCursor(15, 0);
lcd.print("Egg Turner Status");
if (eggTItem == 1) {
lcd.setCursor(5, 17);
lcd.setTextColor(WHITE);
lcd.print("> On");
delay(50);
if (digitalRead(btnOk) == LOW)
{digitalWrite(eggTurner, HIGH);
delay(50);
}
} else {
lcd.setCursor(5, 17);
lcd.setTextColor(WHITE);
lcd.print(" On");
}
if (eggTItem == 2) {
lcd.setCursor(5, 27);
lcd.setTextColor(WHITE);
lcd.print("> Off");
delay(50);
if (digitalRead(btnOk) == LOW) {
digitalWrite(eggTurner, LOW);
delay(50);
}
} else {
lcd.setCursor(5, 27);
lcd.setTextColor(WHITE);
lcd.print(" Off");
}
}
lcd.display();
}