#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Arduino.h>
#include <RTClib.h>
Adafruit_MPU6050 mpu;
RTC_DS1307 rtc;
LiquidCrystal_I2C lcd1(0x27, 20, 4);
#define trig1 2
#define trig2 3
#define echo1 4
#define echo2 5
int ledPin = 10;
int LDRPin = A0; //check after removing
int motionPin = 8;
int pirState = LOW;
int val = 0;
float get_distance(int trigx, int echox);
void setup() {
pinMode(trig1, OUTPUT);
pinMode(trig2, OUTPUT);
pinMode(echo1, INPUT);
pinMode(echo2, INPUT);
Serial.begin(115200);
pinMode(ledPin, OUTPUT);
pinMode(motionPin, INPUT);
lcd1.begin(20,4);
lcd1.backlight();
mpu.begin(0x69);
rtc.begin();
mpu.setGyroRange(MPU6050_RANGE_250_DEG);
}
void loop() {
float dist1 = get_distance(trig1, echo1);
float dist2 = get_distance(trig2, echo2);
float f;
if (dist1 <= 100) {
f = dist1;
}
else if (dist2 >= 150) {
f = dist2;
}
else {
f = 0.4 * dist1 + 0.6 * dist2;
}
Serial.print("Distance Value: ");
Serial.println(f);
lcd1.clear();
lcd1.print("Distance: ");
lcd1.println(f);
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
float x_angular_velocity = g.gyro.x;
float y_angular_velocity = g.gyro.y;
Serial.print("Angular velocity (x-axis): ");
Serial.print(x_angular_velocity);
Serial.println(" rad/s");
Serial.print("Angular velocity (y-axis): ");
Serial.print(y_angular_velocity);
Serial.println(" rad/s");
lcd1.setCursor(0,1);
lcd1.print("X-AngVel:");
lcd1.print(x_angular_velocity);
lcd1.print("rad/s");
lcd1.setCursor(0,2);
lcd1.print("Y-AngVel:");
lcd1.print(y_angular_velocity);
lcd1.print("rad/s");
if (x_angular_velocity==0 && y_angular_velocity == 0)
{
delay(100);
lcd1.setCursor(0,3);
lcd1.print("Successful level");
}
delay(3000);
DateTime now = rtc.now();
Serial.print("Time: ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
lcd1.clear();
lcd1.print("Time: ");
lcd1.print(now.hour(), DEC);
lcd1.print(':');
lcd1.print(now.minute(), DEC);
lcd1.print(':');
lcd1.print(now.second(), DEC);
lcd1.println();
delay(3000);
DateTime later = rtc.now();
Serial.print("Time after 3s: ");
Serial.print(later.hour(), DEC);
Serial.print(':');
Serial.print(later.minute(), DEC);
Serial.print(':');
Serial.print(later.second(), DEC);
Serial.println();
lcd1.setCursor(0,1);
lcd1.print("Newtime:");
lcd1.print(later.hour(), DEC);
lcd1.print(':');
lcd1.print(later.minute(), DEC);
lcd1.print(':');
lcd1.print(later.second(), DEC);
delay(2000);
int LDRValue = analogRead(LDRPin);
int LDRScaled = map(LDRValue, 0, 1023, 0, 255);
int LEDValue = LDRScaled;
int PIRValue = digitalRead(motionPin);
if (PIRValue == HIGH)
{
Serial.println("Motion detected");
analogWrite(ledPin, 0);
Serial.print("LDR:");
Serial.println(LDRScaled);
Serial.println("Torch brightness: 0");
lcd1.clear();
lcd1.print("PIR: Person Present");
lcd1.setCursor(0,1);
lcd1.print("LDR:");
lcd1.print(LDRScaled);
lcd1.setCursor(0,2);
lcd1.print("Torch Brightness: 0");
}
else
{
Serial.println("No motion detected");
analogWrite(ledPin, LEDValue);
Serial.print("LDR:");
Serial.println(LDRScaled);
Serial.print("Torch brightness:");
Serial.println(LEDValue);
lcd1.clear();
lcd1.print("PIR: Person Absent");
lcd1.setCursor(0,1);
lcd1.print("LDR:");
lcd1.print(LDRScaled);
lcd1.setCursor(0,2);
lcd1.print("Torch Brightness:");
lcd1.setCursor(0,3);
lcd1.print(LEDValue);
}
delay(1000);
}
float get_distance(int trigx, int echox) {
digitalWrite(trigx, LOW);
delayMicroseconds(2);
digitalWrite(trigx, HIGH);
delayMicroseconds(10);
digitalWrite(trigx, LOW);
long t = pulseIn(echox, HIGH);
float dist = t * 0.034 / 2;
return dist;
}