#include <Wire.h>  // Library untuk I2C
#include <LiquidCrystal_I2C.h>  // Library untuk LCD I2C
#include <DHT.h>  // Library untuk sensor DHT22
#include <Servo.h>

Servo myservo;

#define DHTPIN 2  // Pin data sensor DHT22
#define DHTTYPE DHT22  // Jenis sensor DHT22
DHT dht(DHTPIN, DHTTYPE);  // Inisialisasi objek DHT
LiquidCrystal_I2C lcd(0x27, 16, 2);  // Inisialisasi objek LCD I2C dengan alamat 0x27, 16 kolom, dan 2 baris

const int dhtPin = 2;
const int LED_KUNING = 12;  // pin LED kuning dihubungkan ke pin digital 4
const int LED_MERAH = 4;   // pin LED merah dihubungkan ke pin digital 6
const int SERVO_PIN = 6;  // Pin yang digunakan untuk servo
const int PIR_PIN = 7;     // pin sensor PIR dihubungkan ke pin digital 8
const int BUZZER_PIN = 9;  // pin buzzer dihubungkan ke pin digital 9

const int LDR_PIN = A0;    // pin sensor LDR dihubungkan ke pin analog A0

int gerakan;
int cahaya;
int posisi = 0;

void setup() {
  lcd.init();  // Inisialisasi LCD
  lcd.backlight();  // Nyalakan backlight LCD
  dht.begin();  // Inisialisasi sensor DHT22
  myservo.attach(SERVO_PIN); // Servo dipasangkan pada pin 6 (PWM)
  pinMode(LED_KUNING, OUTPUT);
  pinMode(LED_MERAH, OUTPUT);
  pinMode(PIR_PIN, INPUT);
  pinMode(BUZZER_PIN, OUTPUT);
  Serial.begin(9600); // Inisialisasi komunikasi serial untuk Serial Monitor
  lcd.setCursor(1, 0);  // Pindahkan kursor ke kolom 0, baris 0
  lcd.print("ZULFA ULINNUHA"); 
  lcd.setCursor(0, 1); 
  lcd.print("INKUBATOR TELUR"); 
  delay(1000);
}

void loop() { 
    // membaca gerakan dari sensor PIR
    gerakan = digitalRead(PIR_PIN);

    //servo
  for (posisi = 0; posisi <= 180; posisi += 1) {//melakukan perualangan penambahan nilai pada variable posisi
                                                //dan programnya dijalankan setiap penambahan (dalam hal ini setiap +1)
    myservo.write(posisi);                      //membuat servo bergerak pada sudut sesuai nilai yg ada pada variable posisi
    delay(20);                                  //jeda 15ms untuk servo bergerak
  }
  for (posisi = 180; posisi >= 0; posisi -= 1) {//melakukan perualangan pengurangan nilai pada variable posisi
                                                //dan programnya dijalankan setiap pengurangan (dalam hal ini setiap -1)
    myservo.write(posisi);                      //membuat servo bergerak pada sudut sesuai nilai yg ada pada variable posisi
    delay(20);                                  //jeda 15ms untuk servo bergerak
  }

 // Baca suhu dan kelembaban dari sensor DHT22
  float suhu = dht.readTemperature();
  float kelembaban = dht.readHumidity();

 // Tampilkan hasil pembacaan pada LCD
  lcd.clear();  // Bersihkan tampilan LCD
  lcd.setCursor(0, 0);  // Pindahkan kursor ke kolom 0, baris 0
  lcd.print("Suhu: ");  // Tampilkan label "Suhu"
  lcd.print(suhu);  // Tampilkan suhu dalam derajat Celcius
  lcd.print(" C");  // Tampilkan satuan Celcius
  lcd.setCursor(0, 1); 
  lcd.print("Kelembaban: ");
  lcd.print(kelembaban); 
  lcd.print(" %");
  delay(5000);  // Jeda selama 5 detik
  lcd.clear();  // Bersihkan tampilan LCD
  lcd.setCursor(0, 0); 
  lcd.print("Gerakan:");
  lcd.print(gerakan); 
  lcd.setCursor(0, 1); 
  lcd.print("cahaya:");
  lcd.print(cahaya); 
  lcd.print("Lux");
  delay(5000);  // Jeda selama 5 detik

 // Menyalakan LED kuning jika suhu di bawah 37 derajat
 if (suhu <= 37 && kelembaban <= 50 || cahaya < 20) {
  digitalWrite(LED_KUNING, HIGH);
  digitalWrite(LED_MERAH, LOW);
}
 // Menyalakan LED merah jika suhu di atas 39 derajat
 else if (suhu >= 38 && kelembaban >= 60 || cahaya > 20) {
  digitalWrite(LED_KUNING, LOW);
  digitalWrite(LED_MERAH, HIGH);
}

  // jika terdeteksi gerakan, nyalakan buzzer selama 10 detik
  if (gerakan == HIGH) {
     digitalWrite(BUZZER_PIN, HIGH);
     tone(9, 250);
     lcd.clear();  
     lcd.setCursor(0, 0);  
     lcd.print("Terdapat Gerakan ");
     delay(10000);
     noTone(9);
     digitalWrite(BUZZER_PIN, LOW);
         
  }
   // Notifikasi ke Serial Monitor
   Serial.println("INKUBATOR TELUR");

   // membaca cahaya dari sensor LDR
   cahaya = analogRead(LDR_PIN);

   // Memantau kondisi suhu dan cahaya untuk notifikasi ke Serial Monitor
   if ((suhu > 39 || suhu < 37 || kelembaban > 60 || kelembaban < 50 || cahaya < 20) && gerakan == LOW) {
      Serial.println("Periksa Inkubator.");
    }

    }
$abcdeabcde151015202530fghijfghij