#include <LiquidCrystal_I2C.h> // Library untuk komunikasi dengan LCD melalui I2C
LiquidCrystal_I2C lcd(0x27, 16, 2); // Membuat objek LCD dengan alamat I2C 0x27, 16 kolom, dan 2 baris
// Deklarasi variabel untuk menyimpan nilai hasil pembacaan analog
int pot;
void setup() {
// Mengatur pin 33 sebagai input untuk membaca nilai analog
pinMode(33, INPUT);
pinMode(25, OUTPUT); // Mengatur pin 25 sebagai output untuk mengontrol LED
// Inisialisasi LCD
lcd.init(); // Memulai komunikasi dengan LCD
lcd.backlight(); // Menyalakan lampu latar pada LCD
// Memulai komunikasi Serial dengan baud rate 9600
Serial.begin(9600);
}
void loop() {
// Membaca nilai analog dari pin 33 dan menyimpan hasilnya ke variabel 'pot'
pot = analogRead(33);
// Mengubah nilai potensiometer menjadi persentase (0-100%)
int potPersen = map(pot, 0, 4095, 0, 100);
// Menampilkan nilai potensiometer (0-4095) di baris pertama LCD
lcd.setCursor(0, 0); // Mengatur kursor ke kolom 0, baris 0
lcd.print("Pot: ");
lcd.print(pot); // Menampilkan nilai potensiometer
lcd.print(" "); // Membersihkan sisa karakter sebelumnya
// Menampilkan nilai persentase potensiometer di baris kedua LCD
lcd.setCursor(0, 1); // Mengatur kursor ke kolom 0, baris 1
lcd.print("Pot(%): ");
lcd.print(potPersen); // Menampilkan nilai potensiometer dalam persen
lcd.print("% "); // Membersihkan sisa karakter sebelumnya
// Mengirim nilai potensiometer ke Serial Monitor untuk debugging
Serial.print("Analog: ");
Serial.println(pot); // Menampilkan nilai mentah dari potensiometer
Serial.print("Persentase: ");
Serial.println(potPersen); // Menampilkan nilai potensiometer dalam persen
// Jika persentase potensiometer lebih dari 50%, hidupkan LED
if(potPersen > 50){
digitalWrite(25, HIGH); // Menyalakan LED pada pin 25
}else{
digitalWrite(25, LOW); // Mematikan LED pada pin 25
}
// Memberikan jeda selama 1 detik sebelum pembacaan berikutnya
delay(1000);
}
/*
Penjelasan Program:
1. Fungsi `map()` digunakan untuk mengubah nilai rentang potensiometer (0-4095) menjadi persentase (0-100%).
2. Fungsi `lcd.setCursor()` mengatur posisi kursor pada LCD, dengan dua parameter: kolom dan baris.
3. Fungsi `lcd.print()` menampilkan teks atau nilai pada LCD di posisi yang ditentukan.
4. Nilai potensiometer ditampilkan dalam dua format: nilai asli (0-4095) dan persentase (0-100%).
5. Fungsi `Serial.println()` digunakan untuk menampilkan data di Serial Monitor untuk debugging dan pemantauan.
6. Fungsi `delay(1000)` memberikan jeda 1 detik untuk pembacaan dan tampilan berikutnya.
Catatan Pengembangan:
1. Jika Anda ingin tampilan lebih responsif, gunakan fungsi `millis()` sebagai pengganti `delay()`.
2. Tambahkan validasi untuk menangani nilai-nilai yang tidak sesuai atau jika terjadi noise pada pembacaan potensiometer.
*/