Anda di halaman 1dari 24

LAPORAN SISTEM TERBENAM DAN IOT

LCD

Disusun Oleh:
Putri Shafa Salsabella Helmi / 3.34.18.0.18
IK-3A

PROGRAM STUDI D3 TEKNIK INFORMATIKA


JURUSAN TEKNIK ELEKTRO
POLITEKNI NEGERI SEMARANG
2020/2021
I. Tujuan
1. Mahasiswa memahami rangkaian interface mikrokontroller dengan LCD
Karakter 2 x 16

2. Mahasiswa dapat memahami program Arduino untuk menampilkan data ke LCD


Karakter 2 x 16
3. Mahasiswa memahami beberapa instruksi pada library header liquidcrystal
4. Mahasiswa memahami mencetak karakter pada posisi baris dan kolom tertentu

II. Peralatan
1. Sebuah Komputer
2. Satu set trainer mikrokontroler

III. Dasar Teori


Modul LCD Character dapat dengan mudah dihubungkan dengan mikrokontroller seperti Arduino
Uno R3. LCD yang akan kita praktikumkan ini mempunyai lebar display 2 baris 16 kolom atau
biasa disebut sebagai LCD Character 2x16, dengan 16 pin konektor, yang didifinisikan sebagai
berikut:

Gambar 4.1 Komponen LCD 2 x 16

Display karakter pada LCD diatur oleh pin EN, RS dan RW:
1. Jalur EN dinamakan Enable. Jalur ini digunakan untuk memberitahu LCD bahwa anda
sedang mengirimkan sebuah data. Untuk mengirimkan data ke LCD, maka melalui program
EN harus dibuat logika low “0” dan set pada dua jalur kontrol yang lain RS dan RW. Ketika
dua jalur yang lain telah siap, set EN dengan logika “1” dan tunggu untuk sejumlah waktu
tertentu (sesuai dengan datasheet dari LCD tersebut ) dan berikutnya set EN ke logika low
“0” lagi.
2. Jalur RS adalah jalur Register Select. Ketika RS berlogika low “0”, data akan dianggap
sebagai sebuah perintah atau instruksi khusus ( seperti clear screen, posisi kursor dll ).
Ketika RS berlogika high “1”, data yang dikirim adalah data text yang akan ditampilkan
pada display LCD. Sebagai contoh, untuk menampilkan huruf “T” pada layar LCD maka RS
harus diset logika high “1”.
3. Jalur RW adalah jalur kontrol Read/ Write. Ketika RW berlogika low (0), maka informasi
pada bus data akan dituliskan pada layar LCD. Ketika RW berlogika high ”1”, maka
program akan melakukan pembacaan memori dari LCD. Sedangkan pada aplikasi umum pin
RW selalu diberi logika low ”0”.

Tabel 4.1. Pin LCD dan Fungsi

Pada percobaan dalam modul ini akan menggunakan modul Inter-Integrated Circuit
(I2C) sebagai perantara menangani perintah yang ada pada LCD. Sehingga posisi I2C ini
diantara LCD dan Arduino, dengan konsep menghemat pin yang digunakan arduino
untuk mengendalikan LCD. Pada umumnya LCD dikendalikan dengan menggunakan 6
jalur yang ada pada LCD : RS, EN, D7, D6, D5, dan D4. Jika diinginkan lebih simplekita
bisa menggunakan LCD shield yang bisa langsung integrated pada board. Tapi ketika kita
ingin menggunakan yang lebih simple dari segi ukuran I2C mungkin salah satu
jawabannya.
Gambar 4.2 Modul I2C
Hitachi 16 × 2 LCD menggunakan HD44780 sangat murah dan tersedia secara luas, dan
merupakan bagian penting untuk setiap proyek yang menampilkan informasi. Menggunakan
LCD, data yang diinginkan dapat ditampilkan pada LCD melalui bus I2C. Pada prinsipnya,
modul tersebut dibangun menggunakan PCF8574 (dari NXP) yang konsepnya adalah dua arah 8
bit I/O port expander yang menggunakan protokol I2C. PCF8574 adalah silikon CMOS sirkuit
sebagai pengendali I/O ekspansi (8-bit dua arah) bagi sebagian besar keluarga mikrokontroler
melalui dua jalur dua arah bus (I2C-bus). Perhatikan bahwa kebanyakan modul dibuat dari varian
PCF8574T (SO16 paket PCF8574 dalam paket DIP16) dengan alamat default slave 0x27. Jika
modul tertanam chip PCF8574AT(bisa dilihat dibagian belakangcipI2C), maka alamat slave
default akan berubah ke 0x3F. Singkatnya, ransel Anda didasarkan pada PCF8574T dan koneksi
alamat (A0-A1-A2) tidak dijembatani dengan solder akan memiliki 0x27 alamat slave.

