Anda di halaman 1dari 28

LAPORAN PRAKTIKUM

MIKROPROSESOR DAN MIKROKONTROLER


MODUL III : KOMUNIKASI I2C, DIGITAL SENSOR, DAN
KEYPAD

DISUSUN OLEH :
Gymnastiar Putra Haningtyas
(20107008)

Praktikum Tanggal : 10 Desember 2021


Asisten Praktikum :
1. Dimas Aqil Nurfauzi (18101045)
2. Levina Anora (18101054)
3. Yulia Vironica (18101071)

LABORATORIUM TEKNIK ELEKTRONIKA DAN TEKNIK DIGITAL


FAKULTAS TEKNIK TELEKOMUNIKASI DAN ELEKTRO (FTTE)
INSTITUT TEKNOLOGI TELKOM
JL. D.I. PANJAITAN 128 PURWOKERTO
2021
MODUL III
Komunikasi I2C, Digital Sensor,
dan Keypad
I. DASAR TEORI
A. Komunikasi I2C
I2C atau Inter integrated Circuit merupakan salah satu fitur
komunikasi yang terdapat di dalam mikrokontroler Arduino. I2C ini
bekerja secara sinkronus dimana antara perangkat transimtter (pengirim
data) dan receiver (penerima data) dan bertukar informasi secara
lamgsung dalam waktu bersamaan. I2C memiliki 2 jalur data utama
yaitu SDA dan SCK, dimana SCK ini terhubung dengan sinyal input
yang berupa sinyal clock sedangkan untuk SDA ini akan terhubung
langsung dengan data yang diproses. Jenis protokol komunikasi I2C ini
dapat menghubungkan antar beberapa device sehingga dapat bertukar
data antara satu sama lain. Protokol komunkasi I2C ini memiliki
karakteristik serial synchronous half duplex bidirectional, dikarenakan
data yang ditransmisikan dari sebuah jalur terminal SDA (SDA Port)
hanya melalui satu jalur secara seri (serial), setiap proses transmisi data
dilakukan secara bergantian antar device yang saling terkoneksi (half
duplex), dan data yang ditransmisikan dapat berasal dari sebuah device
dikirim ke device lain itu yang dimaksud dengan bidirectional [1].

Gambar 3.1.1 Digram Blok Komunikasi I2C [1]


Berdasarkan skema digram blok diatas, terdapat satu set resistor pull
up yang dipasang pada power supply 5 Volt, resistor ini berfungsi untuk
menghasilkan ouput SDA dan SCL berlogika 1 atau HIGH agar
komunikasi I2C dapat bekerja pada seluruh device yang terhubung.
Kedua jalur pada protokol I2C ini (SDA dan SCK) keduanya bersifat
open drain dimana keduanya akan melalukan drive sehingga
keluarannya akan mendekati bahkan sama dengan logika 0 atau LOW.
Sehingga, jika tidak dipasang satu set resistor pull up, maka pada jalur
SDA dan SCL keluarannya akan berlogika atau mendekati logika 0 atau
LOW dan komunikasi pada bus data tidak akan bekerja sesuai dengan
fungsinya [1].
B. Digital Sensor
Berdasarkan keluarannya, sensor terbagi menajadi 2 yaitu sensor
analog dan sensor digital. Sensor analog menghasilkan output atau
keluaran yang berupa sinyal analaog yang bersifat kontinyu, salah satu
contoh dari sesnsor analog yaitu sensor suhu LM35 yang sudah dibahas
pada praktikum modul 2 kemarin. Keluaran atau output dari sinyal
analog berupa sinyal yang bersifat kontinyu (berlanjut), artinya
keluaran dari sinyal analog ini dapat bernilai dalam rentang
tertentu.contohnya pada sensor suhu LM35 yang masukkannya berupa
suhu dan kemudian dikonversi ke dalam bentuk tegangan melalui proses
ADC (Analog to Digital Converter). Sedangkan untuk sensor digital,
inputnya berupa besaran fisis seperti suhu, kelembapan dan lain – lain
dan keluaran atau outputnya berupa sinyal diskrit yaitu bernilai 1 atau 0
saja. Sehingga pada sensor digital tidak perlu lagi tambahan perangkat
ADC untuk menghasilnya sinyal keluaran yang berupa sinyal digital,
salah satu contoh sensor digital yaitu sensor DHT (Digital Humadity
Temperature). Sensor DHT memilki kemampuan untuk membaca atau
mendeteksi input yang berupa suhu dan kelembapan suatu objek [2].
Sensor DHT ini tergolong komponen yang sangat stabil jika
dibandingkan dengan sensor suhu yang outputnya masih analog.
Keungggulan dari sensor DHT ini antara lain produk berkualitas tinggi,
respon pembacaan yang cepat dan hasil pembacaan yang cukup akurat,
dan fitur anti-interferensi yang terjangkau. DHT11 menyediakan
kalibrasi presisi tinggi. Faktor kalibrasi ini disimpan dalam memori
program OTP , jadi jika sensor internal mendeteksi suhu atau
kelembapan, modul ini akan membaca koefisien sensor. Ukurannya
yang kecil, jarak transmisi sinyal cukup jauh dapat mencapai hingga 20
meter. Sehingga sensor DHT ini sangat efektif untuk diaplikasikan pada
alat pembacaan suhu dan kelembapan, jika dibandingkan dengan sensor
suhu LM35 yang hanya mampu mendeteksi suhu saja, akan tetapi dalam
sensor digital khususnya pada DHT ini, hasil keluaran tidak selalu
akurat karena pada sinyal digital dapat dipengaruhi oleh noise (derau)

