#include <LiquidCrystal_I2C.h>
#include <Servo.h>
// Pin untuk motor servo dan tombol
const int servoPin = 9; // Motor servo terhubung ke pin 9
const int buttonCW = 5; // Tombol untuk arah CW
const int buttonCCW = 6; // Tombol untuk arah CCW
const int ledPin = 13; // LED indikator
// LCD Setup (I2C)
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C 0x27, ukuran LCD 16x2
// Membuat objek Servo
Servo myServo;
void setup() {
// Set pin mode
pinMode(buttonCW, INPUT_PULLUP); // Tombol CW menggunakan pull-up
pinMode(buttonCCW, INPUT_PULLUP); // Tombol CCW menggunakan pull-up
pinMode(ledPin, OUTPUT); // LED sebagai output
// Inisialisasi LCD
lcd.begin(16, 2); // Menyediakan kolom dan baris untuk LCD
lcd.backlight(); // Nyalakan lampu latar LCD
// Inisialisasi motor servo
myServo.attach(servoPin); // Menghubungkan servo ke pin 9
myServo.write(90); // Set servo ke posisi tengah (90 derajat)
// Menampilkan pesan awal pada LCD
lcd.setCursor(0, 0);
lcd.print("Servo Motor");
delay(2000);
}
void loop() {
int potValue = analogRead(A0); // Baca nilai dari potensiometer
int angle = map(potValue, 0, 1023, 0, 180); // Peta nilai potensiometer ke sudut servo (0 - 180)
// Cek tombol CW (Clockwise)
if (digitalRead(buttonCW) == LOW) {
// Set servo ke posisi kanan (CW)
myServo.write(180);
lcd.setCursor(0, 0);
lcd.print("Arah: CW ");
}
// Cek tombol CCW (Counter-Clockwise)
else if (digitalRead(buttonCCW) == LOW) {
// Set servo ke posisi kiri (CCW)
myServo.write(0);
lcd.setCursor(0, 0);
lcd.print("Arah: CCW ");
}
else {
// Kontrol motor servo menggunakan potensiometer
myServo.write(angle); // Set servo ke posisi yang ditentukan oleh potensiometer
lcd.setCursor(0, 0);
lcd.print("Sudut: ");
lcd.print(angle); // Tampilkan nilai sudut servo pada LCD
}
// Kontrol LED indikator
if (potValue > 800) { // Jika nilai potensiometer lebih dari ambang 800
digitalWrite(ledPin, HIGH); // LED menyala
} else {
digitalWrite(ledPin, LOW); // LED mati
}
// Menampilkan nilai potensiometer pada LCD
lcd.setCursor(0, 1);
lcd.print("Potensiometer: ");
lcd.print(potValue); // Tampilkan nilai sensor potensiometer pada LCD
delay(200); // Delay untuk stabilkan tampilan LCD
}