Gambar 4.3 Letak Koneksi Alamat Logic I2C

Berikut merupakan rangkaian yang bisa dijadikan referensi untuk menghubungkan arduino
dengan LCD melalui modul I2C.
Gambar 4.4 Rangkaian I2C ke LCD

Berikut merupakan komponen I2C yang terpasang pada LCD dengan Pin yang dimiliki dan
fungsi tiap masing Pin.

Gambar 4.5 Pin I2C

Keterangan Konfigurasi kabel-kabel jumper:


• GND – GND
• VCC – 5V
• SDA - ANALOG Pin 4
• SCL - ANALOG pin 5

Pada kebanyakan papan Arduino, SDA (data line) adalah dihubungkan pada input analog pin 4,
dan SCL (clock line) pada input analog pin 5. Pada Arduino Mega SDA adalah digital pin 20 dan
SCL adalah 21. Pada baru Arduino UNO (The "V3" pinout), pin SCL dan SDA juga pada dua
paling kiri baru pin atas.

CATATAN: The Blue Potentiometer (Foto) menyesuaikan Kontras. Jika Anda tidak melihat
karakter apapun, sesuaikan. Mulai searah jarum jam dan kembali ke tempat karakter yang cerah
dan background tidak memiliki kotak di belakang karakter.
Gambar 4.6 Konfigurasi Kabel Jumper

Untuk membuat program yang nantinya akan memanfaatkan I2C yang berkomunikasi dengan
LCD, maka dibutuhkan alamat yang tepat dari modul I2C. Alamat ini akan berbeda-beda untuk
tiap device tergantung pada IC yang dipakai oleh modul I2C.

Melihat alamat yang dipakai untuk modul I2C dapat menggunakan program scanner yang
nantinya menghasilkan alamat yang dipakai pada modul I2C yang digunakan saat pengiriman
perintah pada LCD.

Scan device I2C dengan program berikut:

#include <Wire.h>

void setup()
{
Wire.begin();

Serial.begin(9600);
while (!Serial); // Leonardo: wait for serial monitor
Serial.println("\nI2C Scanner");
}

void loop()
{
byte error, address;
int nDevices;

Serial.println("Scanning...");

nDevices = 0;
for(address = 1; address < 127; address++ )
{
// The i2c_scanner uses the return value of
// the Write.endTransmisstion to see if // a
device did acknowledge to the address.
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("I2C device found at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");

nDevices++;
}
else if (error==4)
{
Serial.print("Unknow error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");

delay(5000); // wait 5 seconds for next scan }

Hasil bisa dilihat dengan menggunakan menu Serial Monitor yang beradapada kanan atas
Arduino IDE.

Gambar 4.7 Hasil Eksekusi Scan I2C

Mencoba mengirimkan karakter:


/*( Import needed libraries )*/
#include <Wire.h> // Comes with Arduino IDE
// Get the LCD I2C Library here:
// https://bitbucket.org/fmalpartida/newliquidcrystal/downloads
// Move any other LCD libraries to another folder or delete them
// See Library "Docs" folder for possible commands etc.
#include <LiquidCrystal_I2C.h>

/*( Declare Constants )*/


/*( Declare objects )*/
// set the LCD address to 0x27 for a 16 chars 2 line display
// A FEW use address 0x3F
// Set the pins on the I2C chip used for LCD connections:
// addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3,
POSITIVE); // Set the LCD I2C address
/*( Declare Variables )*/
//NONE

void setup() /*( SETUP: RUNS ONCE )*/


{
Serial.begin(9600); // Used to type in characters
lcd.begin(16,2); // initialize the lcd for 16 chars 2 lines, turn on
backlight

// Quick 3 blinks of backlight


for(int i = 0; i< 3; i++)
{
lcd.backlight();
delay(250);
lcd.noBacklight();
delay(250);
}
lcd.backlight(); // finish with backlight on

// Write characters on the display


// NOTE: Cursor Position: (CHAR, LINE) start at 0
lcd.setCursor(0,0); //Start at character 4 on line 0
lcd.print("Hello, world!");
delay(1000);
lcd.setCursor(0,1);
lcd.print("Hi, POLINES");
delay(8000);

// Wait and then tell user they can start the Serial Monitor and type in
characters to
// Display. (Set Serial Monitor option to "No Line Ending")
lcd.clear();
lcd.setCursor(0,0); //Start at character 0 on line 0
lcd.print("D3TI INFORMATIKA");
lcd.setCursor(0,1);
lcd.print("Type to display");
}/*(end setup )*/

void loop() /*( LOOP: RUNS CONSTANTLY )*/


{
{
// when characters arrive over the serial port... if
(Serial.available()) {
// wait a bit for the entire message to arrive
delay(100);
// clear the screen
lcd.clear();
// read all the available characters
while (Serial.available() > 0) {
// display each character to the LCD
lcd.write(Serial.read());
}
}
}
}/* (end main loop ) */ /* ( THE
END ) */

Keterangan Kode Program:

1. Memanggil library, lokasi fisik library biasanya berada pada lokasi dimana Arduino IDE
diinstall. Untuk menambhakan library kita tinggal masukkan folder library baru kitake folder
library. Lokasi yangmemungkinkan untuk menyimpan library lainnya adalah di samping
tempat penyimpanan skecth.

Library bisa didownload di:


https://bitbucket.org/fmalpartida/newliquidcrystal/downloads

#include <Wire.h> //Default sudah ada pada Arduino IDE


#include <LiquidCrystal_I2C.h> //Tambahan Library LCD dengan I2C

2. Inisialisasi class yang ada pada header library yang nantinya object yang dihasilkan dariproses
inisialisasi digunakan untuk pemrograman selanjutnya.

LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); //