atau faktor gangguan lain [2].

Gambar 3.1.2 Sensor Digital DHT11 [2]


Pada sensor DHT11 memiliki 3 pin atau kaki utama yaitu VCC,
DATA, dan GND (Ground), masing – masing pin memiliki fungsi
sendiri – sendiri antara lain sebagai berikut.
1. VCC
Pin VCC ini merupakan pin kutub positif pada sensor DHT ini. Pin
ini memiliki fungsi untuk menerima tegangan input dari catu daya
atau power supply untuk sumber tegangan.
2. DATA
Pin DATA ini berfungsi sebagai penghubung antara sensor DHT
dengan mikrokontroler, pin ini terhunbung pada pin digital
mikrokontroler. Setelah sensor DHT menerima sinyal input, maka
pin DATA akan menjadi perantara untuk sinyal input tadi menuju
ke mikrokontroler untuk diproses.
3. GND
Pin yang ketiga pada sensor DHT11 ini ialah pin GND atau Ground.
Pin ini berfungsi sebagai kutub 0 Volt pada sensor DHT11[2].
C. Keypad
Keypad merupakan salah satu perangkat input yang berupa tombol /
saklar tekan (push button) yang berfungsi untuk memasukkan (input)
beberapa karakter. Keypad merupakan salah satu jenis perangkat
antarmuka (interface) yang umum dijumpai pada embedded system
adalah keypad matrik 3x4 atau 4x4. Keypad biasanya digunakan pada
beberapa perlatan yang berbasis mikrokontroler. Pada penggunanya,
keypad terdiri dari beberapa sakar (button), yang saling terhubung jika
dilakukan penekanan pada bagian keypad sehingga antara kolom dan
baris terhubung. Agar mikrokontroler dapat melakukan scan keypad
harus diberikan logika LOW(“0”) ketika tombol keypad tidak ditekan
dan logika HIGH (“1”) pada saat keypad ditekan [3].

Gambar 3.1.3 Keypad Matrik 4x4 [3]


II. HASIL DATA
1. Percobaan Pertama Scanning Alamat I2C

Gambar 3.2.4 Percobaan Pertama


Kode Program Percobaan Pertama :
#include <Wire.h>
void setup()
{
Wire.begin();
Serial.begin(9600);
}
void loop()
{
byte error, address;
int nDevices;
Serial.println("Memindai....");
nDevices = 0;
for (address = 1; address < 127; address++)
{
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("I2C terbaca pada alamat 0x");
if (address < 16)
Serial.print("0");
Serial.print (address, HEX);
Serial.println(" !");
nDevices++;
}
}
if (nDevices == 0)
Serial.println ("Tidak ada satupun alamat I2C yang ditemukan\n");
else
Serial.println ("Selesai \n");
delay (3000);

2. Percobaan Kedua Akses Digital Sensor DHT 11

