• Tidak ada hasil yang ditemukan

PERCOBAAN KEYPAD

Dalam dokumen Buku Petunjuk Praktikum Mikrokontroler (Halaman 46-53)

TUJUAN:

1. Mahasiswa memahami rangkaian interface keypad 4x4 dengan mikrokontroller 2. Mahasiswa memahami library Arduino untuk pengambilan data keypad

3. Mahasiswa memahami library Arduino untuk pengambilan data keypad dan mengeluarkan ke LCD Karakter

PERALATAN

1. Sebuah Komputer

2. Satu set trainer mikrokontroler

DASAR TEORI

Keypad sering digunakan sebagai suatu input pada beberapa peralatan yang berbasis mikroprosessor atau mikrokontroller. Keypad sesungguhnya terdiri dari sejumlah saklar, yang terhubung sebagai baris dan kolom dengan susuan seperti yang ditunjukkan pada gambar 6.1. Agar mikrokontroller dapat melakukan scan keypad, maka port mengeluarkan salah satu bit dari 4 bit yang terhubung pada kolom dengan logika low “0” dan selanjutnya membaca 4 bit pada baris untuk menguji jika ada tombol yang ditekan pada kolom tersebut. Sebagai konsekuensi, selama tidak ada tombol yang ditekan, maka mikrokontroller akan melihat sebagai logika high “1” pada setiap pin yang terhubung ke baris.

Gambar 6.1. Skema Keypad 4X4

Konstruksi matrix keypad 4×4 diatas cukup sederhana, yaitu terdiri dari 4 baris dan 4 kolom dengan keypad berupas saklar push buton yang diletakan disetiap persilangan kolom dan barisnya. Rangkaian matrix keypad diatas terdiri dari 16 saklar push buton dengan konfigurasi 4 baris dan 4 kolom. 8 line yang terdiri dari 4 baris dan 4 kolom tersebut dihubungkan dengan port mikrokontroler 8 bit. Sisi baris dari matrix keypad ditandai dengan nama Row1, Row2, Row3 dan Row4 kemudian sisi kolom ditandai

47 LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA

dengan nama Col1, Col2, Col3 dan Col4. Sisi input atau output dari matrix keypad 4×4 ini tidak mengikat, dapat dikonfigurasikan kolom sebagi input dan baris sebagai output atau sebaliknya tergantung programernya.

Proses Scaning Matrix Keypad 4×4 Untuk Mikrokontroler Proses scaning untuk membaca penekanan tombol pada matrix keypad 4×4 untuk mikrokontroler diatas dilakukan secara bertahap kolom demi kolom dari kolom pertama sampai kolom ke 4 dan baris pertama hingga baris ke 4. Program untuk scaning matrix keypad 4×4 dapat bermacam-macam, tapi pada intinya sama. Misal kita asumsikan keyapad aktif LOW (semua line kolom dan baris dipasang resistor pull-up) dan dihubungkan ke port mikrokontrolr dengan jalur kolom adalah jalur input dan jalur baris adalah jalur output maka proses scaning matrix keypad 4×4 diatas dapat dituliskan sebagai berikut. Mengirimkan logika Low untuk kolom 1 (Col1) dan logika HIGH untuk kolom yang lain kemudian membaca data baris, misal tombol SW1 ditekan maka data baris pertama (Row1) akan LOW sehingga data baris yang dibaca adalah 0111, atau tombol yang ditekan tombol SW5 maka data pada baris ke 2 akan LOW sehingga data yang terbaca 1011, atau tombol SW9 yang ditekan sehingga data yang terbaca 1101, atau tombol SW13 yang ditekan maka data yang dibaca adalah 1110 dan atau tidak ada tombol pada kolom pertama yang di tekan maka data pembacaan baris akan 1111. Mengirimkan logika Low untuk kolom 2 (Col2) dan logika HIGH untuk kolom yang lain kemudian membaca data baris, misal tombol SW1 ditekan maka data baris pertama (Row1) akan LOW sehingga data baris yang dibaca adalah 0111, atau tombol yang ditekan tombol SW5 maka data pada baris ke 2 akan LOW sehingga data yang terbaca 1011, atau tombol SW9 yang ditekan sehingga data yang terbaca 1101, atau tombol SW13 yang ditekan maka data yang dibaca adalah 1110 dan atau tidak ada tombol pada kolom pertama yang di tekan maka data pembacaan baris akan 1111. Mengirimkan logika Low untuk kolom 3 (Col3) dan logika HIGH untuk kolom yang lain kemudian membaca data baris, misal tombol SW1 ditekan maka data baris pertama (Row1) akan LOW sehingga data baris yang dibaca adalah 0111, atau tombol yang ditekan tombol SW5 maka data pada baris ke 2 akan LOW sehingga data yang terbaca 1011, atau tombol SW9 yang ditekan sehingga data yang terbaca 1101, atau tombol SW13 yang ditekan maka data yang dibaca adalah 1110 dan atau tidak ada tombol pada kolom pertama yang di tekan maka data pembacaan baris akan 1111. Mengirimkan logika Low untuk kolom 4 (Col4) dan logika HIGH untuk kolom yang lain kemudian membaca data baris, misal tombol SW1 ditekan maka data baris pertama (Row1) akan LOW sehingga data baris yang dibaca adalah 0111, atau tombol yang ditekan tombol SW5 maka data pada baris ke 2 akan LOW sehingga data yang terbaca 1011, atau tombol SW9 yang ditekan sehingga data yang terbaca 1101, atau tombol SW13 yang ditekan maka data yang dibaca adalah 1110 dan atau tidak ada tombol pada kolom pertama yang di tekan maka data pembacaan baris akan 1111. Kemudian data pembacaan baris ini diolah sebagai