Set the LCD I2C address

Konfigurasi pin I2C terhadap LCD


add en rw rs d4 d5 d6 d7 bl blpol
r
0x3 2 1 o 4 5 6 7 3 POS
F I
T
I
V
E
3. Konfigurasi untuk fungsi setup()

Inisialisasi penggunaan baudrate/kecepatan tranfer serial :


Serial.begin(9600);

Inisialisasi tipe LCD yang digunakan


lcd.begin(16,2);
Membuat efek flash blink/berkedip padalayar LCD sebanyak 3 kali
for(int i = 0; i< 3; i++)
{
lcd.backlight();
delay(250);
lcd.noBacklight();
delay(250);
}

Membuat LCD dengan tampilan lampu latar belakang menyala


lcd.backlight(); // finish with backlight on

Menginstrusikan kursor pada posisi sesuai dengan parameter,dimulai dari 0 untuk baris
pertama, dan increment 1 untuk baris berikutnya.
lcd.setCursor(0,0);

Mencetak pada LCD dengan karakter yang ada pada parameter


lcd.print("Hello, world!");

Memberikan delay() waktu tunda sebelummengeksekusi baris program selanjutnya. Satuan


dalam millisecond.
delay(1000);
lcd.setCursor(0,1);
lcd.print("HI! POLINES"); delay(8000);

Membersihkan layar LCD untuk semua baris


lcd.clear();

Mengarahkan kursor ke baris pertama


lcd.setCursor(0,0); //Start at character 0 on line 0

Menuliskan karakter pada LCD pada posisi kursor yang berarti mereplace/mengganti karakter
lama dengan karakter yang baru.
lcd.print("D3 TEKNIK INFORMATIKA");
lcd.setCursor(0,1);
lcd.print("POLINES");
}/*(end setup )*/

4. Mengeksekusi rutin fungsi loop()

Jika serial port menerima masukkan yang akan dirubah menjadi karakter setiap yang
diterima serial akan ditampilkan pada LCD.

// when characters arrive over the serial port...


if (Serial.available()) {
// wait a bit for the entire message to arrive
delay(100);
// clear the screen
lcd.clear();
// read all the available characters
while (Serial.available() > 0) {
// display each character to the LCD
lcd.write(Serial.read());
}
}

LCD SHIELD ARDUINO


Cara lain untuk menggunakan LCD dengan cara menggunakan Shield untuk LCD yang akan
menambahkan board diatas arduino sesuai dengan konfigurasi pin yang ada pada arduino.
Dengan LCD Shield kita bisa menggunakan LCD sekaligus menghemat pemanfaatan pin yang
ada di arduino.

Jadi jika dibandingkan dengan pemanfaatan I2C pada bahasan sebelumnya, LCD shield ini
berbeda, pin LCD akan seolah-olah seperti tertancap secara langsung pada Arduino tanpa
menggunakan modul I2C.

