Kali ini, saya akan mencoba membuat proyek arduino dengan menggunakan input yang berasal dari keypad dan menampilkannya ke layar LCD. Hasil akhir yang diharapkan dari percobaan ini adalah kalkulator sederhana dengan input dari keypad.
Hal yang harus dipersiapkan pada percobaan ini yaitu :
- Arduino uno
- Laptop
- Kabel USB
- Kabel Jumper
- Layar LCD (16×2)
- Keypad 4×3
Pada percobaan ini, hal yang baru kami gunakan adalah keypad :
Sebelumnya kami disarankan untuk menggunakan pin analog arduino untuk memasang keypad ini karena diprediksikan bahwa kami akan kekurangan pin digital pada arduino. Tetapi setelah kami cek, ternyata pin digital yang tersisa setelah dipasang layar LCD adalah 7 buah. Karena keypad 4×3 juga hanya membutuhkan 7 buah pin, kami pun memutuskan untuk menggunakan pin digital arduino.
Sebagai permulaan, kami mencoba untuk memasangkan terlebih dahulu LCD ke arduino.
Selanjutkan, kami harus memasangkan keypad pada arduino. Awalnya, untuk memasangkan keypad pada arduino, kami berpedoman pada buku Arduino Cookbook. Pada buku tersebut terdapat gambar rangkaian sebagai berikut :
Kami mencoba rangkaian diatas. Akan tetapi, kami hanya menyesuaikan urutan kolom dan barisnya saja. Pin yang dimasukan ke arduino berbeda dengan gambar diatas karena harus menyesuaikan dengan pin digital sisa LCD. Setelah itu, kami mencoba mengupload kode yang kami peroleh dari situs resmi arduino berdasarkan rangkaian yang telah kami buat. Akan tetapi, hasilnya aneh. Tombol yang berfungsi hanya tombol 0 dan 4 saja. Itupun apabila kita menekan tombol 0, yang keluar adalah angka 7, sedangkan apabila kita menekan tombol 4, yang keluar adalah angka 3.
Kami pun terus mencari sumber kesalahan tersebut. Akhirnya setelah kami telusuri, diperolehlah urutan pemasangan pin keypad yang benar.
Berikut ini adalah rangkaian dari proyek arduino ini :
Berikut ini adalah video setelah kami berhasil memasukan input dari keypad dengan benar
Setelah semua input keypad berhasil ditampilkan dengan benar, kami kemudian membuat kode agar bisa membuat program kalkulator sederhana :
//
#include <Keypad.h>
#include <LiquidCrystal.h>
//pin LCD pada arduino
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
const int inPin = 0;
const byte ROWS = 4; // jumlah baris = 4
const byte COLS = 3; // jumlah kolom = 3
// Mendefiniskan keypad map
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
// Menyambungkan keypad ROW0, ROW1, ROW2 dan ROW3 ke pin digital arduino.
byte rowPins[ROWS] = { 0, 13, 12, 11 };
// Menyambungkan keypad COL0, COL1 and COL2 ke pin digital arduino.
byte colPins[COLS] = { 10, 9, 8 };
//Menciptakan 'objek keypad'
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
//variabel untuk kalkulator
int var1=0;//operan 1
int var2=0;//operan 2
char operator=' ';
char operators[4] = {'+', '-', '/', 'x'};
boolean is_var1=true;
int no_operan=0;
String var1_str;
String var2_str;
void setup()
{
// pinMode(ledpin,OUTPUT);
// digitalWrite(ledpin, HIGH);
Serial.begin(9600);
lcd.begin(16, 2);
lcd.setCursor(0, 0);
}
void loop()
{
//mendapatkan input dari keypad
char key = kpd.getKey();
if(key) //mengecek apakah inputnya valid.
{
if(key == '#'){// '#' berfungsi untuk membersihkan layar
lcd.clear(); //membersihkan layar
var1_str="";
var2_str="";
operator=' ';
var1=0;
var2=0;
}
//memasukkan input operan
if((key != '*')&&(key != '#')){
if((is_var1)&&(operator== ' ')){
//menyimpan input ke dalam suatu string
var1_str += key;
lcd.print(key);//menampilkan bilangan
}else{
is_var1=false;//apabila is_var 1 bernilai false
var2_str += key;// maka string akan dikumpulkan pada var2_str
lcd.print(key);
}
}
if(is_var1){
if((key == '*')&&(var1_str != "")){
//is_var1=false;
lcd.setCursor(0, 1);
operan=operans[no_operan];
lcd.print(operans[no_operan]);
no_operan++;
if(no_operan>3){
no_operan=0;
}
}
}else{
if((key == '*')&&(var2_str != "")){
var1 = var1_str.toInt();
var2 = var2_str.toInt();
if(operan == '+'){
var1 = var1+var2;
}else if(operan == '-'){
var1 = var1-var2;
}else if(operan == '/'){
var1 = var1/var2;
}else if(operan == 'x'){
var1 = var1*var2;
}
lcd.clear();
var2_str="";
operan=' ';
lcd.setCursor(0,0);
lcd.print(var1);
is_var1=true;
}
}
// Serial.println(key);
}
}
Sebelum menggunakan kode diatas, kami menggunakan kode lain, akan tetapi hasilnya tidak sesuai dengan yang diharapkan. Ketika kita mengoperasikan bilangan untuk yang pertama kali, akan diperoleh hasil yang sesuai. Akan tetapi, saat operasi bilangan yang kedua dan seterusnya, diperoleh hasil yang salah :
Setelah kami mencoba kode yang dituliskan diatas, kami mendapatkan hasil yang diharapkan.
Note :
Tombol * digunakan untuk memilih operator
Tombol # digunakan untuk membersihkan layar