48 LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA

pembacaan data penekanan tombol keypad. Sehingga tiap tombol pada matrix keypad 4×4 diatas dengan teknik scaning tersebut akan menghasilkan data penekanan tiap-tiap tombol sebagai berikut.

SW1 = 0111 0111 SW9 = 0111 1101 SW2 = 1011 0111 SW10 = 1011 1101 SW3 = 1101 0111 SW11 = 1101 1101 SW4 = 1110 0111 SW12 = 1110 1101 SW5 = 0111 1011 SW13 = 0111 1110 SW6 = 1011 1011 SW14 = 1011 1110 SW7 = 1101 1011 SW15 = 1101 1110 SW8 = 1110 1011 SW16 = 1110 1110

Data port mikrokontroler, misalkan pada SW2 = 1011 0111 tersebut terbagi dalam nible atas dan nible bawah dimana data nible atas (1011) merupakan data yang kita kirimkan sedangkan data nible bawah (0111) adalah data hasil pembacaan penekanan tombol keypad SW2 pada proses scaning matrix keypad 4×4 diatas.

Gambar 6.2. Interfacing Keypad 4X4 ke Mikrokontroler Percobaan 8

Untuk memahami prinsip kerja dari sebuah keypad dengan program Arduino dapat dicoba untuk program dibawah ini.

#include <Keypad.h>

const byte ROWS = 4; //four rows const byte COLS = 4; //four columns char keys[ROWS][COLS] = {

49 LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA

{'4','5','6', 'B'}, {'7','8','9', 'C'}, {'*','0','#', 'D'} };

byte rowPins[ROWS] = {5, 4, 3, 2}; //connect to the row pinouts of the keypad byte colPins[COLS] = {9, 8, 7, 6}; //connect to the column pinouts of the keypad

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

void setup(){ Serial.begin(9600); }

void loop(){

char key = keypad.getKey();

if (key){

Serial.println(key); }

}

Untuk contoh program yang kedua dapat diketikkan program berikut ini. #include <Keypad.h>

const byte ROWS = 4; //four rows const byte COLS = 4; // four columns char keys[ROWS][COLS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} };

byte rowPins[ROWS] = {5, 4, 3, 2}; //connect to the row pinouts of the keypad byte colPins[COLS] = {9, 8, 7, 6}; //connect to the column pinouts of the keypad Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); unsigned long loopCount = 0;

unsigned long timer_t = 0; void setup(){

50 LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA

// Try playing with different debounceTime settings to see how it affects // the number of times per second your loop will run. The library prevents // setting it to anything below 1 millisecond.

kpd.setDebounceTime(10); // setDebounceTime(mS) }

void loop(){

char key = kpd.getKey();

// Report the number of times through the loop in 1 second. This will give // you a relative idea of just how much the debounceTime has changed the // speed of your code. If you set a high debounceTime your loopCount will // look good but your keypresses will start to feel sluggish.

if ((millis() - timer_t) > 1000) {

Serial.print("Your loop code ran "); Serial.print(loopCount);

Serial.println(" times over the last second"); loopCount = 0; timer_t = millis(); } loopCount++; if(key) Serial.println(key); }

Berikut ini contoh untuk multi key dari sebuah keypad #include <Keypad.h>

const byte ROWS = 4; //four rows const byte COLS = 4; //four columns char keys[ROWS][COLS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} };

byte rowPins[ROWS] = {5, 4, 3, 2}; //connect to the row pinouts of the kpd byte colPins[COLS] = {9, 8, 7, 6}; //connect to the column pinouts of the kpd Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); unsigned long loopCount;

unsigned long startTime; String msg;

51 LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA

void setup() { Serial.begin(9600); loopCount = 0; startTime = millis(); msg = ""; } void loop() { loopCount++; if ( (millis()-startTime)>5000 ) {

Serial.print("Average loops per second = "); Serial.println(loopCount/5);

startTime = millis(); loopCount = 0; }

// Fills kpd.key[ ] array with up-to 10 active keys. // Returns true if there are ANY active keys. if (kpd.getKeys())

{

for (int i=0; i<LIST_MAX; i++) // Scan the whole key list. {

if ( kpd.key[i].stateChanged ) // Only find keys that have changed state. {

switch (kpd.key[i].kstate) { // Report active key state : IDLE, PRESSED, HOLD, or RELEASED case PRESSED: msg = " PRESSED."; break; case HOLD: msg = " HOLD."; break; case RELEASED: msg = " RELEASED."; break; case IDLE: msg = " IDLE."; } Serial.print("Key "); Serial.print(kpd.key[i].kchar); Serial.println(msg); } } } } // End loop

LANGKAH-LANGKAH PERCOBAAN

52 LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA

1. Nyalakan computer dengan program Arduino !

2. Sambungkan Trainer mikrokontroler dengan computer menggunakan kabel USB ! 3. Sambungkan kabel-kabel jumper sesuai dengan praktikum yang dilaksanakan ! 4. Ketiklah program yang diatas pada software Arduino !

5. Lakukan verifikasi terhadap program, apakah terjadi error atau tidak !

6. Jika tidak terjadi error lanjutkan dengan mengupload program ke dalam mikrokontroler ! 7. Amati hasilnya apakah sudah sesuai dengan perintah instruktur atau belum, kalau belum

53 LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA

Dalam dokumen Buku Petunjuk Praktikum Mikrokontroler (Halaman 46-53)

Dokumen terkait