#include <Servo.h>
#include <LiquidCrystal_I2C.h> 
#include <RTClib.h>
#include <Wire.h>
#include <DHT.h> 

#define DHT_PIN 3  // pin sensor DHT dihubungkan ke pin digital 2
#define DHT_TYPE DHT22  // sensor DHT yang digunakan adalah DHT22
DHT dht(DHT_PIN, DHT_TYPE);  // inisialisasi objek dht

#define SERIAL_OPTION 0

LiquidCrystal_I2C lcd(0x27,16,2); 
RTC_DS1307 RTC;

int servoPin = 8;
int buzzer_pin = 11;
int trigger_pin = 12;
int echo_pin = 13;
int inputPin = 2; 
int val = 0; 
int time;
int distance;
Servo servo1;

void setup() {
  pinMode(buzzer_pin, OUTPUT);
  Serial.begin(9600);

  servo1.attach(servoPin);
  lcd.begin(16, 2);

  pinMode(4,OUTPUT);
  pinMode(8,OUTPUT);
  pinMode(inputPin,INPUT);
  pinMode (trigger_pin, OUTPUT); 
  pinMode (echo_pin, INPUT);

  digitalWrite(3,OUTPUT);

  dht.begin();  // inisialisasi sensor DHT
  RTC.begin();
}

void loop() {
//Bagian RTC jam
  DateTime now=RTC.now();
  if (SERIAL_OPTION) {
    Serial.print(now.year()); Serial.print("/");
    Serial.print(now.month()); Serial.print("/");
    Serial.print(now.day()); Serial.print(" ");

    Serial.print(now.hour()); Serial.print(":");
    Serial.print(now.minute()); Serial.print(":");
    Serial.print(now.second()); Serial.print("\n");
  }
  lcd.setCursor(0,0); lcd.print("DATE: ");
  lcd.print(now.year()); lcd.print("/"); lcd.print(now.month()); lcd.print("/"); lcd.print(now.day());
  lcd.setCursor(0,1); lcd.print("TIME: ");
  lcd.print(now.hour()); lcd.print(":"); lcd.print(now.minute()); lcd.print(":"); lcd.print(now.second());

  delay(1000);

  long duration, cm;
  digitalWrite(trigger_pin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigger_pin, HIGH);
  delayMicroseconds(5);
  digitalWrite(echo_pin, LOW);

  duration = pulseIn(echo_pin, HIGH);
  cm = duration * 0.034 / 2;
  
  servo1.write(0);
  lcd.clear();

//Bagian Sensor Suhu dan kelembapan
  float temperature = dht.readTemperature();  
  lcd.setCursor(0,0);
	lcd.print("Tmp:");
  lcd.print(temperature);
  if (temperature > 30) {
    tone(buzzer_pin, 440);
    delay(500);
    noTone(buzzer_pin);
  } else {
    digitalWrite(buzzer_pin, LOW);
  } 


// Bagian sensor PIR
  val = digitalRead(inputPin);  
  if (val == HIGH) {           
    digitalWrite(4, HIGH);  // turn LED ON
    lcd.setCursor(10,0);
    lcd.print("ON");
    delay(500);
      Serial.println("Motion detected!");
  } else {
    digitalWrite(4, LOW); // turn LED OFF
    lcd.setCursor(12,0);
    lcd.print("OFF");
      Serial.println("Motion ended!");   
  }


// Bagian sensor Jarak 
  if(cm < 40){
    servo1.write(90);
    lcd.setCursor(0,1);
    lcd.print("Door:OPEN");
    delay (500);
  }
  else {
    servo1.write(0);
    lcd.setCursor(0,1);
    lcd.print("Door:CLOSED");
    delay(500);   
  }

  delay(2000);
  //Serial.print(" : ");
  //Serial.println(cm);
  lcd.clear();

}
long microsecondsToCentimeters(long microseconds) {
  return microseconds / 29 / 2;
}
$abcdeabcde151015202530fghijfghij
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
ultrasonic1:VCC
ultrasonic1:TRIG
ultrasonic1:ECHO
ultrasonic1:GND
servo1:GND
servo1:V+
servo1:PWM
pir1:VCC
pir1:OUT
pir1:GND
bz1:1
bz1:2
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL
GND5VSDASCLSQWRTCDS1307+
rtc1:GND
rtc1:5V
rtc1:SDA
rtc1:SCL
rtc1:SQW
dht1:VCC
dht1:SDA
dht1:NC
dht1:GND