#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "DHTesp.h"
#include "RTClib.h"
#include <TM1637Display.h>
#include <Adafruit_NeoPixel.h>
#define CLK 5
#define DIO 23
Adafruit_NeoPixel ring1(16, 26, NEO_RGB + NEO_KHZ800);
Adafruit_NeoPixel ring2(8, 25, NEO_RGB + NEO_KHZ800);
#define LDR_PIN 2
const float GAMMA = 0.7;
const float RL10 = 50;
const uint8_t HOT[] = {
SEG_B | SEG_C | SEG_E | SEG_F | SEG_G,
SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F,
SEG_D | SEG_E | SEG_F | SEG_G,
SEG_D | SEG_E | SEG_F | SEG_G
};
const uint8_t GOOD[] = {
SEG_A | SEG_C | SEG_D | SEG_E | SEG_F,
SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F ,
SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F ,
SEG_B | SEG_C | SEG_D | SEG_E | SEG_G
};
const uint8_t COLD[] = {
SEG_A | SEG_D | SEG_E | SEG_F,
SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F,
SEG_D | SEG_E | SEG_F,
SEG_B | SEG_C | SEG_D | SEG_E | SEG_G
};
int RED = 18;
int GREEN = 19;
int BLUE = 17;
unsigned long previousMillis = 0;
const long interval = 500;
TM1637Display display(CLK, DIO);
LiquidCrystal_I2C lcd(0x27, 16, 2);
LiquidCrystal_I2C lcd2(0x28, 16, 2);
LiquidCrystal_I2C lcd3(0x29, 16, 2);
LiquidCrystal_I2C lcd4(0x30, 16, 2);
DHTesp dhtSensor;
RTC_DS1307 rtc;
void setup() {
Serial.begin(115200);
pinMode(LDR_PIN, INPUT);
lcd.init();
lcd2.init();
lcd3.init();
lcd4.init();
dhtSensor.setup(13,DHTesp::DHT22);
ring1.begin();
ring2.begin();
lcd.backlight();
lcd2.backlight();
lcd3.backlight();
lcd4.backlight();
if (! rtc.begin()) {
Serial.println("Operation Start");
Serial.flush();
abort();
}
}
void loop () {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
DateTime now = rtc.now();
Serial.print(String (now.hour())+':'+String(now.minute())+':'+String(now.second()));
//Serial.print(':');
//Serial.print(now.minute(), DEC);
//Serial.print(':');
//Serial.print(now.second(), DEC);
//Serial.println();
lcd.setCursor(5,0);
lcd.print("CLOCK");
lcd.setCursor(4,1);
lcd.print(String (now.hour())+':'+String(now.minute())+':'+String(now.second()));
delay(1000);
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
lcd2.setCursor(0,0);
lcd2.print("TEMP " + String(data.temperature, 2) + "C");
lcd2.setCursor(0,1);
lcd2.print("HMDTY " + String(data.humidity, 1) + "%");
int litLights = 0;
ring1.clear();
ring1.show();
for (int i = 0; i < ring1.numPixels(); i++) {
ring1.setPixelColor(i, ring1.Color(255, 0, 0));
ring1.show();
delay(100);
litLights++;
lcd3.setCursor(1, 0);
lcd3.print("Working Lights");
lcd3.setCursor(7, 1);
lcd3.print(litLights);
delay(100);
}
delay(100);
ring2.clear();
ring2.show();
for (int i = 0; i < ring2.numPixels(); i++) {
ring2.setPixelColor(i, ring2.Color(255, 0, 0));
ring2.show();
delay(100);
litLights++;
lcd3.setCursor(1, 0);
lcd3.print("Working Lights");
lcd3.setCursor(7, 1);
lcd3.print(litLights);
delay(100);
}
int analogValue = analogRead(13);
float voltage = analogValue / 1024. * 5;
float resistance = 2000 * voltage / (1 - voltage / 5);
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
lcd4.setCursor(3, 0);
lcd4.print("Lux: ");
lcd4.print(lux);
lcd4.print(" ");
lcd4.setCursor(5, 1);
if (lux > 50) {
lcd4.print("Bright!");
} else {
lcd4.print("Dark");
}
display.clear();
display.setBrightness(7);
pinMode(RED, OUTPUT);
pinMode(GREEN, OUTPUT);
pinMode(BLUE, OUTPUT);
if (data.temperature>35){
Serial.println("Hot!");
display.setSegments(HOT);
digitalWrite(RED, HIGH);
digitalWrite(GREEN, LOW);
digitalWrite(BLUE, LOW);
ring2.setPixelColor(litLights, ring2.Color(255, 0, 0));
delay(1000);
}
if (data.temperature<10){
Serial.println("Cold!");
display.setSegments(COLD);
digitalWrite(RED, LOW);
digitalWrite(GREEN, LOW);
digitalWrite(BLUE, HIGH);
ring2.setPixelColor(litLights, ring2.Color(135, 206, 250));
delay(1000);
}
if (data.temperature>11 && data.temperature<34) {
Serial.println("Normal");
display.setSegments(GOOD);
digitalWrite(RED, LOW);
digitalWrite(GREEN, HIGH);
digitalWrite(BLUE, LOW);
ring2.setPixelColor(litLights, ring2.Color(0, 255, 0));
delay(1000);
}
}
}