#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
#include <DHT.h>
#define DHTPIN 7
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#define buzzer 6
#define led_lampu 13
#define led_suhu 12
#define potensio A0
const int sensorIr1 = 10;
const int sensorIr2 = 8;
Servo myservo1;
Servo myservo2;
LiquidCrystal_I2C lcd(0x27,16,2);
unsigned int jumlahOrang;
bool count1 = false;
bool count2 = false;
bool buzzerActive = false;
void setup() {
lcd.init(); // Gunakan lcd.init() untuk inisialisasi LCD
lcd.backlight(); // Pastikan backlight dihidupkan
dht.begin();
pinMode(led_lampu, OUTPUT);
pinMode(led_suhu, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(potensio, INPUT);
pinMode(sensorIr1, INPUT);
pinMode(sensorIr2, INPUT);
myservo1.attach(11);
myservo2.attach(9);
jumlahOrang=0;
lcd.print("Perpustakaan");
lcd.setCursor(0,1);
lcd.print("Hari ini");
digitalWrite(led_lampu, HIGH);
digitalWrite(led_suhu, LOW);
digitalWrite(buzzer, LOW);
delay(2000);
lcd.clear();
lcd.print("Ttl Orang:0 /40");
lcd.setCursor(0,1);
lcd.print("0 C | 0 db");
}
void loop() {
float suhuC = dht.readTemperature();
int nilaiPotensio=analogRead(potensio);
lcd.setCursor(0,1);
lcd.print(suhuC);
lcd.print(" C | ");
lcd.print(nilaiPotensio);
lcd.print(" db");
unsigned long currentTime = millis();
// jika sensor mendeteksi
while(digitalRead(sensorIr1) == HIGH ){
if(jumlahOrang == 5){
delay(1000);
}
else{
myservo1.write(85);
count1 = true;
delay(1000);
}
}
myservo1.write(5);
if(count1 == true){
jumlahOrang ++;
lcd.setCursor(10,0);
lcd.print(jumlahOrang);
count1 = false;
}
while(digitalRead(sensorIr2) == HIGH){
if(jumlahOrang == 0){
delay(1000);
}
else{
myservo2.write(85);
count2 = true;
delay(1000);
}
}
myservo2.write(5);
if(count2 == true){
jumlahOrang --;
lcd.setCursor(10,0);
lcd.print(jumlahOrang);
count2 = false;
}
// Nyala Lampu
if(jumlahOrang >0){
digitalWrite(led_lampu, HIGH);
// suhu
if(suhuC >30){
digitalWrite(led_suhu, HIGH);
}
else{
digitalWrite(led_suhu, LOW);
}
int frequencies[] = {1000,1200}; // Frekuensi yang digunakan
int durations[] = {500, 500}; // Durasi setiap frekuensi dalam milidetik
if (nilaiPotensio > 50 && !buzzerActive) {
buzzerActive = true; // Set flag bahwa buzzer sudah berbunyi
for (int i = 0; i < sizeof(frequencies) / sizeof(frequencies[0]); i++) {
tone(buzzer, frequencies[i], durations[i]);
delay(durations[i]); // Memberi sedikit jeda antara setiap frekuensi
}
} else if (nilaiPotensio <= 50 && buzzerActive) {
buzzerActive = false; // Reset flag jika kebisingan turun
noTone(buzzer);
}
}
else{
digitalWrite(led_lampu, LOW);
digitalWrite(led_suhu, LOW);
}
}