Gambar 3.2.5 Percobaan Kedua


Kode Program Percobaan Kedua :
#include<Wire.h>
#include<LiquidCrystal_I2C.h>
#include"DHT.h"
#define DHTPIN 8
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd (0x20, 16,2);
void setup ()
{
dht.begin();
lcd.init();
lcd.backlight();
}
void loop()
{
int humidity = dht.readHumidity();
float celcius = dht.readTemperature();
lcd.setCursor(0,0);
lcd.print("Hum :");
lcd.print(humidity);
lcd.print("%");
lcd.setCursor(0,1);
lcd.print("Temp:");
lcd.print(celcius);
lcd.print(char(223));
lcd.print("C");
delay (500);
}
3. Percobaan Ketiga Akses Keypad Matrix 4x4

Gambar 3.2.6 Percobaan Ketiga


Kode Program Percobaan Ketiga :
#include <Keypad.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd (0x20, 16,2);
const byte ROWS =4;
const byte COLS =4;
char keys [ROWS][COLS] = {
{'7', '8', '9', 'A'},
{'4', '5', '6', 'B'},
{'1', '2', '3', 'C'},
{'*', '0', '#', 'D'},
};
byte rowPins[ROWS] = {7, 6, 5, 4};
byte colPins[COLS] = {3, 2, 1, 0};
Keypad keypad = Keypad (makeKeymap(keys), rowPins, colPins,
ROWS, COLS);
void setup()
{
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Key Is : ");
}
void loop()
{
char key = keypad.getKey();
if (key){
lcd.setCursor(9,0);
lcd.print(key);
}
}
4. Percobaan Keempat Membuat Sistem Login Sederhana

Gambar 3.2.7 Percobaan Keempat Berhasil Login


