PERCOBAAN 5
KEYPAD UNTUK MENAMPILKAN KARAKTER PADA LCD DAN
MENGATUR NYALA LED
Disusun oleh:
Faris Rizki Ramadhani (1941220010)
A. TUJUAN
1. Melakukan proses scanning pada keypad sebagai input.
2. Dapat membuat proses kontrol display LED dan LCD sebagai output.
B. DASAR TEORI
Keypad merupakan rangkaian tombol yang berfungsi untuk memberikan sinyal pada suatu
rangkaian dengan menghubungkan jalur-jalur tertentu. Keypad terdiri dari sejumlah
saklar/tombol, yang terhubung sebagai baris dan kolom. Keypad ada berbagai macam
berdasarkan jumlah tombolnya, misalnya 3×4 dan 4×4. Keypad sebagai suatu input pada
beberapa peralatan yang berbasis mikroprosessor atau mikrokontroller.
Agar mikrokontroller dapat melakukan scan keypad, maka port mengeluarkan salah satu bit
dari 3 bit yang terhubung pada kolom dengan logika low “0” , selanjutnya membaca 4 bit
pada baris untuk menguji jika ada tombol yang ditekan pada kolom tersebut. Banyak
peralatan yang menggunakan keypad, misalnya : remote control TV, handphone, dll.
Scanning Keypad Matrix
Konfigurasi wiring diagram antara keypad matrix dan microcontroller menentukan
bagaimana scanning dilakukan. Apakah dengan scanning kolom atau baris. Setelah
menentukan kolom atau baris, langkah selanjutnya kurang lebih sama. Misalkan dengan
menggunakan kolom sebagai scanning. Dengan gambar contoh keypad matrix 4x4 tersebut.
D. RANGKAIAN PERCOBAAN
E. LANGKAH PERCOBAAN
1. Buka dan buat project di Proteus.
2. Rangkailah project simulasi Arduino untuk Komunikasi Serial.
3. Buka Visual Studio Code / Arduino IDE / Arduino Genuino.
4. Buat programnya dan jalankan, pastikan tidak ada error.
F. PROGRAM
1. Percobaan 1, Menampilkan input keypad di serial monitor pada Tinkercad
2. Percobaan 2, Menampilkan input keypad di serial monitor pada Proteus
Output:
Ketika tombol “1” atau “*” keypad ditekan maka LED pada pin13 akan menyala,
namun saat dilepas LED akan padam. Lalu ketika tombol “*” di hold (ditekan &
tahan) maka LED akan berkedip-kedip.
5. Percobaan 5, Menggunakan Arduino sebagai kalkulator dengan input Keypad.
Rangkaian dan code merujuk ke website di bawah:
https://circuitdigest.com/microcontroller-projects/arduino-calculator-using-4x4-keypad
6. Modifikasi dari percobaan 4, untuk menyalakan LED pada pin 13 tidak hanya
menggunakan 2 tombol keypad!
char keys[ROW_NUM][COLUMN_NUM] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
void setup(){
Serial.begin(9600);
}
void loop(){
char key = keypad.getKey();
if (key){
Serial.println(key);
}
}
2. Percobaan 2, Menampilkan input keypad di serial monitor pada Proteus
#include <Keypad.h>
const int ROW_NUM = 4;
const int COLUMN_NUM = 3;
char keys[ROW_NUM][COLUMN_NUM] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
void setup(){
Serial.begin(9600);
}
void loop(){
char key = keypad.getKey();
if (key){
Serial.println(key);
}
}
3. Percobaan 3, Menampilkan input keypad di LCD 16x2 pada Proteus. (Karakter bebas)
Misalkan di baris atas (0,0) tuliskan Nama Anda, di baris bawah (0,1) scanning karakter
keypad.
#include <Keypad.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(A0,A1,A2,A3,A4,A5);
const int ROW_NUM = 4;
const int COLUMN_NUM = 3;
char keys[ROW_NUM][COLUMN_NUM] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
void setup(){
lcd.begin(16, 2);
lcd.print("~ Akhmad A.L~");
}
void loop(){
{
char key = keypad.getKey();
lcd.setCursor(0, 1);
lcd.print("SEC= ");
lcd.print(millis() / 1000);
if(key)
{
lcd.setCursor(9, 1);
lcd.print("KEY= ");
lcd.print(key);
}
}
}
#include <Keypad.h>
char keys[ROW_NUM][COLUMN_NUM] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
void setup() {
Serial.begin (9600);
pinMode (13, OUTPUT);
digitalWrite (13, LOW);
keypad.addEventListener(keypadEvent);
}
void loop() {
char key=keypad.getKey();
if (key)
{
Serial.println(key);
}
if (blink)
{
digitalWrite(13, !digitalRead(13));
delay (150);
}
}
case '*':
digitalWrite(13, !digitalRead(13));
break;
}
break;
case RELEASED:
switch (key)
{
case '*':
digitalWrite(13, !digitalRead(13));
blink = false;
break;
}
break;
case HOLD:
switch (key)
{
case '*':
blink = true;
break;
}
break;
}
}
5. Percobaan 5, Menggunakan Arduino sebagai kalkulator dengan input Keypad. Rangkaian dan
code merujuk ke website di bawah:
https://circuitdigest.com/microcontroller-projects/arduino-calculator-using-4x4-keypad
#include <LiquidCrystal.h>
#include <Keypad.h>
char keys[ROWS][COLS] = {
{'7','8','9','D'},
{'4','5','6','C'},
{'1','2','3','B'},
{'*','0','#','A'}
};
byte rowPins[ROWS] = { 0, 1, 2, 3 };
byte colPins[COLS] = { 4, 5, 6, 7 };
void setup() {
lcd.begin(16, 2);
lcd.print("DIY Calculator");
lcd.setCursor(0, 1);
lcd.print("Atip Gaol");
delay(2000);
lcd.clear();
}
void loop() {
key = kpd.getKey();
if (key!=NO_KEY)
DetectButtons();
if (result==true)
CalculateResult();
DisplayResult();
}
void DetectButtons()
{
lcd.clear();
if (key=='*')
{Serial.println ("Button Cancel"); Number=Num1=Num2=0; result=false;}
if (key == '1')
{Serial.println ("Button 1");
if (Number==0)
Number=1;
else
Number = (Number*10) + 1;
}
if (key == '4')
{Serial.println ("Button 4");
if (Number==0)
Number=4;
else
Number = (Number*10) + 4;
}
if (key == '7')
{Serial.println ("Button 7");
if (Number==0)
Number=7;
else
Number = (Number*10) + 7;
}
if (key == '0')
{Serial.println ("Button 0");
if (Number==0)
Number=0;
else
Number = (Number*10) + 0;
}
if (key == '2')
{Serial.println ("Button 2");
if (Number==0)
Number=2;
else
Number = (Number*10) + 2;
}
if (key == '5')
{Serial.println ("Button 5");
if (Number==0)
Number=5;
else
Number = (Number*10) + 5;
}
if (key == '8')
{Serial.println ("Button 8");
if (Number==0)
Number=8;
else
Number = (Number*10) + 8;
}
if (key == '#')
{Serial.println ("Button Equal");
Num2=Number;
result = true;
}
if (key == '3')
{Serial.println ("Button 3");
if (Number==0)
Number=3;
else
Number = (Number*10) + 3;
}
if (key == '6')
{Serial.println ("Button 6");
if (Number==0)
Number=6;
else
Number = (Number*10) + 6;
}
if (key == '9')
{Serial.println ("Button 9");
if (Number==0)
Number=9;
else
Number = (Number*10) + 9;
}
if (key == 'A' || key == 'B' || key == 'C' || key == 'D')
{
Num1 = Number;
Number =0;
if (key == 'A')
{Serial.println ("Addition"); action = '+';}
if (key == 'B')
{Serial.println ("Subtraction"); action = '-'; }
if (key == 'C')
{Serial.println ("Multiplication"); action = '*';}
if (key == 'D')
{Serial.println ("Devesion"); action = '/';}
delay(100);
}
void CalculateResult()
{
if (action=='+')
Number = Num1+Num2;
if (action=='-')
Number = Num1-Num2;
if (action=='*')
Number = Num1*Num2;
if (action=='/')
Number = Num1/Num2;
}
void DisplayResult()
{
lcd.setCursor(0, 0);
lcd.print(Num1); lcd.print(action); lcd.print(Num2);
if (result==true)
{lcd.print(" ="); lcd.print(Number);}
lcd.setCursor(0, 1);
lcd.print(Number);
}
6. Modifikasi dari percobaan 4, untuk menyalakan LED pada pin 13 tidak hanya menggunakan
2 tombol keypad!
#include <Keypad.h>
char keys[ROW_NUM][COLUMN_NUM] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
void setup() {
Serial.begin (9600);
pinMode (6, OUTPUT);
digitalWrite (6, LOW);
keypad.addEventListener(keypadEvent);
}
void loop() {
char key=keypad.getKey();
if (key)
{
Serial.println(key);
}
if (blink)
{
digitalWrite(6, !digitalRead(6));
delay (150);
}
}
case '*':
digitalWrite(6, !digitalRead(6));
break;
case '5':
digitalWrite(6, !digitalRead(6));
break;
}
break;
case RELEASED:
switch (key)
{
case '*':
digitalWrite(6, !digitalRead(6));
blink = false;
break;
case '5':
digitalWrite(6, !digitalRead(6));
blink = false;
break;
}
break;
case HOLD:
switch (key)
{
case '*':
blink = true;
break;
case '5':
blink = true;
break;
}
break;
}
}
H. KESIMPULAN
Setelah melakukan percobaan ini kita dapat membuat dan mengatur nyala LED menggunakan
keypad