Alat & Bahan
- Arduino Uno
- LCD
- Keypad 4x3
- Laptop
Rangkaian
Mulailah kami buat rangkaian seperti tugas sebelumnya untuk menampilkan tulisan di lcd, namun kali ini ditambah keypad.
Berikut ini adalah daftar pasangan pin LCD dan Matrix keypad di atas dengan pin di ARDUINO:
- row 0 = 0
- row 1 = 13
- row 2 = 12
- row 3 = 11
- col 0 = 10
- col 1 = 9
- col 2 = 8
- Gnd dan R/W = ground
- Vcc = 5V
- V0 = pin tengah potentiometer
- Rs = 7
- E = 6
- D4 = 5
- D5 = 4
- D6 = 3
- D7 = 2
// include library LCD dan Keypad #include <keypad.h> #include <liquidcrystal.h> // Mendefinisikan LCD LiquidCrystal lcd(7, 6, 5, 4, 3, 2); const int inPin = 0; // Mendefinisikan Keypad const byte ROWS = 4; // 4 baris const byte COLS = 3; // 3 kolom // Definisi posisi kunci, sesuaikan dengan gambar char keys[ROWS][COLS] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'*','0','#'} }; // Hubungkan dengan pin di ARDUINO byte rowPins[ROWS] = { 0, 13, 12, 11 }; byte colPins[COLS] = { 10, 9, 8 }; // Membuat objek Keypad Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); // Definisi variabel-variabel int var1 = 0; int var2 = 0; int no_operan = 0; // nomor operator char operan=' '; // operator char operans[4] = {'+', '-', '/', 'x'}; // isi operator boolean is_var1 = true; // untuk menentukan apakah sedang dalam var1? String var1_str; // penampung var1 String var2_str; // penampung var2 // inisiasi void setup() { Serial.begin(9600); lcd.begin(16, 2); lcd.setCursor(0, 0); } // loop utama void loop() { char key = kpd.getKey(); // mendapatkan posisi key yang ditekan if(key) // cek validasi { // jika pager maka hapus semuanya if(key == '#'){ lcd.clear(); var1_str=""; var2_str=""; operan=' '; var1=0; var2=0; } // jika angka yang ditekan if((key != '*')&&(key != '#')){ if((is_var1)&&(operan == ' ')){ // variabel 1 var1_str += key; lcd.print(key); }else{ // variabel 2 is_var1=false; var2_str += key; lcd.print(key); } } // jika yang ditekan bintang, untuk menentukan operator if(is_var1){ if((key == '*')&&(var1_str != "")){ // tekan pertama kali untuk ganti oprator lcd.setCursor(0, 1); operan=operans[no_operan]; lcd.print(operans[no_operan]); no_operan++; if(no_operan>3){ no_operan=0; } } }else{ // tekan kedua kali untuk hasil operasi 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); }
Kendala
Selain itu, kendala kedua yaitu saat kami mencoba kode pertama dari sumber lain, hasilnya tidak sesuai dengan yang diinginkan
Maka dari itu, kami modifikasi kodenya menjadi seperti kode yang sudah ditulis di atas dan hasil yang keluarpun seperti yang diharapkan, dengan fungsi tombol :
Tombol * untuk mengganti operator
Tombol # untuk membersihkan layar
0 comments:
Post a Comment