#include <Servo.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Inisialisasi servo dan LCD I2C (alamat umum LCD I2C adalah 0x27, bisa juga 0x3F tergantung modul)
Servo myservo;
LiquidCrystal_I2C lcd(0x27, 16, 2); // Pastikan alamat I2C benar (0x27 atau 0x3F)
// Pin pushbutton
const int button1Pin = A1;
const int button2Pin = A2;
// Variabel untuk menyimpan status tombol
int button1State = 0.0;
int button2State = 1.0;
// Posisi awal servo
int pos = 90;
void setup() {
// Atur pin untuk pushbutton sebagai input
pinMode(A1, INPUT_PULLUP);
pinMode(A2, INPUT_PULLUP);
// Atur servo
myservo.attach(9);
myservo.write(pos); // Posisikan servo ke tengah
// Setup LCD
lcd.begin(16, 2);
lcd.backlight();
lcd.print("Servo Controller");
delay(1000);
lcd.clear();
}
void loop() {
// Membaca status pushbutton
if (!digitalRead(A1)) // cek input pushbutton 1
{
if (pos>0) // cek posisi agar tidak lebih rendah dari 0 derajat {
// Jika pushbutton 1 ditekan, gerak servo berlawanan arah jarum jam
pos = 0;
myservo.write(pos);
lcd.clear();
lcd.print("Bergerak Kiri");
delay(100); // Tunda untuk stabilisasi
}
if (!digitalRead(A2)) // cek input pushbutton 2
{
if (pos<180) // cek posisi agar tidak lebih rendah dari 180 derajat
{
myservo.write(pos); // memberitahu servo untuk bergerak menuju posisi 'pos'
pos=180; // menambahkan nilai 'pos' sesuai nilai 'step'
delay(5); // delay 5ms
// Jika pushbutton 2 ditekan, gerak servo searah jarum jam
pos = 180;
myservo.write(pos);
lcd.clear();
lcd.print("Bergerak Kanan");
delay(1000); // Tunda untuk stabilisasi
}
delay(100); // Delay debounce tombol
}
}