Gambar 4.8 LCD Shield Arduino

Tombol keypad yang berada pada bagian bawah akan langsung terhubung dengan AnalogInput
Pin 0.

Detail Konfigurasi Pin LCD Shield :


Pin Fungsi
Analog 0 Button (select, up, right, down and left)
Digital 4 DB4
Digital 5 DB5
Digital 6 DB6
Digital 7 DB7
Digital 8 RS (Data or Signal Display Selection)
Digital 9 Enable
Digital 10 Backlit Control
Gambar 4.9 Konfigurasi Pin LCD Shield Berikut merupakan konfigurasi

pemasangan LCD Shield pada Arduino :

Gambar 4.10 Pemasangan LCD Shield pada Arduino


Gambar 4.11 Konfigurasi pengkabelan LCD dan Potensiometer

Contoh Kode Program:


//Sample using LiquidCrystal library #include
<LiquidCrystal.h>

// select the pins used on the LCD panel


LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

// define some values used by the panel and buttons int


lcd_key = 0; int adc_key_in = 0;
#define btnRIGHT 0
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define btnNONE 5

// read the buttons int


read_LCD_buttons()
{
adc_key_in = analogRead(0); // read the value from the sensor
// my buttons when read are centered at these valies: 0, 144, 329, 504,
741
// we add approx 50 to those values and check to see if we are close
if (adc_key_in > 1000) return btnNONE; // We make this the 1st option
for speed reasons since it will be the most likely result
// For V1.1 us this threshold
if (adc_key_in < 50) return btnRIGHT;
if (adc_key_in < 250) return btnUP;
if (adc_key_in < 450) return btnDOWN;
if (adc_key_in < 650) return btnLEFT;
if (adc_key_in < 850) return btnSELECT;

return btnNONE; // when all others fail, return this...


}

void setup()
{
lcd.begin(16, 2); // start the library
lcd.setCursor(0,0);
lcd.print("Push the buttons"); // print a simple message
}
void loop()
{
lcd.setCursor(9,1); // move cursor to second line "1" and 9 spaces over
lcd.print(millis()/1000);// display seconds elapsed since powerup

lcd.setCursor(0,1); // move to the begining of the second line lcd_key


= read_LCD_buttons(); // read the buttons

switch (lcd_key) // depending on which button was pushed, we perform an


action
{
case btnRIGHT:
{
lcd.print("RIGHT ");
break; }
case btnLEFT:
{
lcd.print("LEFT ");
break; }
case btnUP:
{
lcd.print("UP ");
break; }
case btnDOWN: {
lcd.print("DOWN ");
break; } case
btnSELECT:
{
lcd.print("SELECT");
break; }
case btnNONE:
{
lcd.print("NONE ");
break;
}
}
}
LCD SEBAGAI DAFTAR MENU

Pada dasarnya LCD hanya untuk menampilkan tampilan yang dihasilkan dari kode
program saja, karena shield mempunyai keypad yang tujuannya untuk memilih tampilan
yang sekaligus akan menentukan aksi yang akan dilakukan setelahnya.

Pada kasus tertentu kita membutuhkan tampilan sebagai kontrol dari aktivitas yang kita
lakukan sebagai pengganti mouse atau touchscreen yang kita sering pakai dalam layar
smartphone atau touchScreen Monitor.

Fungsi pemilihan ini digambarkan sebagai menu navigasi yang ada pada sebuah website,
yang akan memberikan informasi yang berbeda untuk tiap menu yang terpilih dengan
memanfaatkan tombol keypad yang ada pada LCD Shield.

Gambar 4.12 Keypad pada LCD Shield

Keypad pada shield akan mempunyai nilai range analog pada 8 bit jalur data, yang
kisaran nilainya antara 0 – 1023. Nilai ini akan bisa didapatkan dengan menggunakan
fungsi analogRead() pada arduino.
adc_key_in = analogRead(0);

Misal kita mempunyai nilai hasil pembacaan pada masing-masing keypad :

RIGHT = 0
UP = 144
DOWN = 329
LEFT = 504 SELECT = 741

sehingga kita bisa membuat range untuk menangkap setiap inputan keypad yang dilakukan oleh
user. Untuk mendekatkan nilai yang dihasilkan Analog Digital Converter kita berikan tambahan
nilai 50 untuk tiap nilai default.

