Anda di halaman 1dari 24

PRAKTIKUM INTERFACING & MIKROKONTROLLER

PERCOBAAN 5
KEYPAD UNTUK MENAMPILKAN KARAKTER PADA LCD DAN
MENGATUR NYALA LED

Disusun oleh:
Faris Rizki Ramadhani (1941220010)

PRODI D-IV TEKNIK OTOMOTIF ELEKTRONIK


TEKNIK MESIN
POLITEKNIK NEGERI MALANG
2021/2022
PRAKTIKUM INTERFACING & MIKROKONTROLLER
PERCOBAAN 5
KEYPAD UNTUK MENAMPILKAN KARAKTER PADA LCD DAN
MENGATUR NYALA LED

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.

Gambar 1. Model Keypad 3x4 (Kiri) dan 4x4 (Kanan)

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.

Gambar 2. Skema rangkaian keypad 4x4

1. Membuat definisi dari setiap tombol keypad


2. Nilai logika kolom 1, 2, 3, dan 4 akan berubah-ubah
3. Proses scanning kolom dengan hanya satu kolom yang memiliki nilai logika
high
4. Pada saat kolom 1 memiliki logika high, maka kolom lainnya akan
memiliki nilai logika low
5. Kondisi tersebut bergantian terus-menerus untuk semua kolom
6. Berikutnya ialah menunggu baris mana yang ditekan
7. Misal untuk menekan angka 1, baris pertama yang ditekan, dengan scanning
display pada kolom 1
8. Dengan demikian, microcontroller akan mengenali input data yang
ditekan kolom 1, baris 1, ialah tombol 1 yang telah didefinisikan
sebelumnya
C. HARDWARE
1. Arduino Uno
2. Breadboard
3. Kabel Jumper
4. Keypad 3x4 / 4x4
5. Resistor 330 Ohm
6. Kabel Data USB

D. RANGKAIAN PERCOBAAN

Gambar 3. Skema koneksi pin keypad 4x4


Gambar 8. Tabel dan skema koneksi pin keypad 3x4

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.

5. Copy as path file “firmware.hex” pada board Arduino UNO di Proteus


6. Jalankan simulasi rangkaian, Run the Simulation.

Langkah Percobaan pada Hardware Arduino


1. Tancapkan USB serial ke komputer.
2. Pastikan drivernya sudah terinstall dan dikenali dengan benar.
3. Cek driver, lihat port COM dan samakan pada software Arduino IDE.

4. Jalankan Arduino dan buat programnya.

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:

Keypad (saat ditekan) Serial Monitor


1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
0 0
# #
* *
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.

4. Percobaan 4, Menyalakan LED pada Pin 13 menggunakan keypad.


HASIL HARDWARE :

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!

G. ANALISIS HASIL PERCOBAAN


1. Percobaan 1, Menampilkan input keypad di serial monitor pada Tinkercad
#include <Keypad.h>
const int ROW_NUM = 4;
const int COLUMN_NUM = 4;

char keys[ROW_NUM][COLUMN_NUM] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};

byte pin_rows[ROW_NUM] = {9,8,7,6};


byte pin_column[COLUMN_NUM] = {5,4,3,2};

Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM,


COLUMN_NUM );

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','#'}
};

byte pin_rows[ROW_NUM] = {10,9,8,7};


byte pin_column[COLUMN_NUM] = {13,12,11};

Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM,


COLUMN_NUM );

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','#'}
};

byte pin_rows[ROW_NUM] = {10,9,8,7};


byte pin_column[COLUMN_NUM] = {13,12,11};

Keypad keypad = Keypad(makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM );


int cursorColumn = 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);
}
}
}

4. Percobaan 4, Menyalakan LED pada Pin 13 menggunakan keypad.

#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','#'}
};

byte pin_rows[ROW_NUM] = {5,4,3,2};


byte pin_column[COLUMN_NUM] = {8,7,6};

Keypad keypad = Keypad(makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM


);
boolean blink = false;

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);
}
}

void keypadEvent (KeypadEvent key){


switch (keypad.getState())
{
case PRESSED:
switch (key)
{
case '1':
digitalWrite(13, !digitalRead(13));
break;

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>

const byte ROWS = 4;


const byte COLS = 4;

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 };

Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13;


LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
long Num1,Num2,Number;
char key,action;
boolean result = false;

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>

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','#'}
};

byte pin_rows[ROW_NUM] = {10,9,8,7};


byte pin_column[COLUMN_NUM] = {13,12,11};

Keypad keypad = Keypad(makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM );


boolean blink = false;

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);
}
}

void keypadEvent (KeypadEvent key){


switch (keypad.getState())
{
case PRESSED:
switch (key)
{
case '1':
digitalWrite(6, !digitalRead(6));
break;

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

Anda mungkin juga menyukai