#include <LiquidCrystal.h>
#include <Keypad.h>
#include <Servo.h>
const int rs = 12; // Pin 7 on Arduino to pin 4 (RS) on LCD
const int en = 11; // Pin 6 on Arduino to pin 6 (E) on LCD
const int d4 = 10; // Pin 12 on Arduino to pin 11 (D4) on LCD
const int d5 = 9; // Pin 10 on Arduino to pin 12 (D5) on LCD
const int d6 = 8; // Pin 9 on Arduino to pin 13 (D6) on LCD
const int d7 = 7; // Pin 8 on Arduino to pin 14 (D7) on LCD // Pin 8 on Arduino to pin 14 (D7) on LCD
LiquidCrystal lcd (rs,en,d4,d5,d6,d7);
Servo myservo;
const uint8_t ROWS = 4;
const uint8_t COLS = 4;
char keys[ROWS][COLS] = {
{ '1', '2', '3', 'A' },
{ '4', '5', '6', 'B' },
{ '7', '8', '9', 'C' },
{ '*', '0', '#', 'D' }
};
uint8_t colPins[COLS] = { 5, 4, 3, 2 }; // Pins connected to C1, C2, C3, C4
uint8_t rowPins[ROWS] = { A0, A1, A2, A3}; // Pins connected to R1, R2, R3, R4
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
int angle = 0;
void setup() {
// inisialisasi servo pada pin 13
myservo.attach(6);
// inisialisasi LCD dengan 16 kolom dan 2 baris
lcd.begin(16, 2);
}
void loop() {
// membaca tombol yang ditekan pada keypad
char key = keypad.getKey();
// jika tombol ditekan, proses input sudut servo
if (key != NO_KEY) {
// jika tombol yang ditekan adalah angka
if (key >= '0' && key <= '9') {
// tambahkan angka ke nilai sudut yang sudah ada
angle = angle * 10 + (key - '0');
// batasi nilai sudut menjadi 0-180
angle = constrain(angle, 0, 180);
// tampilkan nilai sudut pada LCD
lcd.setCursor(0, 0);
lcd.print("Sudut: ");
lcd.print(angle);
}
// jika tombol yang ditekan adalah tombol #, set sudut servo sesuai nilai sudut yang telah diinput
else if (key == '#') {
myservo.write(angle);
delay(500);
}
// jika tombol yang ditekan adalah tombol *, reset nilai sudut menjadi 0
else if (key == '*') {
angle = 0;
lcd.clear();
}
}
}