// Fungsi untuk memulai dan menyetel sensor ke Long Range void initVL53L0X() { Serial.println("Menginisialisasi sensor VL53L0X (Mode Long Range)..."); // Proses mengenalkan dan membangunkan sensor if (!lox.begin()) { Serial.println(F("VL53L0X Error / Tidak Terdeteksi!")); while (1); } // Mengaktifkan mode Long Range dengan memperlama budget waktu baca (50ms) lox.setMeasurementTimingBudgetMicroSeconds(50000); Serial.println("Sensor VL53L0X Berhasil Dikonfigurasi ke Long Range."); } // Fungsi pembacaan data (SUDAH DIKALIBRASI KE 90 CM) void bacaSensorJarak() { VL53L0X_RangingMeasurementData_t measure; lox.rangingTest(&measure, false); if (measure.RangeStatus != 4) { // 1. Ambil data asli dari sensor lalu ubah ke centimeter int jarak_pantul_asli = measure.RangeMilliMeter / 10; // 2. Prosedur Kalibrasi (Offset): Dikurangi 2 cm karena sensor membaca kelebihan 2 cm int jarak_pantul_terkalibrasi = jarak_pantul_asli - 2; // Antisipasi jika jarak sangat dekat agar nilai kalibrasi tidak minus if (jarak_pantul_terkalibrasi < 0) jarak_pantul_terkalibrasi = 0; // 3. Hitung Ketinggian Air Real menggunakan panjang pipa 90 cm ketinggian_air = 90 - jarak_pantul_terkalibrasi; // Pembatasan nilai atas dan bawah sesuai panjang pipa 90 cm if (ketinggian_air < 0) ketinggian_air = 0; if (ketinggian_air > 90) ketinggian_air = 90; // Tampilkan di Serial Monitor Serial.print("Jarak Sensor (Sebelum Kalibrasi): "); Serial.print(jarak_pantul_asli); Serial.println(" cm"); Serial.print("Jarak Sensor (Setelah Kalibrasi): "); Serial.print(jarak_pantul_terkalibrasi); Serial.println(" cm"); Serial.print("Tinggi Air Real: "); Serial.print(ketinggian_air); Serial.println(" cm"); Serial.println("----------------------------------------"); } else { Serial.println("Sensor: Out of Range / Terhalang"); } }