#define I2C_ADDR1 0x27
#define I2C_ADDR2 0x26
#define TRIG_PIN_LONG 13
#define ECHO_PIN_LONG 12
#define TRIG_PIN_SHORT 8
#define ECHO_PIN_SHORT 7
#include <LiquidCrystal_I2C.h>
#include <MPU6050_light.h>
#include <Wire.h>
#include <RTClib.h>
int ldrval = 0;
int ldrPin = A0;
int pirPin = 4;
int pirState = LOW;
int val = 0;
const float GAMMA = 0.7;
const float RL10 = 50;
LiquidCrystal_I2C lcd1(0x27, 20, 4);
LiquidCrystal_I2C lcd2(0x26, 16, 2);
MPU6050 mpu(Wire);
RTC_DS1307 rtc;
void setup() {
Serial.begin(115200);
pinMode(TRIG_PIN_LONG, OUTPUT);
pinMode(ECHO_PIN_LONG, INPUT);
pinMode(TRIG_PIN_SHORT, OUTPUT);
pinMode(ECHO_PIN_SHORT, INPUT);
pinMode(pirPin, INPUT);
lcd1.init();
lcd1.backlight();
lcd2.init();
lcd2.backlight();
mpu.begin();
if (!rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1); // Stop execution if RTC is not found
}
DateTime utcTime = DateTime(F(__DATE__), F(__TIME__));
DateTime istTime = utcTime + TimeSpan(5 * 3600 + 30 * 60);
rtc.adjust(istTime);
}
float read_longdist() {
digitalWrite(TRIG_PIN_LONG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN_LONG, LOW);
int duration = pulseIn(ECHO_PIN_LONG, HIGH);
return duration * 0.0343 / 2; // Calculate distance in cm
}
float read_shortdist() {
digitalWrite(TRIG_PIN_SHORT, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN_SHORT, LOW);
int duration2 = pulseIn(ECHO_PIN_SHORT, HIGH);
return duration2 * 0.0343 / 2;
}
void loop() {
mpu.update();
delay(1000);
ldrval = analogRead(ldrPin);
Serial.println("LDR: " + String(ldrval));
Serial.println("Torch Brightness:" + String(ldrval));
pirState= digitalRead(pirPin);
if (pirState == HIGH){
Serial.println("Person: Present");}
else{
Serial.println("Person: Absent");}
DateTime now = rtc.now();
if (now.hour()==0 && now.minute()==0 && now.second()==0){
lcd1.clear();
float longDistance = read_longdist();
if (longDistance >= 150 && longDistance <= 400) {
Serial.println("Distance Value: " + String(longDistance) + " cm");
lcd1.clear();
lcd1.print("Distance: " + String(longDistance) + " cm");
}
// Short-distance reading
float shortDistance = read_shortdist();
if (shortDistance >= 2 && shortDistance < 100) {
Serial.println("Distance Value: " + String(shortDistance) + " cm");
lcd1.clear();
lcd1.print("Distance: " + String(shortDistance) );
}
if (longDistance >= 100 && longDistance < 150) {
float avgDistance = (0.4*longDistance + 0.6*shortDistance) ;
Serial.println("Distance Value: " + String(avgDistance) + " cm");
lcd1.clear();
lcd1.print("Distance: " + String(avgDistance) + " cm");
}
lcd1.setCursor(0,1);
Serial.println("Z-axis Angular Position: " + String(mpu.getAngleX()));
lcd1.setCursor(0,1);
if (mpu.getAngleX()==0) {
lcd1.print("Z Pos: "+ String(mpu.getAngleX())+ " SUCCESS!");}
else {
lcd1.print("Z Position:"+ String(mpu.getAngleX()));}
lcd1.setCursor(0,2);
lcd1.print("Use Switch For Time.");
}
else{
lcd1.clear();
lcd1.setCursor(0,0);
float longDistance = read_longdist();
if (longDistance >= 150 && longDistance <= 400) {
Serial.println("Distance Value: " + String(longDistance) + " cm");
lcd1.clear();
lcd1.print("Distance: " + String(longDistance) + " cm");
}
float shortDistance = read_shortdist();
if (shortDistance >= 2 && shortDistance < 100) {
Serial.println("Distance Value: " + String(shortDistance) + " cm");
lcd1.clear();
lcd1.print("Distance: " + String(shortDistance) );
}
if (longDistance >= 100 && longDistance < 150) {
float avgDistance = (0.4*longDistance + 0.6*shortDistance) ;
Serial.println("Distance Value: " + String(avgDistance) + " cm");
lcd1.clear();
lcd1.print("Distance: " + String(avgDistance) + " cm");
}
lcd1.setCursor(0,1);
lcd1.print("Time:");
Serial.print("Time: ");
if (now.hour() < 10) {
Serial.print('0');
lcd1.print('0');}
Serial.print(now.hour());
lcd1.print(now.hour());
Serial.print(':');
lcd1.print(':');
if (now.minute() < 10){
Serial.print('0');
lcd1.print('0');
}
Serial.print(now.minute());
lcd1.print(now.minute());
Serial.print(':');
lcd1.print(':');
if (now.second() < 10){
Serial.print('0');
lcd1.print('0');} //
Serial.println(now.second());
lcd1.print(now.second());
lcd1.setCursor(0,2);
lcd1.print("NewTime:");
Serial.print("NewTime: ");
DateTime now = rtc.now()+ TimeSpan(3);
if (now.hour() < 10) {
Serial.print('0');
lcd1.print('0');}
Serial.print(now.hour());
lcd1.print(now.hour());
Serial.print(':');
lcd1.print(':');
if (now.minute() < 10){
Serial.print('0');
lcd1.print('0');
}
Serial.print(now.minute());
lcd1.print(now.minute());
Serial.print(':');
lcd1.print(':');
if (now.second() < 10){
Serial.print('0');
lcd1.print('0');}
Serial.println(now.second());
lcd1.print(now.second());
lcd1.setCursor(0,3);
lcd1.print("Use Switch For Z pos");
}
}