#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Atur alamat LCD ke 0x27 untuk tampilan 16 karakter dan 2 baris
//LCD settings
const uint8_t I2C_ADDRESS =0x3f;//gunakan I2C Scanenr untuk mendapatkan alamatnya
const uint8_t LCD_CHAR= 16;
const uint8_t LCD_LINE = 2;
char *TITLE_ANGLE1 ="Angle: ";
LiquidCrystal_I2C lcd(I2C_ADDRESS, LCD_CHAR, LCD_LINE);
unsigned int LCD_VCC=13;//5V pin untuk LCD
#include <Servo.h>
// start of servo1 settings
Servo myservo1; // buat objek servo 1 untuk mengontrol servo
int pot1pin = A0; //pin analog yang digunakan untuk menghubungkan potensiometer
int pot1VccPin = 12;//pin 12 digunakan sebagai 5V untuk potensiometer
unsigned int servo1Pin=3;//pin apa pun dengan ~ yang berarti pin tersebut mengaktifkan PWM
unsigned int servo1AngleMin=0;//servo1 minimum angle
unsigned int servo1AngleMax=180;//servo1 maximum angle
unsigned int servo1Val=0;// variabel untuk membaca nilai dari pin analog
unsigned int angle1=0;
// END of servo1 settings
void setup() {
lcd.begin(LCD_CHAR, LCD_LINE);
pinMode(LCD_VCC, OUTPUT);
digitalWrite(LCD_VCC, HIGH); // Nyalakan LCD
myservo1.attach(servo1Pin); // Hubungkan objek servo ke pin servo1Pin
pinMode(pot1VccPin, OUTPUT);
digitalWrite(pot1VccPin, HIGH); // Nyalakan potensiometer
Serial.begin(9600); // Mulai komunikasi serial
}
void loop() {
// Baca nilai potensiometer
servo1Val = analogRead(pot1pin);
// Ubah nilai potensiometer menjadi sudut untuk servo
angle1 = map(servo1Val, 0, 1023, servo1AngleMin, servo1AngleMax);
// Gerakkan servo sesuai dengan nilai potensiometer
myservo1.write(angle1);
// Tampilkan nilai persentase dan sudut pada Serial Monitor
Serial.print("Angle: ");
Serial.print(map(servo1Val, 0, 1023, 0, 100));
Serial.println(" %");
// Tampilkan nilai persentase dan sudut pada LCD
lcd.setCursor(0, 0);
lcd.print(TITLE_ANGLE1);
lcd.print(map(servo1Val, 0, 1023, 0, 100));
lcd.print(" %");
lcd.setCursor(0, 1);
lcd.print("Servo1: ");
lcd.print(angle1);
lcd.print(" ");
delay(500); // Tunggu setengah detik
}