Jika kamu berpikir, maka kamu tau. Jika kamu tau, maka tercipta kondisi dalam hati yg mendorong utk berbuat

Tuesday, March 25, 2014

# Membuat Kalkulator dengan Arduino

Tuesday, March 25, 2014 Posted by Raosan Fikri Lillahi , , No comments
Tugas kali ini kami dibebaskan untuk berkreasi dengan menggunakan arduino dan keypad. Maka kelompok kami memutuskan untuk membuat sebuah kalkulator sederhana.

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

Kode

// 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
Saat pertama kali mencoba, kendala yang dihadapi adalah salah antara angka yang dipencet dengan yang keluar di layar LCD. Ternyata hal itu terjadi karena kesalahan pemasangan pin. Kami mengira pemasangannya berurutan, namun ternyata tidak. jadi kami harus coret-coret dulu untuk menentukan pin mana yang menentukan angka mana yang akan keluar


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