if (adc_key_in > 1000) return btnNONE;

if (adc_key_in < 50) return btnRIGHT; if


(adc_key_in < 250) return btnUP; if (adc_key_in <
450) return btnDOWN; if (adc_key_in < 650) return
btnLEFT; if (adc_key_in < 850) return btnSELECT;

Dengan kode program diatas akan menentukan aksi, dengan menyesuaikan tombol yang
ditekan dengan nilai tombol tersebut.

Contoh kasus :

Membuat seleksi menu yang tertampil pada LCD

Bisnis proses :

Pada LCD shield akan ditampilkan Sejumlah menu dengan level yang sama kita sebut
MainMenu.
1. Ketika keypad up ditekan pada LCD akan ditampilkan menu selanjutnya, dan jika
keypad Down ditekan akan ditampilkan menu terakhir (pada urutan terbalik dari keypad
Up).
2. Ketika keypad Select ditekan pada main menu, pada LCD akan menampilkan
submenu yang ada dalam tiap main menu. Atau jika tidak mempunyai submenu maka
akan melakukan aksi sesuai dengan menu terpilih.

Kode Program :

/*+++++++++++++++++++++++++++++++++++++++++++++++++++
Description : Simple Menu function on LCD
Button Function:
Up/Down - change Menu Page
Select - enter page
Left - Exit ++++++++++++++++++++++++++++++++++++++++++++

+++++++*/

#include <LiquidCrystal.h>
LiquidCrystal lcd(8,9,4,5,6,7);

int keypad_pin = A0; int


keypad_value = 0; int
keypad_value_old = 0; char
btn_push; byte mainMenuPage =
1; byte mainMenuPageOld = 1;
byte mainMenuTotal = 4;

void setup()
{
lcd.begin(16,2); //Initialize a 2x16 type LCD

MainMenuDisplay(); delay(1000);
} void loop()
{
btn_push = ReadKeypad();

MainMenuBtn();

if(btn_push == 'S')//enter selected menu


{
WaitBtnRelease();
switch (mainMenuPage) {
case 1: MenuA();
break; case 2:
MenuB(); break;
case 3: MenuC();
break; case 4:
MenuD(); break;
}

MainMenuDisplay();
WaitBtnRelease();
}

delay(10);

}//--------------- End of loop() loop ---------------------


void MenuA()
{ lcd.clear();
lcd.setCursor(0,0);
lcd.print("Inside Menu A");

while(ReadKeypad()!= 'L')
{
//Insert Task for Menu A here

}
} void MenuB()
{ lcd.clear();
lcd.setCursor(0,0);
lcd.print("Inside Menu B");

while(ReadKeypad()!= 'L')
{
//Insert Task for Menu B here

}
} void MenuC()
{ lcd.clear();
lcd.setCursor(0,0);
lcd.print("Inside Menu C");

while(ReadKeypad()!= 'L')
{
//Insert Task for Menu C here

}
} void MenuD()
{ lcd.clear();
lcd.setCursor(0,0);
lcd.print("Inside Menu D");

while(ReadKeypad()!= 'L')
{
//Insert Task for Menu D here

}
}

void MainMenuDisplay()
{ lcd.clear();
lcd.setCursor(0,0); switch
(mainMenuPage) { case 1:
lcd.print("1. Menu A");
break; case 2:
lcd.print("2. Menu B");
break; case 3:
lcd.print("3. Menu C");
break;
case 4:
lcd.print("4. Menu D");
break;
}
}

void MainMenuBtn()
{
WaitBtnRelease(); if(btn_push
== 'U')
{
mainMenuPage++;
if(mainMenuPage > mainMenuTotal)
mainMenuPage = 1;
}
else if(btn_push == 'D')
{
mainMenuPage--;
if(mainMenuPage == 0)
mainMenuPage = mainMenuTotal;
}

if(mainMenuPage != mainMenuPageOld) //only update display when page


change
{
MainMenuDisplay();
mainMenuPageOld = mainMenuPage;
}
}
char ReadKeypad()
{
/* Keypad button analog Value no
button pressed 1023
select 741
left 503 down
326 up 142
right 0 */

keypad_value = analogRead(keypad_pin);

if(keypad_value < 50) return


'R';
else if(keypad_value < 250)
return 'U';
else if(keypad_value < 450)
return 'D';
else if(keypad_value < 650)
return 'L';
else if(keypad_value < 850)
return 'S'; else
return 'N'; }

