#include <DHT.h>
#include <Servo.h>

#define DHTPIN 2      // Pin data DHT22 terhubung ke pin 2 Arduino
#define DHTTYPE DHT22 // Tipe sensor DHT yang digunakan
#define BUZZER_PIN 8  // Pin untuk buzzer
#define LED_PIN 13    // Pin untuk lampu LED
#define TRIGGER_PIN 10 // Pin trigger untuk sensor ultrasonik
#define ECHO_PIN 11    // Pin echo untuk sensor ultrasonik
#define SERVO_PIN 9    // Pin untuk servo motor

DHT dht(DHTPIN, DHTTYPE);
Servo myservo;

void setup() {
  Serial.begin(9600);
  pinMode(BUZZER_PIN, OUTPUT);
  pinMode(LED_PIN, OUTPUT);
  pinMode(TRIGGER_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  myservo.attach(SERVO_PIN);
  dht.begin();
}

void loop() {
  // Baca suhu dan kelembaban dari sensor DHT22
  float temperature = dht.readTemperature();

  // Baca jarak detak dengan tembok menggunakan sensor ultrasonik
  long duration, jarak;
  digitalWrite(TRIGGER_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIGGER_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIGGER_PIN, LOW);
  duration = pulseIn(ECHO_PIN, HIGH);
  jarak = (duration / 2) / 29.1; // Kalkulasi jarak dalam centimeter

  // Cek jarak mundur mobil dengan sensor ultrasonik
  if (jarak < 100) { // Kurang dari 100 cm (1 meter)
    // Jika jarak kurang dari 1 meter, aktifkan buzzer dan lampu LED
    digitalWrite(BUZZER_PIN, HIGH);
    tone(8, 2000, 800); // Plays 262Hz tone for 0.250 seconds
    digitalWrite(LED_PIN, HIGH);
    delay(500); // Buzzer dan LED aktif selama 1 detik
    digitalWrite(BUZZER_PIN, LOW);
    digitalWrite(LED_PIN, LOW);
  }

  // Cek suhu dalam kabin mobil
  if (temperature > 35) {
    // Jika suhu lebih dari 35 derajat Celsius, buka servo motor (90 derajat)
    myservo.write(90);
    delay(20);
  } else {
    myservo.write(0); // Tutup servo motor (0 derajat)
    delay(20);
  }

  // Tampilkan suhu dan jarak di Serial Monitor
  Serial.print("Suhu: ");
  Serial.print(temperature);
  Serial.print(" °C | Jarak: ");
  Serial.print(jarak);
  Serial.println(" cm");

  delay(1000); // Tunggu 1 detik sebelum membaca sensor lagi
}