Manfaat Keypad Atmega denga Input Password
Keypad atmega CAVR untuk input password dan di tampilkan di lcd ini merupakan permintaan visitor dari mikroavr.com, japri melalui WhatsApp untuk di mintakan buat program input password dengan keypad dan di tampilkan di LCD 16×2, jika password benar maka menampilkan password benar, jika password salah maka menampilkan password salah.
Karena kebetulan pernah buat program ini, apa salah nya membuat program nya sekalian sebagai bahan web konten di website mikro avr ini.
Sebenar nya kalo di lihat manfaat project ini cukup banyak, saya sendiri membuat project ini untuk pom mini / pertamini, sebagai proteksi untuk melihat hasil data penjualan, menghapus data penjualan dan beberapa yang di anggap penting di dalam program pom mini.input password ini juga bisa di gunakan untuk project lain, yang membutuhkan password, seperti masuk ke menu sebuah system, atau membuka atau me non aktifkan sebuah system.
Konfigurasi PIN Keypad ATMEGA dan LCD 16×2 atau 20×4
Agar program yang di tuliskan di sini dapat di jalankan dengan baik, maka kita perlu lihat konfigurasi pin keypad dengan atmega beserta konfigurasi PIN LCD ke atmega nya.
Untuk Keypad ini kita hubungkan ke PORTA dari ATMEGA ( disini saya buat atmega32/16/8535) kemudian untuk LCD 16×2 atau LCD 20×4 kita hubungkan ke PORTC. Untuk rangkaian nya bisa dilihat di gambar di bawah ini
Program CAVR Keypad atmega Input Password dan Ditampilkan di LCD
Berikut adalah program CAVR atau codevisionAVR untuk Keypad dan di tampilkan di LCD. Program ini bekerja seperti di jelaskan di atas. Jika input password salah, maka akan muncul notifikasi password salah namun jika password benar makan akan di tampilkan password benar.
#include <mega32a.h> // Alphanumeric LCD functions #include <alcd.h>; #include <stdint.h>; #include <delay.h>; #include <stdio.h>; // Declare your global variables here #define READY 0 #define TRUEPASS 1 #define WRONGPASS 2 #define BINTANG 13 #define PAGAR 15 int8_t pollingKeypad(); void shortPress(int8_t key); int8_t globalKey = -1; int8_t state = 0; void updateLCD(); void getText(); uint32_t nilaiKey = 0; char line1[20], line2[20]; uint32_t PASS = 888000; void main(void) { // Declare your local variables here int8_t key = -1; PORTA = 0XFF; DDRA = 0XF0; // Alphanumeric LCD initialization // Connections are specified in the // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu: // RS - PORTC Bit 0 // RD - PORTC Bit 1 // EN - PORTC Bit 2 // D4 - PORTC Bit 4 // D5 - PORTC Bit 5 // D6 - PORTC Bit 6 // D7 - PORTC Bit 7 // Characters/line: 16 lcd_init(16); while (1) { globalKey = key = pollingKeypad(); if (key != -1) { shortPress(key); lcd_clear(); delay_ms(20); while (pollingKeypad() != -1) {} } updateLCD(); } } int8_t pollingKeypad() { int8_t key = -1; PORTA = 0b01111111; if(PINA.3 == 0)key = 13; //* else if(PINA.2 == 0)key = 12; //C else if(PINA.1 == 0)key = 11; //B else if(PINA.0 == 0)key = 10; //A PORTA = 0b10111111; if(PINA.3 == 0)key = 14; //D else if(PINA.2 == 0)key = 9; else if(PINA.1 == 0)key = 6; else if(PINA.0 == 0)key = 3; PORTA = 0b11011111; if(PINA.3 == 0)key = 15; //# else if(PINA.2 == 0)key = 8; else if(PINA.1 == 0)key = 5; else if(PINA.0 == 0)key = 2; PORTA = 0b11101111; if(PINA.3 == 0) key = 0; else if(PINA.2 == 0)key = 7; else if(PINA.1 == 0)key = 4; else if(PINA.0 == 0)key = 1; return key; } void shortPress(int8_t key) { if ( state == READY ){ if ( key < 10 ){ nilaiKey = nilaiKey *10 + key; } else if ( key == BINTANG ){ nilaiKey = 0; state = READY; } else if ( key == PAGAR ){ if ( nilaiKey == PASS){ nilaiKey = 0; state = TRUEPASS; } else{ nilaiKey = 0; state = WRONGPASS; } } } else if ( state == TRUEPASS){ if ( key == BINTANG ){ state = READY; } } else if ( state == WRONGPASS){ if ( key == BINTANG ){ state = READY; } } } void updateLCD() { getText(); lcd_gotoxy(0,0); lcd_puts(line1); lcd_gotoxy(0,1); lcd_puts(line2); } void getText() { if ( state == READY ){ sprintf(line1,"INPUT PASS"); sprintf(line2,"PASS: %lu",nilaiKey); } else if (state == TRUEPASS){ sprintf(line1,"PASSWORD BENAR"); sprintf(line2,""); } else if (state == WRONGPASS){ sprintf(line1,"PASSWORD SALAH"); sprintf(line2,""); } }
Program di atas sudah saya jalankan di hardware dan Alhamdulillah berhasil, video pengujiannya bisa anda lihat di bawah ini,
Program di atas bisa di kembang kan ke aplikasi yang lebih luas, seperti ganti password lama menjadi password baru, membagi bagi tingkatan user untuk password nya, masuk kedalam sebuah menu untuk di jalankan dan lain lain.
Semoga tulisan ini dapat bermanfaat bagi kita semua, Thanks
- untuk versi Arduino bisa di check disini https://mikroavr.com/tutorial-keypad-arduino-lcd/
- Untuk versi atmega lain bisa di check di sini https://mikroavr.com/membaca-keypad-4×4-3×4-atmega-codevisionavr/