void WaitBtnRelease()
{
while( analogRead(keypad_pin) < 800){}
}
//END Program

IV. Tugas
1. Buat running text geser kekiri pada LCD dengan I2C dan LCD Shield
Karakter : [NIM] – [NAMA] – D3TI POLINES
1) Buat konfigurasi rangkaian berikut pada Proteus

2) Ketik kode pemrograman di bawah:


#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup(){
lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.print("33418018 - Putri Shafa S H - D3TI POLINES");
delay(1000);
}

void loop(){
lcd.scrollDisplayLeft();
delay(200);
}
3) Jalankan rangkaian di Proteus

2. Gunakan fungsi untuk meletakkan karakter pada baris pertama dan kedua
sehingga posisi karakter yang ditampilkan berada ditengah. Jika jumlah
karakter lebih dari 16, maka karakter akan dipotong di karakter 16.
Baris Pertama : [NIM]
Baris Kedua : [NAMA]

1) Buat konfigurasi rangkaian berikut pada Proteus


2) Ketik kode pemrograman di bawah:
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
String nim = "33418018";
String nama = "Putri Shafa SH";
int displayLength = 16;
int CursorNim;
int CursorNama;
int panjangNim;
int panjangNama;

void setup() {
lcd.begin(16,2);
}
void loop() {
panjangNim = nim.length();
CursorNim = (displayLength - panjangNim)/2;
lcd.setCursor(CursorNim,0);
lcd.print(nim);

panjangNama = nama.length();
if(panjangNama<=16){
CursorNama = (displayLength - panjangNama)/2;
lcd.setCursor(CursorNama,1);
lcd.print(nama);
}else{
lcd.setCursor(0,1);
lcd.print(nama);
}
}
3) Jalankan rangkaian di Proteus
3. Gunakan Arduino dengan LCD Shield. Manfaatkan keypad pada LCD
Shield untuk memasukkan kombinasi password jika pasword benar akan
tertampil “Selamat Datang” dan Lampu Led Hijau akan menyala, jika
inputan kombinasi salah Led Merah menyala tampilan LCD “Password
Salah”.
1) Buat konfigurasi rangkaian berikut pada Proteus

2) Ketik kode pemrograman di bawah:


#include <Keypad.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define Password_Lenght 7

LiquidCrystal_I2C lcd(0x27,20,4);
char Data[Password_Lenght];
// 6 is the number of chars it can hold + the null char = 7
char Master[Password_Lenght] = "123456";
byte data_count = 0, master_count = 0;
bool Pass_is_good;
char customKey;
const byte ROWS = 4;
const byte COLS = 3;
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'} };

byte rowPins[ROWS] = {2,3,4,5};


byte colPins[COLS] = {10,9,8};

int led_hijau = 12;


int led_merah = 11;

Keypad customKeypad( makeKeymap(keys),


rowPins, colPins, ROWS, COLS);
//initialize an instance of class NewKeypad

void setup() {
lcd.init();
pinMode(led_hijau, OUTPUT);
pinMode(led_merah , OUTPUT);
}

void loop() {
digitalWrite(led_hijau, LOW);
digitalWrite(led_merah, LOW);
lcd.setCursor(0,0);
lcd.print("Enter Password");
customKey = customKeypad.getKey();
if (customKey == '1' || customKey == '2' || customKey == '3' ||
customKey == '4' || customKey == '5' || customKey == '6' || customKey
== '7' || customKey == '8' || customKey == '9' || customKey == '0') {
Data[data_count] = customKey;
lcd.setCursor(data_count,1 );
lcd.print(Data[data_count] ); data_count++;
}

if (customKey == '#'){
lcd.clear();
if(data_count == Password_Lenght-1) {
lcd.setCursor(0, 0);
if(!strcmp(Data, Master)){
lcd.print("Selamat Datang");
digitalWrite(led_hijau, HIGH);
digitalWrite(led_merah, LOW);
}else{
lcd.print("Password Salah" );
digitalWrite(led_hijau, LOW);
digitalWrite(led_merah, HIGH);}
}else{
lcd.print("Password Salah");
digitalWrite(led_hijau, LOW);
digitalWrite(led_merah, HIGH);
}
delay(5000) ;
lcd.clear() ; clearData() ;
}
}

void clearData() {
while(data_count !=0) {
Data[data_count--] = 0;
}
return;
}
3) Jalankan rangkaian di Proteus

Saat password benar

Saat password salah

Anda mungkin juga menyukai