#include <Keypad.h>
// #include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo myservo; // Buat objek Servo
int pos = 180; // Posisi awal servo
const byte buzzer = 13;
const byte BARIS = 4;
const byte KOLOM = 4;
char hexaKeys[BARIS][KOLOM] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte pinBaris[BARIS]= {9,8,7,6};
byte pinKolom[KOLOM]= {5,4,3,2};
Keypad mykey= Keypad(makeKeymap(hexaKeys), pinBaris, pinKolom, BARIS, KOLOM);
char karakter_akhir, key0 = ' ';
String kap = "kapital : n";
String tampil;
bool kapital = false;
byte cnt;
void setup() {
Serial.begin(9600);
lcd.init(); // Initialize the LCD
lcd.backlight(); // Turn on the backlight
pinMode(buzzer, OUTPUT);
myservo.attach(10); // Attache servo ke pin 10
myservo.write(pos); // Set servo ke posisi awal (90 derajat)
}
void loop() {
// put your main code here, to run repeatedly:
char key = mykey.getKey();
if (key){
if(key != key0){
cnt = 0;
}
if(key == '1'){
karakter_akhir = '1';
buzzerHidup();
}
else if (key == '2'){
if(cnt == 0){
if(kapital){
karakter_akhir = 'A';
} else {
karakter_akhir = 'a';
}
buzzerHidup();
cnt += 1;
}
else if (cnt == 1){
if(kapital){
karakter_akhir = 'B';
} else {
karakter_akhir = 'b';
}
buzzerHidup();
cnt += 1;
}
else if (cnt == 2){
if(kapital){
karakter_akhir = 'C';
} else {
karakter_akhir = 'c';
}
buzzerHidup();
cnt += 1;
}
else if (cnt == 3){
karakter_akhir = '2';
buzzerHidup();
cnt = 0;
}
}
else if (key == '3'){
if(cnt == 0){
if(kapital){
karakter_akhir = 'D';
} else {
karakter_akhir = 'd';
}
buzzerHidup();
cnt += 1;
}
else if (cnt == 1){
if(kapital){
karakter_akhir = 'E';
} else {
karakter_akhir = 'e';
}
buzzerHidup();
cnt += 1;
}
else if (cnt == 2){
if(kapital){
karakter_akhir = 'F';
} else {
karakter_akhir = 'f';
}
buzzerHidup();
cnt += 1;
}
else if (cnt == 3){
karakter_akhir = '3';
buzzerHidup();
cnt = 0;
}
}
else if (key == '4'){
if(cnt == 0){
if(kapital){
karakter_akhir = 'G';
} else {
karakter_akhir = 'g';
}
buzzerHidup();
cnt += 1;
}
else if (cnt == 1){
if(kapital){
karakter_akhir = 'H';
} else {
karakter_akhir = 'h';
}
buzzerHidup();
cnt += 1;
}
else if (cnt == 2){
if(kapital){
karakter_akhir = 'I';
} else {
karakter_akhir = 'i';
}
buzzerHidup();
cnt += 1;
}
else if (cnt == 3){
karakter_akhir = '4';
buzzerHidup();
cnt = 0;
}
}
else if (key == '5'){
if(cnt == 0){
if(kapital){
karakter_akhir = 'J';
} else {
karakter_akhir = 'j';
}
buzzerHidup();
cnt += 1;
}
else if (cnt == 1){
if(kapital){
karakter_akhir = 'K';
} else {
karakter_akhir = 'k';
}
buzzerHidup();
cnt += 1;
}
else if (cnt == 2){
if(kapital){
karakter_akhir = 'L';
} else {
karakter_akhir = 'l';
}
buzzerHidup();
cnt += 1;
}
else if (cnt == 3){
karakter_akhir = '5';
buzzerHidup();
cnt = 0;
}
}
else if (key == '6'){
if(cnt == 0){
if(kapital){
karakter_akhir = 'M';
} else {
karakter_akhir = 'm';
}
buzzerHidup();
cnt += 1;
}
else if (cnt == 1){
if(kapital){
karakter_akhir = 'N';
} else {
karakter_akhir = 'n';
}
buzzerHidup();
cnt += 1;
}
else if (cnt == 2){
if(kapital){
karakter_akhir = 'O';
} else {
karakter_akhir = 'o';
}
buzzerHidup();
cnt += 1;
}
else if (cnt == 3){
karakter_akhir = '6';
buzzerHidup();
cnt = 0;
}
}
else if (key == '7'){
if(cnt == 0){
if(kapital){
karakter_akhir = 'P';
} else {
karakter_akhir = 'p';
}
buzzerHidup();
cnt += 1;
}
else if (cnt == 1){
if(kapital){
karakter_akhir = 'Q';
} else {
karakter_akhir = 'q';
}
buzzerHidup();
cnt += 1;
}
else if (cnt == 2){
if(kapital){
karakter_akhir = 'R';
} else {
karakter_akhir = 'r';
}
buzzerHidup();
cnt += 1;
}
else if (cnt == 3){
if(kapital){
karakter_akhir = 'S';
} else {
karakter_akhir = 's';
}
buzzerHidup();
cnt += 1;
}
else if (cnt == 4){
karakter_akhir = '7';
buzzerHidup();
cnt = 0;
}
}
else if (key == '8'){
if(cnt == 0){
if(kapital){
karakter_akhir = 'T';
} else {
karakter_akhir = 't';
}
buzzerHidup();
cnt += 1;
}
else if (cnt == 1){
if(kapital){
karakter_akhir = 'U';
} else {
karakter_akhir = 'u';
}
buzzerHidup();
cnt += 1;
}
else if (cnt == 2){
if(kapital){
karakter_akhir = 'V';
} else {
karakter_akhir = 'v';
}
buzzerHidup();
cnt += 1;
}
else if (cnt == 3){
karakter_akhir = '8';
buzzerHidup();
cnt = 0;
}
}
else if (key == '9'){
if(cnt == 0){
if(kapital){
karakter_akhir = 'W';
} else {
karakter_akhir = 'w';
}
buzzerHidup();
cnt += 1;
}
else if (cnt == 1){
if(kapital){
karakter_akhir = 'X';
} else {
karakter_akhir = 'x';
}
buzzerHidup();
cnt += 1;
}
else if (cnt == 2){
if(kapital){
karakter_akhir = 'Y';
} else {
karakter_akhir = 'y';
}
buzzerHidup();
cnt += 1;
}
else if (cnt == 3){
if(kapital){
karakter_akhir = 'Z';
} else {
karakter_akhir = 'z';
}
buzzerHidup();
cnt += 1;
}
else if (cnt == 4){
karakter_akhir = '9';
buzzerHidup();
cnt = 0;
}
}
else if (key == '*'){
if(cnt == 0){
karakter_akhir = '*';
buzzerHidup();
cnt += 1;
}
else if(cnt == 1){
karakter_akhir = '+';
buzzerHidup();
cnt += 1;
}
else if(cnt == 2){
karakter_akhir = '-';
buzzerHidup();
cnt = 0;
}
}
else if (key == '0'){
if(cnt == 0){
karakter_akhir = ' ';
buzzerHidup();
cnt += 1;
}
else if(cnt == 1){
karakter_akhir = '0';
buzzerHidup();
cnt = 0;
}
}
else if (key == '#'){
buzzerHidup();
kapital = !kapital;
}
else if(key == 'A'){
jalankanServo(tampil);
}
else if (key == 'B'){
tampil += karakter_akhir;
karakter_akhir = ' ';
buzzerHidup();
}
else if (key == 'D'){
cnt = 0;
if(tampil.length() > 0){
tampil = tampil.substring(0, tampil.length() - 1);
}
buzzerHidup();
}
else if (key == 'C'){
cnt = 0;
tampil = tampil.substring(0, tampil.length() - tampil.length());
buzzerHidup();
}
// Instead of display.clearDisplay() and the drawing operations, use lcd.clear() and lcd.print()
lcd.clear(); // Clear the LCD display
lcd.setCursor(0, 0); // Set the cursor to the beginning of the first line
// Print the accumulated string (tampil) to the LCD
lcd.print(tampil);
// Set the cursor position for the next character (karakter_akhir)
lcd.setCursor(tampil.length(), 0);
lcd.print(karakter_akhir); // Print the current character being entered
// Display a capitalization indicator if needed
lcd.setCursor(0, 1);
if(kapital){
// lcd.setCursor(0, 1); // Move to the second row, first column
// lcd.print('^'); // Print the capitalization indicator
kap = "KAPITAL : Y";
} else if(!kapital){
kap = "kapital : n";
}
lcd.print(kap);
key0 = key;
}
}
void buzzerHidup(){
digitalWrite(buzzer, HIGH);
delay(200);
digitalWrite(buzzer, LOW);
}
void jalankanServo(String tampil){
lcd.clear();
lcd.setCursor(0, 0);
if(tampil == "aaa"){
pos = 90;
lcd.print("Akses Diterima");
} else {
lcd.print("Akses Ditolak");
}
myservo.write(pos);
delay(2000);
myservo.write(180);
}