#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
#include <DHT.h>
#include <Wire.h>
#include "SparkFun_External_EEPROM.h"
#define TX_Enable 2
#define Warm 3
#define Heat 4
#define accLight 5
#define Cool 6
#define DHTPIN 7
#define Hum 8
#define Red 9
#define deHum 10
#define Water 11
#define levelEna 12
// #define bb 13
#define CTpot A0 // 14
#define SW 15
// #define cc 16
#define levelRead A3 // 17
// #define SDA 18
// #define SCL 19
// #define dd 20
// #define ee 21
long buttonTimer = 0;
long longPressTime = 2000;
bool SW_Active;
bool longPressActive = false;
int Button;
DHT dht(DHTPIN, DHT22);
float humidity;
float temperatureC;
float temperatureF;
unsigned int dhtTime;
long idleTime = 2200;
long readTime = 10;
unsigned long previousDHT = 0;
ExternalEEPROM ROM;
LiquidCrystal_I2C lcd(0x27, 16, 2);
RTC_DS1307 rtc;
char daysOfTheWeek[7][24] = {
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday"
};
// Timer_1 variables
unsigned int a;
int blink;
long offTime = 1000;
long onTime = 1000;
unsigned long previousMillis = 0;
// Timer_2 variables
int trigger;
int cycle;
const long duration_2 = 10000; // milliseconds
long offset_2;
// misc variables
unsigned long currentMillis;
int q;
int mode;
int seq;
int b;
int u;
int error;
bool isDay;
int page;
int watchdog;
bool isConfig;
// Serial
int address;
char data[64] = {0};
int y100;
int y200;
int y[16];
float z[10];
int packet1 = 21;
int packet2 = 22;
int packet3 = 23;
int packet4 = 24;
int packet5 = 25;
int packet6 = 26;
int packet7 = 27;
int packet8 = 28;
int comRelease = 29;
int commandStart = 30;
int commandStop = 40;
int commandATO = 41;
int commandAWC = 42;
int timecodeSec = 55;
int commandConfig = 56;
int commandDefault = 57;
int commandEStop = 91;
int typeIdent = 300;
void setup() {
pinMode(TX_Enable, OUTPUT);
pinMode(Warm, OUTPUT);
pinMode(Cool, OUTPUT);
pinMode(Red, OUTPUT);
pinMode(SW, INPUT_PULLUP);
Serial.begin(9600);
Serial.println("/");
dht.begin();
lcd.init();
lcd.backlight();
if (! rtc.begin()) {
while(1) {
lcd.setCursor(0,0);
lcd.print("Couldn't find RTC");
lcd.noBacklight();
delay(1000);
lcd.backlight();
delay(1000);
}
}
else {
lcd.setCursor(0,0);
lcd.print("RTC BEGIN");
}
// rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
DateTime now = rtc.now();
delay(1000);
Wire.begin();
ROM.setMemoryType(256);
if (! ROM.begin()) {
while(1) {
lcd.setCursor(0,0);
lcd.print("Couldn't find EEPROM");
lcd.noBacklight();
delay(1000);
lcd.backlight();
delay(1000);
}
}
else {
lcd.setCursor(0,0);
lcd.print("EEPROM BEGIN");
lcd.setCursor(0,1);
lcd.print(ROM.length());
}
delay(1000);
lcd.clear();
delay(20);
dhtTime = HIGH;
a = LOW;
blink = 0;
trigger = 0;
cycle = 0;
b = 0;
u = 0;
error = 0;
currentMillis = millis();
isDay = true;
// seq = 500;
page = 200;
watchdog = 0;
}
void loop() {
while(seq == 500) {
DateTime now = rtc.now();
int day;
int month;
int year;
int hour;
int minute;
int second;
int dayHour;
int dayMinute;
int nightHour;
int nightMinute;
int CT;
int dayBrightness;
int nightBrightness;
int dayTemp;
int nightTemp;
int splitTemp;
int dayHum;
int nightHum;
int splitHum;
bool acc;
bool waterRefill;
bool nightLight;
int paragraph;
int j;
float k;
if(page == 200) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Reading ROM*****");
ROM.get(10, dayHour);
Serial.println(dayHour);
ROM.get(11, dayMinute);
Serial.println(dayMinute);
ROM.get(12, nightHour);
Serial.println(nightHour);
ROM.get(13, nightMinute);
Serial.println(nightMinute);
ROM.get(20, dayTemp);
Serial.println(dayTemp);
ROM.get(21, nightTemp);
Serial.println(nightTemp);
ROM.get(22, splitTemp);
Serial.println(splitTemp);
ROM.get(23, dayHum);
Serial.println(dayHum);
ROM.get(24, nightHum);
Serial.println(nightHum);
ROM.get(25, splitHum);
Serial.println(splitHum);
ROM.get(230, j);
if(j == 0) {
acc = false;
}
if(j == 1) {
acc = true;
}
Serial.println(acc);
j = 0;
ROM.get(231, j);
if(j == 0) {
waterRefill = false;
}
if(j == 1) {
waterRefill = true;
}
Serial.println(waterRefill);
j = 0;
ROM.get(232, j);
if(j == 0) {
nightLight = false;
}
if(j == 1) {
nightLight = true;
}
Serial.println(nightLight);
j = 0;
ROM.get(14, CT);
Serial.println(CT);
ROM.get(16, dayBrightness);
Serial.println(dayBrightness);
ROM.get(18, nightBrightness);
Serial.println(nightBrightness);
delay(1000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Complete********");
delay(1000);
lcd.clear();
page = 0;
}
// main menu
if(page == 0) {
// button();
int i;
lcd.setCursor(0,0);
lcd.print("Config:");
lcd.setCursor(0,1);
if(i == 1) {
lcd.print("Date and Time ");
}
else if(i == 2) {
lcd.print("D/N Cycle ");
}
else if(i == 3) {
lcd.print("Climate ");
}
else if(i == 4) {
lcd.print("Lighting ");
}
else if(i == 5) {
lcd.print("Options ");
}
else if(i == 6) {
lcd.print("Save and Exit ");
}
i = map(analogRead(CTpot), 0, 1023, 1, 7);
if(i > 6) {
i = 6;
}
if((digitalRead(SW) == LOW) && (watchdog == 0)){
watchdog = 1;
delay(20);
}
else if((digitalRead(SW) == LOW) && (watchdog == 2)){
watchdog = 2;
}
else if((digitalRead(SW) == HIGH) && (watchdog == 2)){
watchdog = 0;
}
else if((digitalRead(SW) == HIGH) && (watchdog == 1)){
if(i == 1) {
page = 1;
paragraph = 1;
watchdog = 0;
lcd.clear();
}
else if(i == 2) {
page = 4;
paragraph = 1;
watchdog = 0;
lcd.clear();
}
else if(i == 3) {
page = 5;
paragraph = 1;
watchdog = 0;
lcd.clear();
}
else if(i == 4) {
page = 7;
paragraph = 1;
watchdog = 0;
lcd.clear();
}
else if(i == 5) {
page = 9;
paragraph = 1;
watchdog = 0;
lcd.clear();
}
else if(i == 6) {
page = 100;
paragraph = 1;
watchdog = 0;
lcd.clear();
}
}
}
// Set date and time
if(page == 1) {
lcd.setCursor(0,0);
lcd.print("Date");
if(paragraph == 1) {
lcd.setCursor(0,1);
lcd.print("Month: ");
if(month < 10) {
lcd.print("0");
lcd.print(month);
}
else {
lcd.print(month);
}
month = map(analogRead(CTpot), 0, 1023, 1, 12);
if(digitalRead(SW) == LOW){
watchdog = 1;
}
else if((digitalRead(SW) == HIGH) && (watchdog == 1)){
lcd.clear();
watchdog = 0;
paragraph = 2;
}
}
if(paragraph == 2) {
lcd.setCursor(0,1);
lcd.print("Day: ");
if(day < 10) {
lcd.print("0");
lcd.print(day);
}
else {
lcd.print(day);
}
if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
day = map(analogRead(CTpot), 0, 1023, 1, 31);
}
else if(month == 4 || month == 6 || month == 9 || month == 11) {
day = map(analogRead(CTpot), 0, 1023, 1, 30);
}
else if(month == 2) {
day = map(analogRead(CTpot), 0, 1023, 1, 29);
}
if(digitalRead(SW) == LOW){
watchdog = 1;
}
else if((digitalRead(SW) == HIGH) && (watchdog == 1)){
lcd.clear();
watchdog = 0;
paragraph = 3;
}
}
if(paragraph == 3) {
lcd.setCursor(0,1);
lcd.print("Year: ");
lcd.print(year);
year = map(analogRead(CTpot), 0, 1023, 2025, 2099);
if(digitalRead(SW) == LOW){
watchdog = 1;
}
else if((digitalRead(SW) == HIGH) && (watchdog == 1)){
lcd.clear();
watchdog = 0;
page = 2;
paragraph = 1;
}
}
}
if(page == 2) {
lcd.setCursor(0,0);
lcd.print("Time");
lcd.setCursor(0,1);
if(hour < 10) {
lcd.print("0");
lcd.print(hour);
}
else {
lcd.print(hour);
}
lcd.print(":");
if(minute < 10) {
lcd.print("0");
lcd.print(minute);
}
else {
lcd.print(minute);
}
lcd.print(":");
if(second < 10) {
lcd.print("0");
lcd.print(second);
}
else {
lcd.print(second);
}
if(paragraph == 1) {
lcd.setCursor(8,0);
lcd.print("HOUR");
hour = map(analogRead(CTpot), 0, 1023, 0, 23);
if(digitalRead(SW) == LOW){
watchdog = 1;
}
else if((digitalRead(SW) == HIGH) && (watchdog == 1)){
lcd.clear();
watchdog = 0;
paragraph = 2;
}
}
if(paragraph == 2) {
lcd.setCursor(8,0);
lcd.print("MINUTE");
minute = map(analogRead(CTpot), 0, 1023, 0, 59);
if(digitalRead(SW) == LOW){
watchdog = 1;
}
else if((digitalRead(SW) == HIGH) && (watchdog == 1)){
lcd.clear();
watchdog = 0;
paragraph = 3;
}
}
if(paragraph == 3) {
lcd.setCursor(8,0);
lcd.print("SECOND");
second = map(analogRead(CTpot), 0, 1023, 0, 59);
if(digitalRead(SW) == LOW){
watchdog = 1;
}
else if((digitalRead(SW) == HIGH) && (watchdog == 1)){
lcd.clear();
watchdog = 0;
paragraph = 1;
page = 3;
}
}
}
// confirm date and time settings
if(page == 3) {
lcd.setCursor(0,0);
if(hour < 10) {
lcd.print("0");
lcd.print(hour);
}
else {
lcd.print(hour);
}
lcd.print(":");
if(minute < 10) {
lcd.print("0");
lcd.print(minute);
}
else {
lcd.print(minute);
}
lcd.print(":");
if(second < 10) {
lcd.print("0");
lcd.print(second);
}
else {
lcd.print(second);
}
lcd.setCursor(0,1);
lcd.print(now.day());
lcd.print(",");
lcd.print(now.month());
lcd.print(",");
lcd.print(now.year());
button();
if(digitalRead(SW) == LOW){
watchdog = 1;
}
else if((digitalRead(SW) == HIGH) && (watchdog == 1)){
lcd.clear();
page = 1;
watchdog = 0;
}
if(Button == 11){
rtc.adjust(DateTime(year, month, day, hour, minute, second));
lcd.clear();
watchdog = 2;
paragraph = 1;
page = 0;
delay(20);
}
}
// set Day time
if(page == 4) {
lcd.setCursor(0,1);
if(dayHour < 10) {
lcd.print("0");
lcd.print(dayHour);
}
else {
lcd.print(dayHour);
}
lcd.print(":");
if(dayMinute < 10) {
lcd.print("0");
lcd.print(dayMinute);
}
else {
lcd.print(dayMinute);
}
if(paragraph == 1) {
lcd.setCursor(0,0);
lcd.print("Day HOUR");
dayHour = map(analogRead(CTpot), 0, 1023, 0, 23);
if(digitalRead(SW) == LOW){
watchdog = 1;
}
else if((digitalRead(SW) == HIGH) && (watchdog == 1)){
lcd.clear();
watchdog = 0;
paragraph = 2;
}
}
if(paragraph == 2) {
lcd.setCursor(0,0);
lcd.print("Day MINUTE");
dayMinute = map(analogRead(CTpot), 0, 1023, 0, 59);
if(digitalRead(SW) == LOW){
watchdog = 1;
}
else if((digitalRead(SW) == HIGH) && (watchdog == 1)){
lcd.clear();
page = 6;
watchdog = 0;
paragraph = 1;
}
}
}
// set night time
if(page == 6) {
lcd.setCursor(0,1);
if(nightHour < 10) {
lcd.print("0");
lcd.print(nightHour);
}
else {
lcd.print(nightHour);
}
lcd.print(":");
if(nightMinute < 10) {
lcd.print("0");
lcd.print(nightMinute);
}
else {
lcd.print(nightMinute);
}
if(paragraph == 1) {
lcd.setCursor(0,0);
lcd.print("Night HOUR");
nightHour = map(analogRead(CTpot), 0, 1023, 0, 23);
if(digitalRead(SW) == LOW){
watchdog = 1;
}
else if((digitalRead(SW) == HIGH) && (watchdog == 1)){
lcd.clear();
watchdog = 0;
paragraph = 2;
}
}
if(paragraph == 2) {
lcd.setCursor(0,0);
lcd.print("Night MINUTE");
nightMinute = map(analogRead(CTpot), 0, 1023, 0, 59);
if(digitalRead(SW) == LOW){
watchdog = 1;
}
else if((digitalRead(SW) == HIGH) && (watchdog == 1)){
lcd.clear();
watchdog = 0;
paragraph = 3;
}
}
if(paragraph == 3) {
button();
lcd.setCursor(0,0);
if(dayHour < 10) {
lcd.print("0");
lcd.print(dayHour);
}
else {
lcd.print(dayHour);
}
lcd.print(":");
if(dayMinute < 10) {
lcd.print("0");
lcd.print(dayMinute);
}
else {
lcd.print(dayMinute);
}
if(digitalRead(SW) == LOW){
watchdog = 1;
}
else if((digitalRead(SW) == HIGH) && (watchdog == 1)){
lcd.clear();
page = 4;
paragraph = 1;
watchdog = 0;
}
if(Button == 11){
lcd.clear();
watchdog = 2;
paragraph = 1;
page = 0;
}
}
}
// set Day and Night Temperature and Humidity
if(page == 5) {
// Temperature
if(paragraph == 1) {
lcd.setCursor(0,0);
lcd.print("Temperature");
lcd.setCursor(0,1);
lcd.print("Day:");
if(dayTemp < 10) {
lcd.print("00");
lcd.print(dayTemp);
}
else if (dayTemp >= 10) {
if(dayTemp < 100) {
lcd.print("0");
lcd.print(dayTemp);
}
else if(dayTemp >= 100) {
lcd.print(dayTemp);
}
}
dayTemp = map(analogRead(CTpot), 0, 1023, 65, 120);
if(digitalRead(SW) == LOW){
watchdog = 1;
}
else if((digitalRead(SW) == HIGH) && (watchdog == 1)){
lcd.clear();
watchdog = 0;
paragraph = 2;
}
}
if(paragraph == 2) {
lcd.setCursor(0,0);
lcd.print("Temperature");
lcd.setCursor(0,1);
lcd.print("Night:");
if(nightTemp < 10) {
lcd.print("00");
lcd.print(nightTemp);
}
else if (nightTemp >= 10) {
if(nightTemp < 100) {
lcd.print("0");
lcd.print(nightTemp);
}
else if(nightTemp >= 100) {
lcd.print(nightTemp);
}
}
nightTemp = map(analogRead(CTpot), 0, 1023, 65, 120);
if(digitalRead(SW) == LOW){
watchdog = 1;
}
else if((digitalRead(SW) == HIGH) && (watchdog == 1)){
lcd.clear();
watchdog = 0;
paragraph = 3;
}
}
if(paragraph == 3) {
lcd.setCursor(0,0);
lcd.print("Temperature");
lcd.setCursor(0,1);
lcd.print("Tolerance: ");
if(splitTemp < 10) {
lcd.print("0");
lcd.print(splitTemp);
lcd.print("F");
}
else if(splitTemp >= 10) {
lcd.print(splitTemp);
lcd.print("F");
}
splitTemp = map(analogRead(CTpot), 0, 1023, 0, 10);
if(digitalRead(SW) == LOW){
watchdog = 1;
}
else if((digitalRead(SW) == HIGH) && (watchdog == 1)){
lcd.clear();
watchdog = 0;
paragraph = 4;
}
}
// Humidity
if(paragraph == 4) {
lcd.setCursor(0,0);
lcd.print("Humidity");
lcd.setCursor(0,1);
lcd.print("Day: ");
if(dayHum < 10) {
lcd.print("0");
lcd.print(dayHum);
lcd.print("%");
}
else if(dayHum >= 10) {
lcd.print(dayHum);
lcd.print("%");
}
dayHum = map(analogRead(CTpot), 0, 1023, 40, 98);
if(digitalRead(SW) == LOW){
watchdog = 1;
}
else if((digitalRead(SW) == HIGH) && (watchdog == 1)){
lcd.clear();
watchdog = 0;
paragraph = 5;
}
}
if(paragraph == 5) {
lcd.setCursor(0,0);
lcd.print("Humidity");
lcd.setCursor(0,1);
lcd.print("Night: ");
if(nightHum < 10) {
lcd.print("0");
lcd.print(nightHum);
lcd.print("%");
}
else if(nightHum >= 10) {
lcd.print(nightHum);
lcd.print("%");
}
nightHum = map(analogRead(CTpot), 0, 1023, 40, 98);
if(digitalRead(SW) == LOW){
watchdog = 1;
}
else if((digitalRead(SW) == HIGH) && (watchdog == 1)){
lcd.clear();
watchdog = 0;
paragraph = 6;
}
}
if(paragraph == 6) {
lcd.setCursor(0,0);
lcd.print("Humidity");
lcd.setCursor(0,1);
lcd.print("Tolerance: ");
if(splitHum < 10) {
lcd.print("0");
lcd.print(splitHum);
lcd.print("%");
}
else if(splitHum >= 10) {
lcd.print(splitHum);
lcd.print("%");
}
splitHum = map(analogRead(CTpot), 0, 1023, 0, 10);
if(digitalRead(SW) == LOW){
watchdog = 1;
}
else if((digitalRead(SW) == HIGH) && (watchdog == 1)){
lcd.clear();
watchdog = 0;
paragraph = 7;
}
}
// Confirm
if(paragraph == 7) {
button();
lcd.setCursor(0,0);
lcd.print("Confirm");
if(digitalRead(SW) == LOW){
watchdog = 1;
}
else if((digitalRead(SW) == HIGH) && (watchdog == 1)){
lcd.clear();
page = 5;
paragraph = 1;
watchdog = 0;
}
if(Button == 11){
lcd.clear();
watchdog = 2;
paragraph = 1;
page = 0;
}
}
}
// Configure lighting
if(page == 7) {
lcd.setCursor(0,0);
lcd.print("Lighting");
// set Color Temperature
if(paragraph == 1) {
lcd.setCursor(0,1);
lcd.print("CT: ");
lcd.print(CT);
lcd.print("K");
dayBrightness = 125;
CT = map(analogRead(CTpot), 0, 1023, 2700, 6500);
analogWrite(Cool, map(CT, 2700, 6500, 0, dayBrightness));
analogWrite(Warm, map(CT, 2700, 6500, dayBrightness, 0));
Serial.print(map(CT, 2700, 6500, 0, dayBrightness));
Serial.print(" ");
Serial.println(map(CT, 2700, 6500, dayBrightness, 0));
if(digitalRead(SW) == LOW){
watchdog = 1;
}
else if((digitalRead(SW) == HIGH) && (watchdog == 1)){
lcd.clear();
watchdog = 0;
paragraph = 2;
}
}
// set daytime brightness
if(paragraph == 2) {
lcd.setCursor(0,1);
lcd.print("Day Light: ");
if(dayBrightness < 10) {
lcd.print("00");
lcd.print(dayBrightness);
}
else if (dayBrightness >= 10) {
if(dayBrightness < 100) {
lcd.print("0");
lcd.print(dayBrightness);
}
else if(dayBrightness >= 100) {
lcd.print(dayBrightness);
}
}
dayBrightness = map(analogRead(CTpot), 0, 1023, 1, 255);
analogWrite(Cool, map(CT, 2700, 6500, 0, dayBrightness));
analogWrite(Warm, map(CT, 2700, 6500, dayBrightness, 0));
Serial.print(map(CT, 2700, 6500, 0, dayBrightness));
Serial.print(" ");
Serial.println(map(CT, 2700, 6500, dayBrightness, 0));
if(digitalRead(SW) == LOW){
watchdog = 1;
}
else if((digitalRead(SW) == HIGH) && (watchdog == 1)){
lcd.clear();
watchdog = 0;
paragraph = 3;
}
}
// Accessory lighting???
if(paragraph == 3) {
lcd.setCursor(0,1);
lcd.print("Acc Light: ");
if(acc == true) {
lcd.setCursor(11,1);
lcd.print("ON ");
digitalWrite(accLight, HIGH);
}
else if(acc == false) {
lcd.setCursor(11,1);
lcd.print("OFF");
digitalWrite(accLight, LOW);
}
if(analogRead(CTpot) <= 512) {
acc = false;
}
else if(analogRead(CTpot) > 512) {
acc = true;
}
if(digitalRead(SW) == LOW){
watchdog = 1;
}
else if((digitalRead(SW) == HIGH) && (watchdog == 1)){
lcd.clear();
watchdog = 0;
paragraph = 4;
}
}
// Night lighting???
if(paragraph == 4) {
lcd.setCursor(0,1);
lcd.print("Night Light: ");
if(nightLight == true) {
lcd.setCursor(13,1);
lcd.print("ON ");
}
else if(nightLight == false) {
lcd.setCursor(13,1);
lcd.print("OFF");
}
if(analogRead(CTpot) <= 512) {
nightLight = false;
}
else if(analogRead(CTpot) > 512) {
nightLight = true;
}
if(digitalRead(SW) == LOW){
watchdog = 1;
}
else if((digitalRead(SW) == HIGH) && (watchdog == 1)){
lcd.clear();
watchdog = 0;
paragraph = 5;
}
}
// set night light brightness
if(paragraph == 5) {
if(nightLight == true) {
lcd.setCursor(0,1);
lcd.print("Night Light: ");
if(nightBrightness < 10) {
lcd.print("00");
lcd.print(nightBrightness);
}
else if (nightBrightness >= 10) {
if(nightBrightness < 100) {
lcd.print("0");
lcd.print(nightBrightness);
}
else if(nightBrightness >= 100) {
lcd.print(nightBrightness);
}
}
nightBrightness = map(analogRead(CTpot), 0, 1023, 1, 255);
analogWrite(Cool, 0);
analogWrite(Warm, 0);
digitalWrite(accLight, LOW);
analogWrite(Red, nightBrightness);
if(digitalRead(SW) == LOW){
watchdog = 1;
}
else if((digitalRead(SW) == HIGH) && (watchdog == 1)){
lcd.clear();
watchdog = 0;
paragraph = 1;
page = 8;
}
}
else if(nightLight == false) {
lcd.clear();
watchdog = 0;
paragraph = 1;
page = 8;
}
}
}
// confirm Lighting settings
if(page == 8) {
if(paragraph == 1) {
button();
lcd.setCursor(0,0);
lcd.print("D: ");
lcd.print(CT);
lcd.print("K ");
if(dayBrightness < 10) {
lcd.print("00");
lcd.print(dayBrightness);
}
else if (dayBrightness >= 10) {
if(dayBrightness < 100) {
lcd.print("0");
lcd.print(dayBrightness);
}
else if(dayBrightness >= 100) {
lcd.print(dayBrightness);
}
}
lcd.print(" ");
if(acc == true){
lcd.print("ACC");
}
else if(acc == false) {
lcd.print(" ");
}
lcd.setCursor(0,1);
lcd.print("N: ");
if(nightLight == true){
lcd.print("Ena. ");
lcd.print(nightBrightness);
}
else if(nightLight == false) {
lcd.print(" ");
}
analogWrite(Cool, 0);
analogWrite(Warm, 0);
digitalWrite(accLight, LOW);
analogWrite(Red, 0);
if(digitalRead(SW) == LOW){
watchdog = 1;
}
else if((digitalRead(SW) == HIGH) && (watchdog == 1)){
lcd.clear();
page = 7;
paragraph = 1;
watchdog = 0;
}
if(Button == 11){
lcd.clear();
watchdog = 2;
paragraph = 1;
page = 0;
}
}
}
// Optional settings
if(page == 9) {
// Automacally refill water bowl???
if(paragraph == 1) {
button();
lcd.setCursor(0,0);
lcd.print("Water Refill");
if(waterRefill == true) {
lcd.setCursor(0,1);
lcd.print("ON ");
}
else if(waterRefill == false) {
lcd.setCursor(0,1);
lcd.print("OFF");
}
if(analogRead(CTpot) <= 512) {
waterRefill = false;
}
else if(analogRead(CTpot) > 512) {
waterRefill = true;
}
if(digitalRead(SW) == LOW){
watchdog = 1;
}
else if((digitalRead(SW) == HIGH) && (watchdog == 1)){
lcd.clear();
watchdog = 0;
paragraph = 2;
}
if(Button == 11){
lcd.clear();
watchdog = 2;
paragraph = 1;
page = 0;
}
}
if(paragraph == 2) {
button();
lcd.setCursor(0,0);
lcd.print("Serial Address");
lcd.setCursor(0,1);
lcd.print(address);
address = map(analogRead(CTpot), 0, 1023, 101, 132);
if(digitalRead(SW) == LOW){
watchdog = 1;
}
else if((digitalRead(SW) == HIGH) && (watchdog == 1)){
lcd.clear();
watchdog = 0;
paragraph = 3;
}
if(Button == 11){
lcd.clear();
watchdog = 2;
paragraph = 1;
page = 0;
}
}
if(paragraph == 3) {
button();
lcd.setCursor(0,0);
lcd.print("Type Ident");
lcd.setCursor(0,1);
lcd.print(typeIdent);
typeIdent = map(analogRead(CTpot), 0, 1023, 300, 304);
if(typeIdent > 303) {
typeIdent = 303;
}
if(digitalRead(SW) == LOW){
watchdog = 1;
}
else if((digitalRead(SW) == HIGH) && (watchdog == 1)){
lcd.clear();
watchdog = 0;
paragraph = 1;
}
if(Button == 11){
lcd.clear();
watchdog = 2;
paragraph = 1;
page = 0;
}
}
}
// Save and Exit
if(page == 100) {
if(paragraph == 1) {
button();
if(analogRead(CTpot) < 512) {
lcd.setCursor(0,0);
lcd.print("Return to Menu");
if(digitalRead(SW) == LOW){
watchdog = 1;
}
else if((digitalRead(SW) == HIGH) && (watchdog == 1)){
lcd.clear();
watchdog = 2;
paragraph = 1;
page = 0;
}
}
else if(analogRead(CTpot) >= 512) {
lcd.setCursor(0,0);
lcd.print("Save and Exit ");
if(digitalRead(SW) == LOW){
watchdog = 1;
}
else if((digitalRead(SW) == HIGH) && (watchdog == 1)){
lcd.clear();
watchdog = 0;
paragraph = 1;
page = 100;
}
if(Button == 11){
lcd.clear();
ROM.get(10, j);
if(j != dayHour) {
ROM.put(10, dayHour);
}
j = 0;
ROM.get(11, j);
if(j != dayMinute) {
ROM.put(11, dayMinute);
}
j = 0;
ROM.get(12, j);
if(j != nightHour) {
ROM.put(12, nightHour);
}
j = 0;
ROM.get(13, j);
if(j != nightMinute) {
ROM.put(13, nightMinute);
}
j = 0;
ROM.get(14, j);
if(j != CT) {
ROM.put(14, CT);
}
j = 0;
ROM.get(16, j);
if(j != dayBrightness) {
ROM.put(16, dayBrightness);
}
j = 0;
ROM.get(18, j);
if(j != nightBrightness) {
ROM.put(18, nightBrightness);
}
j = 0;
ROM.get(20, j);
if(j != dayTemp) {
ROM.put(20, dayTemp);
}
j = 0;
ROM.get(21, j);
if(j != nightTemp) {
ROM.put(21, nightTemp);
}
j = 0;
ROM.get(22, j);
if(j != splitTemp) {
ROM.put(22, splitTemp);
}
j = 0;
ROM.get(23, j);
if(j != dayHum) {
ROM.put(23, dayHum);
}
j = 0;
ROM.get(24, j);
if(j != nightHum) {
ROM.put(24, nightHum);
}
j = 0;
ROM.get(25, j);
if(j != splitHum) {
ROM.put(25, splitHum);
}
j = 0;
ROM.get(230, j);
if(j != acc) {
ROM.put(230, acc);
}
j = 0;
ROM.get(231, j);
if(j != waterRefill) {
ROM.put(231, waterRefill);
}
j = 0;
ROM.get(232, j);
if(j != nightLight) {
ROM.put(232, nightLight);
}
j = 0;
isConfig = true;
lcd.clear();
watchdog = 2;
paragraph = 2;
}
}
}
if(paragraph == 2) {
lcd.setCursor(0,0);
lcd.print("*****SAVED******");
lcd.setCursor(0,1);
lcd.print("Reset Controller");
}
}
}
DateTime now = rtc.now();
dhtTimer();
CCT();
display();
button();
}
void display() {
int lastSecond;
DateTime now = rtc.now();
lcd.setCursor(8,0);
if(now.hour() < 10) {
lcd.print("0");
lcd.print(now.hour());
}
else {
lcd.print(now.hour());
}
lcd.print(":");
if(now.minute() < 10) {
lcd.print("0");
lcd.print(now.minute());
}
else {
lcd.print(now.minute());
}
lcd.print(":");
if(now.second() < 10) {
lcd.print("0");
lcd.print(now.second());
}
else {
lcd.print(now.second());
}
if(now.second() > (lastSecond + 3)) {
}
lcd.setCursor(0,0);
lcd.print(humidity);
lcd.print("%");
}
void timer_1() {
currentMillis = millis();
if ((a == HIGH) && (currentMillis - previousMillis >= offTime)) {
a = LOW;
previousMillis = currentMillis;
blink = 1;
}
else if((a == LOW) && (currentMillis - previousMillis >= onTime)) {
a = HIGH;
previousMillis = currentMillis;
blink = 0;
}
}
void timer_2() {
currentMillis = millis();
if(trigger == 1) {
offset_2 = currentMillis;
trigger = 0;
}
if(currentMillis < (offset_2 + duration_2)) {
cycle = 1;
}
if(currentMillis > (offset_2 + duration_2)) {
cycle = 0;
}
}
void dhtTimer() {
currentMillis = millis();
if ((dhtTime == HIGH) && (currentMillis - previousDHT >= idleTime)) {
dhtTime = LOW;
previousDHT = currentMillis;
humidity = humidity;
temperatureC = temperatureC;
temperatureF = temperatureF;
}
else if((dhtTime == LOW) && (currentMillis - previousDHT >= readTime)) {
dhtTime = HIGH;
previousDHT = currentMillis;
humidity = dht.readHumidity();
temperatureC = dht.readTemperature();
temperatureF = dht.readTemperature(true);
}
}
void CCT() {
int i; // CT
int j; // dayBrightness
int k; // nightBrightness
int l;
ROM.get(14, i);
ROM.get(16, j);
ROM.get(18, k);
if(isDay == true) {
if(l < j) {
analogWrite(Cool, map(i, 2700, 6500, 0, l));
analogWrite(Warm, map(i, 2700, 6500, l, 0));
analogWrite(Red, map(l, 0, j, k, 0));
delay(200);
l++;
}
else if(l == j) {
analogWrite(Cool, map(i, 2700, 6500, 0, j));
analogWrite(Warm, map(i, 2700, 6500, j, 0));
analogWrite(Red, 0);
l = j;
}
}
}
void button() {
if (digitalRead(SW) == LOW) {
if (SW_Active == false) {
SW_Active = true;
buttonTimer = millis();
}
if ((millis() - buttonTimer > longPressTime) && (longPressActive == false)) {
longPressActive = true;
Button = 11;
Serial.println("***Long Press***");
Serial.println(Button);
}
}
else if(digitalRead(SW) == HIGH){
if (SW_Active == true) {
if (longPressActive == true) {
longPressActive = false;
}
else if (longPressActive == false) {
Button = 1;
Serial.println("***Short Press***");
Serial.println(Button);
}
SW_Active = false;
Button = 0;
Serial.println("***Released***");
Serial.println(Button);
}
}
}
Heat
Accessory
Lighting
Humidify /
Sprayers
Dehumidify
/ Vent Fan
Water
Refill