Gambar 3.2.8 Percobaan Keempat Gagal Login
Kode Program Percobaan Keempat :
#include <Keypad.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd (0x20, 16,2);
byte state;
byte code;
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS]={
{'7', '8', '9', 'A'},
{'4', '5', '6', 'B'},
{'1', '2', '3', 'C'},
{'*', '0', '#', 'D'},
};
byte rowPins[ROWS] = {7, 6, 5, 4};
byte colPins[COLS] = {3, 2, 1, 0};
char data_pass[6] = "123456";
Keypad keypad = Keypad (makeKeymap(keys), rowPins, colPins,
ROWS, COLS);
void setup()
{
lcd.init();
lcd.backlight();
reset();
}
void reset ()
{
lcd.clear();
lcd.setCursor (0,0);
lcd.print("Sistem Keamanan");
lcd.setCursor (0,1);
lcd.print ("PIN : ");
state = 0;
code = 0;
}
void gagal()
{
lcd.setCursor (0,0);
lcd.print("Password Salah!");
delay (2000);
lcd.clear();
reset();
}
void sukses()
{
a:
lcd.setCursor (0,0);
lcd.print("Login Sukses..!");
lcd.setCursor (0,1);
lcd.print("* : Logout");
char key = keypad.getKey();
if (key != '*')
{
goto a;
}
else
{
reset();
}
}
void loop()
{
char key = keypad.getKey();
if (key)
{
if (key != '#')
{
lcd.setCursor (state +5,1);
if (data_pass[state] == key)
{
code++;
}
else
{
code--;
}
lcd.print("*");
delay(100);
state++;
}
else
{
if (code == 6)
{
lcd.clear();
sukses();
}
else
{
lcd.clear();
gagal();
}
}
}
}
III. ANALISIS DAN PEMBAHASAN
Pada praktikum modul 3 kali ini, mahasiswa atau praktikan
melakukan suatu percobaan simulasi pengaplikasian protokol komunikasi
I2C (Inter Integrated Circuit) untuk mengakses sensor digital yang berupa
DHT11 (Digital Humidity Temperature) dan untuk mengakses perangkat
input yang berupa modul keypad matrix dengan ukuran 4x4. Berbeda
dengan praktikum modul sebelumnya, pada modull 3 kali ini, praktikan
melakukan simulasi percobaan melalui software proteus profesional untuk
membantu praktikan dalam merangkai rangkaian yang akan dibuat dalam
modul kali ini. Selain itu, setiap praktikan juga harus memasang software
Arduino IDE (Integrated Development Environment) untuk menuliskan
source code atau kode program yang akan dijalankan pada setiap percobaan
dalam modul ini. software proteus profesional dan Arduino IDE ini bersifat
offline, sehingga praktikan tidak perlu terhubung ke jaringan untuk
mengakses kedua software ini, berbeda dengan platform website tinkercad
yang harus terhubung ke jaringan terlebih dahulu agar dapat diakses oleh
praktikan.
Pada percobaan yang pertama, praktikan melakukan simulasi
pembacaan atau scanning alamat pada modul komunikasi I2C. . Praktikan
menggunakan board mikrokontroler Arduino UNO sebagai perangkat yang
mengendalikan modul atau sensor lain. I2C yang dipakai oleh praktikan
merupakan I2C yang bertipe PCF8574A yang sudah tersedia di dalam
software proteus. Modul I2C kemudian dihubungkan ke Arduino melalui
pin SDA dan SCL yang terhubung ke pin analog A4 dan A5, sedangkan
untuk pin analog pada modul I2C, A0, A1 ,dan A2 dihubungkan ke kutub
0V atau ground.. Selanjutnya, praktikan menuliskan kode program
pemindaian alamat I2C ini di dalam software Arduino IDE, setelah
melakukan compile dari kode program yang telah tertuliskan di software
Arduino IDE, agar dapat dijalankan di rangkaian yang sudah dibuat pada
software proteus, maka harus dicari file hex dari hasil compile tadi, lalu
dimasukkan ke dalam Arduino di proteus. Karena praktikum kali ini
menggunakan simulasi software, maka untuk menampilkan hasil dari
komunikasi serial dapat ditampilkan dengan bantuan instrumen virtual
terminal agar dapat menampilkan hasil pembacaan alamat I2C yang dapat
dipakai dalam simulasi percobaan selanjutnya.
Pada percobaan kedua, praktikan melakukan simulasi untuk
mengakses sensor digital DHT11 dan outputnya akan ditampilkan pada
display LCD 16x2. Untuk percobaan kedua dan seterusnya, LCD tidak
terhubung langsung dengan board Arduino, melainkan terhubung ke modul
I2C terlebih dahulu dan untuk menghubungkan antara LCD dengan
Arduino, dapat digunakan alamat I2C yang terpindai pada modul I2C yang
sudah didapatkan pada percobaan pertama tadi. Sensor digital DHT11 ini,
pada dasarnya sama dengan sensor LM35,akan tetapi sensor DHT memiliki
kelebihan yaitu lebih mudah dioperasikan jika dibandingkan dengan LM35.
Pada percobaan kedua ini, praktikan menghubungkan pin data pada sensor
DHT11 ke pin digital 8 Arduino, sedangkan untuk pin VCC dihubungkan
ke power dan pin GND dihubungkan ke kutub 0V. ketika rangkaian ini
dijalankan, maka sensor DHT akan membaca input yang berupa suhu dan
kelembaban dalam bentuk digital, dan kemudian hasil pembacaan tersebut
akan ditampilkan pada layar LCD. Perintah untuk membaca suhu dan udara
pada sensor DHT ini pada baris program berupa dht.readHumidity(); untuk
membaca kelembapan dan dht.readTemperature(); untuk membaca
parameter suhu.
Selanjutnya pada percobaan ketiga praktikan mencoba untuk
mensimulasikan cara mengakses modul keypad matrix 4x4 sebagai
perangkat input. Untuk output dari masukan keypad nanti akan ditampilkan
pada display LCD 16x2, untuk menghubungkan antara modul komunikasi
I2C dengan LCD, praktikan menambahkan alamat I2C 0x20 yang sudah
terpindai oleh virtual terminal ke dalam kode program percobaan ketiga ini
agar modul I2C dengan Arduino dan perangkat lain dapat berkomunikasi
secara serial. Ketika rangkaian percobaan ketiga ini dijalankan, maka pada
tampilan layar LCD akan menampilkan kalimat “Key is :” dan ada
perintah untuk memasukkan salah satu karakter dari keypad yang nantinya
karakter tersebut akan ditampilkan pada layar LCD. Jumlah karakter yang
dapat disimpan ke dalam variabel percobaan ketiga ini hanya satu digit saja,
karena di dalam kode program praktikan tidak membuat variabel array
(larik) yang dapat menyimpan karakter lebih dari satu. Sehingga apabila
user menginputkan karakter yang ada pada keypad, maka tampilan output
yang ditampilkan pada layar LCD akan berubah – ubah secara bergantian.
Untuk instruksi akses keypad ini di dalam kode program berupa
perintah char key = keypad.getKey(); yang berarti variabel key akan
menyimpan karakter yang diinputkan oleh user melalui keypad.
Pada percobaan keempat, praktikan masih menggunakan rangkaian
yang sama dengan rangkaian percobaan ketiga akan tetapi, praktikan
mengubah kode program pada Arduino IDE. Percobaan keempat ini tentang
sistem login sederhana menggunakan modul keypad matrix 4x4, untuk
jumlah digit password diatur sebanyak 6 digit angka berdasarkan instruksi
yang terdapat pada kode program percobaan keempat ini yaitu char
data_pass[6] = "123456"; yang artinya, variabel data password dapat
menyimpan 6 digit karakter dan karakter yang dapat disimpan itu hanya
angka 1 sampai 6, selain karakter itu maka tidak dapat disimpan ke dalam
variabel data password. Ketika rangkaian percobaan keempat ini dijalankan,
maka akan muncul perintah kepada user untuk memasukkan pin, kemudian
pin yang diinputkan oleh user akan disimpan ke dalam variabel data
password untuk diproses selanjutnya. Di dalam kode program percobaan ini
terdapat 3 function yang dipakai antara lain yang pertama yaitu void reset ()
Yang berfungsi untuk mengembalikan ke perintah awal yaitu menginputkan
pin lagi ketika user salah memasukkan pin. Kemudian function yang kedua
yaitu void gagal (), dimana di dalam void gagal () ini terdapat perintah untuk
menampilkan peringatan “Password Salah” ketika nilai variabel yang
diinputkan oleh user tidak sama dengan nilai dari variabel data password
yang sudah ditentukan di dalam kode program. Kemudian function yang
ketiga yaitu void sukses (), di dalam function ini terdapat instruksi untuk
menampilkan kalimat “Login Sukses” dan terdapat pilihan untuk logout
dengan cara menekan karakter “ * ” agar kembali ke instruksi di awal tadi
yaitu memasukkan pin untuk memasuki sistem login sederhana ini.
IV. KESIMPULAN DAN SARAN
A. Kesimpulan
1. Untuk menampilkan hasil pemindaian alamat I2C ketika simulasi
rangkaian menggunakan software proteus, rangkaian dihubungkan
ke virtual terminal untuk menampilkan hasil komunikasi serial
monitor dikarenakan pada software proteus belum ada fitur serial
monitor Arduino.
2. Alamat I2C yang terpindai dapat digunakan Arduino untuk
berkomunikasi dengan perangkat lain seperti LCD 16x2.
3. Dengan adanya alamat I2C ini, dapat mengurangi penggunaan pin
pada board Arduino karena perangkat lain dapat terhubung melalui
komunikasi dengan alamat I2C.
4. Pada modul keypad 4x4, posisi karakter baik yang vertikal maupun
horizontal dapat diubah – ubah sesuai dengan posisi karakter pada
array dalam kode program.
5. Sensor DHT11 dapat membaca suhu dan tekanan dari lingkungan
tanpa adanya proses ADC (Analog to Digital Converter) karena
DHT11 ini merupakan sensor digital.
B. Saran
1. Sebelum praktikum dimulai, alangkah baiknya disiapkan terlebih
dahulu tentang software apa saja yang diperlukan dan bagaimana
cara pemasangannya, agar waktu ketika praktikum berlangsung
tidak berkurang karena kendala software.
2. Praktikan diharapkan lebih aktif dan interaktif lagi ketika praktikum
berlangsung.
3. Pada percobaan ketiga tentang akses modul keypad sebaiknya di
dalam kode program ditambahkan operasi hitung aritmatika, agar
simulasi rangkaian percobaan ketiga sama seperti algoritma pada
kalkulator.
V. DAFTAR PUSTAKA
[1] S. Frans, “I2C Protokol,” Bina Nusant. Univ., pp. 1–3, 2007, [Online].
Available: http://comp-eng.binus.ac.id/files/2014/05/Artikel-I2C-
Protokol.pdf.
[2] M. Adiptya and H. Wibawanto, “Sistem Pengamatan Suhu Dan
Kelembaban Pada Rumah Berbasis Mikrokontroller ATmega8,” J.
Tek. Elektro Unnes, vol. 5, no. 1, pp. 15–17, 2013, doi:
10.15294/jte.v5i1.3548.
[3] D. L. Fay, “Penerapan Media Sketchup Dengan Model Pembelajaran
Langsung Pada Kompetensi Dasar Menerapkan Prosedur Pembuatan
Gambar Detail Konstruksi Jembatan Di Smkn 1 Mojokerto,” Angew.
Chemie Int. Ed. 6(11), 951–952., vol. 3, pp. 3–15, 1967.
VI. LAMPIRAN
1. Jawablah 14 pertanyaan yang telah disisipkan di setiap percobaan !
1. Apa fungsi dari serial monitor ?
Jawaban
Untuk mengirim dan menerima data secara serial melalui perantara
kabel USB.
2. Apa maksud dari potongan program berikut?
for (address = 1; address < 127; address++ )
Jawaban
Potongan progran diatas merupakan bentuk dari perluangan for
dimana variabel address akan menghitung naik (up count) mulai
dari ketika variabel address bernilai 1 dan akan berhenti ketika
sudah mencapai angka 126.
3. Jika I2C bisa mengalamatkan sebanyak 127 alamat, pada alamat ke
berapa I2C yang digunakan terdeteksi?
Jawaban
Pada alamat ke 20.
4. Apa fungsi dari modul I2C, apa bedanya dengan menggunakan dan
tidak menggunakan modul I2C pada LCD 16x2?
Jawaban
Fungsi dari modul I2C ini ialah untuk mempersingkat program
LCD 16 x 2 pada mikrokontroler, selain itu juga bisa menghemat
pin karena pin output dari modul I2C ini hanya terdiri dari 4 pin
(VCC, GND, SDA, dan SCL).
5. Apa bedanya pada saat kemarin menggunakan LM35 dan sekarang
menggunakan DHT 11?
Jawaban
LM35 hanya mampu mendeteksi besaran suhu saja, sedangkan
untuk DHT 11 mampu mendeteksi 2 besaran fisis sekaligus yaitu
suhu dan kelembapan.
6. Kenapa DHT 11 disebut sensor digital? Dan kenapa LM35 disebut
sensor analog?
Jawaban
Karena pada sensor suhu LM35 hanya bekerja pada pin analog
mikrokontroler dan sebelum mendapatkan ouput berupa suhu,
LM35 memerlukan proses konversi ADC (Analog to Digital
Converter). Sedangkan pada DHT 11 hanya bekerja pada pin digital
mikrokontroler,dan tidak memerlukan proses ADC.
7. Apa fungsi dari sebuah library?
Jawaban
Library di dalam sebuah sketch program mikrokontroler berfungsi
untuk mengambil dan menjalankan semua instruksi yang terdapat
di dalam library tersebut.
8. Kenapa keypad yang digunakan disebut keypad matrix?
Jawaban
Karena susunan dari keypad 4x4 yang dipakai pada praktikum kali
ini, susunan dan urutan tombolnya berdasarkan konsep matriks
4x4 ( 4 kolom dan 4 baris).
9. Apa maksud dari potongan program berikut :
char key = keypad.getKey ();
if (key)
Jawaban
Pada variabel key yang bertipe data char akan menampung nilai
yang dimasukkan oleh user. Kemudian untuk if (key) merupakan
statement pemilihan atau selection dengan parameter yang sudah
ditentukan pada programnya.
10. Apa fungsi dari sebuah void / fungsi?
Jawaban
void atau fungsi merupakan sebuah tempa / fungsi kosong yang
dapat diisi dengan beberapa instruksi dan instruksi yang terdapat di
dalam fungsi tersebut, dijalankan dengan cara memanggil nama
fungsi tesebut di dalam fungsi utama.
11. Mengapa pada percobaan ke 4 variabel data_pass menggunakan tipe
data char dan array?
Jawaban
Karena password yang dimasukkan oleh user berupa kombinasi
angka dan karakter, maka variabel data_pass sebagai tempat
menyimpan karakter yang dimasukkan oleh user harus bertipe char.
Jumlah password yang dimasukkan oleh user lebih dari satu
karakter, maka dibutuhkan sebuah array (larik) untuk menyimpan
beberapa karakter yang dimasukkan oleh user.
12. Mengapa dibutuhkan void reset?
Jawaban
Fungsi reset digunakan untuk mengembalikan tampilan layar ke
posisi semula jika user salah memasukkan password, jika fungsi
reset ini tidak ada, maka ketika user salah memasukkan password,
maka user tidak dapat memasukkan password lagi.
13. Apa maksud dari potongan program berikut :
goto a;
Jawaban
Perintah untuk menjalankan atau pergi ke label a, dimana di dalam
labe a tersebut terdapat beberapa instruksi untuk menjalankan lcd
16 x 2.
14. Mengapa pada saat percobaan ke 3 key yang ditekan berubah –
ubah di LCD, tidak bergeser ke kanan?
Jawaban
Karena pada percobaan yang ke 3 tidak terdapat sebuah variabel
yang mampu menampung karakter yang berjumlah lebih dari 1,
sehingga pada percobaan 3 ini, output pada LCD hanya 1 karakter
saja.
2. Modifikasilah program pada percobaan ke 4 sehingga memenuhi
ketentuan berikut :
a. Panjang digit adalah digit terkahir dari NIM praktikan.( Note : jika
digit terakhir NIM = 0, maka panjang digitnya adalah 10 digit ).
b. Jika sudah 3 kali gagal masuk, maka muncul tulisan “PIN
TERBLOKIR” dan user tidak dapat memasukkan pin lagi.
Jawaban

