#include <Wire.h>
#include <hd44780.h>
#include <hd44780ioClass/hd44780_I2Cexp.h>
#include <Adafruit_NeoPixel.h>
hd44780_I2Cexp lcd;
const int pirPin = 33;
const int ldrPin = 34;
const int tempPin = 32;
const int buzzerPin = 26;
const int ledPin = 2;
const int neoPixelPin = 4;
const float tempHighThreshold = 80;
const int ldrLightThreshold = 800;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(16, neoPixelPin, NEO_GRB + NEO_KHZ800);
void setup() {
lcd.begin(16, 2, 0x27);
lcd.init();
lcd.backlight();
strip.begin();
strip.show();
pinMode(pirPin, INPUT);
pinMode(ldrPin, INPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(ledPin, OUTPUT);
pinMode(18, OUTPUT);
pinMode(19, OUTPUT);
pinMode(5, OUTPUT);
}
void loop() {
int pirState = digitalRead(pirPin);
int ldrValue = analogRead(ldrPin);
int tempValue = analogRead(tempPin);
float temperature = map(tempValue, 0, 1023, -20, 100);
if (pirState == HIGH) {
lcd.setCursor(0, 1);
lcd.print("Person detected");
tone(buzzerPin, 1000, 500);
digitalWrite(18, HIGH);
digitalWrite(19, HIGH);
digitalWrite(5, HIGH);
colorWipe(strip.Color(0, 255,255), 50);
} else {
lcd.setCursor(0, 1);
lcd.print("no person ");
noTone(buzzerPin);
digitalWrite(18, LOW);
digitalWrite(19, LOW);
digitalWrite(5, LOW);
}
if (ldrValue > ldrLightThreshold) {
digitalWrite(ledPin, HIGH);
colorWipe(strip.Color(255,255,0), 50);
}
else {
digitalWrite(ledPin, LOW);
colorWipe(strip.Color(0, 0,255), 50);
}
if (temperature < tempHighThreshold) {
lcd.setCursor(0, 0);
lcd.print("High Temperature");
tone(buzzerPin, 2000, 500);
digitalWrite(18, HIGH);
digitalWrite(19, HIGH);
digitalWrite(5, HIGH);
colorWipe(strip.Color(255, 0,0), 50);
}
else {
lcd.setCursor(0, 0);
lcd.print("Temperature Ok ");
digitalWrite(18, LOW);
digitalWrite(19, LOW);
digitalWrite(5, LOW);
}
Serial.print("LDR Value: ");
Serial.print(ldrValue);
Serial.print("\tTemperature: ");
Serial.print(temperature);
Serial.print(" C\tPIR State: ");
Serial.println(pirState);
delay(1000);
}
void colorWipe(uint32_t color, int wait) {
for(int i = 0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, color);
strip.show();
delay(wait);
}
}