Gambar 3.6.9 Kondisi Ketika Login Berhasil

Gambar 3.6.10 Kondisi Ketika PIN Salah


Gambar 3.6.11 Kondisi Ketika PIN Terblokir
Kode Program Tugas Modul 3 :
#include <Keypad.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd (0x20, 16,2);
byte state;
byte code;
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS]={
{'7', '8', '9', 'A'},
{'4', '5', '6', 'B'},
{'1', '2', '3', 'C'},
{'*', '0', '#', 'D'},
};
byte rowPins[ROWS] = {7, 6, 5, 4};
byte colPins[COLS] = {3, 2, 1, 0};
char data_pass[8] = "1234ABCD"; // akhiran NIM 008
Keypad keypad = Keypad (makeKeymap(keys), rowPins, colPins,
ROWS, COLS);
int blocked = 0;
void setup()
{
lcd.init();
lcd.backlight();
reset();
}
void reset ()
{
lcd.clear();
lcd.setCursor (0,0);
lcd.print("Sistem Keamanan");
lcd.setCursor (0,1);
lcd.print ("PIN : ");
state = 0;
code = 0;
}
void gagal()
{
lcd.setCursor (0,0);
lcd.print("PIN Salah!");
lcd.setCursor (0,1);
lcd.print("Input Ulang!");
delay (2000);
lcd.clear();
reset();
}
void sukses()
{
a:
lcd.setCursor (0,0);
lcd.print("Login Sukses..!");
lcd.setCursor (0,1);
lcd.print("* : Logout");
char key = keypad.getKey();
if (key != '*')
{
goto a;
}
else
{
reset();
}
}
void blokir()
{
int i = 0;
while(i == 0)
{
lcd.setCursor (0,0);
lcd.print("3 kali Gagal!!!");
lcd.setCursor (0,1);
lcd.print("PIN TERBLOKIR");
}
}
void loop()
{
char key = keypad.getKey();
if (key)
{
if (key != '#')
{
lcd.setCursor (state +5,1);
if (data_pass[state] == key)
{
code++;
}
else
{
code--;
}
lcd.print("*");
delay(100);
state++;
}
else
{
if (code == 8)
{
lcd.clear();
sukses();
blocked = 0;
}
else
{
lcd.clear();
gagal();
blocked++;
if (blocked == 3)
{
blokir();
}
}
}
}
}

Anda mungkin juga menyukai