Selasa, 09 Mei 2023

Algoritma Switch Case Dalam Kalkulator Mikrokontroler Arduino Dengan Keypad dan LCD

Kalkulator adalah alat untuk menemukan solusi matematika tertentu dengan cepat dan akurat. Dalam pengaplikasiannya kalkulator bisa dibuat melalui software proteus dengan menggunakan algoritma switch case sebagai programnya. 

Switch case adalah pengambilan keputusan yang dirancang khusus yang berisi banyak solusi. Pernyataan switch case ini memiliki fungsi yang sama dengan pernyataan if else bersarang. Tujuan penggunaan switch case adalah untuk mempermudah pemilihan kondisi, menghindari penggunaan pernyataan if-else yang terlalu banyak, dan agar dapat digunakan untuk beberapa kondisi.

Pernyataan switch-case digunakan sebagai pernyataan untuk memilih tindakan yang akan diambil. Dalam pernyataan ini, itu hanya bergantung pada nilai dari tipe variabel. Variabel yang mendefinisikan ini memiliki beberapa tipe nilai, dan setiap nilai diasosiasikan dengan tipe operasi. Pernyataan switch-case digunakan untuk menyederhanakan pengaturan if-else-if. 

Berikut gambar skematik rangkaian dalam software Proteus:


Beberapa komponen yang digunakan:


Program yang dimasukan pada software Arduino IDE:

#include <LiquidCrystal.h>
#include <Keypad.h>
#include <Servo.h>

/* Display */
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);

/* Keypad setup */
const byte KEYPAD_ROWS = 4;
const byte KEYPAD_COLS = 4;
byte rowPins[KEYPAD_ROWS] = {5, 4, 3, 2};
byte colPins[KEYPAD_COLS] = {A3, A2, A1, A0};
char keys[KEYPAD_ROWS][KEYPAD_COLS] = {
  {'7', '8', '9', '/'},
  {'4', '5', '6', '*'},
  {'1', '2', '3', '-'},
  {'.', '0', '=', '+'}
};

Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, KEYPAD_ROWS, KEYPAD_COLS);

uint64_t value = 0;

void showSpalshScreen() {
  lcd.print("   Kalkulator   ");
  lcd.setCursor(4, 3);
  String message = "Arduino";
  for (byte i = 0; i < message.length(); i++) {
    lcd.print(message[i]);
    delay(100);
  }
  delay(800);
}

void updateCursor() {
  if (millis() / 250 % 2 == 0 ) {
    lcd.cursor();
  } else {
    lcd.noCursor();
  }
}

void setup() {
  Serial.begin(115200);
  lcd.begin(16, 2);

  showSpalshScreen();
  lcd.clear();
  lcd.cursor();

  lcd.setCursor(1, 0);
}

char operation = 0;
String memory = "";
String current = "";
uint64_t currentDecimal;
bool decimalPoint = false;

double calculate(char operation, double left, double right) {
  switch (operation) {
    case '+': return left + right;
    case '-': return left - right;
    case '*': return left * right;
    case '/': return left / right;
  }
}

void processInput(char key) {
  if ('-' == key && current == "") {
    current = "-";
    lcd.print("-");
    return;
  }

  switch (key) {
    case '+':
    case '-':
    case '*':
    case '/':
      if (!operation) {
        memory = current;
        current = "";
      }
      operation = key;
      lcd.setCursor(0, 1);
      lcd.print(key);
      lcd.setCursor(current.length() + 1, 1);
      return;

    case '=':
      float leftNum = memory.toDouble();
      float rightNum = current.toDouble();
      memory = String(calculate(operation, leftNum, rightNum));
      current = "";
      lcd.clear();
      lcd.setCursor(1, 0);
      lcd.print(memory);
      lcd.setCursor(0, 1);
      lcd.print(operation);
      return;

  }

  if ('.' == key && current.indexOf('.') >= 0) {
    return;
  }

  if ('.' != key && current == "0") {
    current = String(key);
  } else if (key) {
    current += String(key);
  }

  lcd.print(key);
}

void loop() {
  updateCursor();

  char key = keypad.getKey();
  if (key) {
    processInput(key);
  }
}

Kondisi switch case adalah cabang dari kode program tempat konten variabel multi-nilai dibandingkan. Jika hasil proses perbandingan benar, maka blok kode program diproses.

Kondisi switch case terdiri dari dua bagian, yaitu program switch dengan nama variabel yang diuji dan satu atau lebih pernyataan case untuk setiap nilai yang akan diuji. Di awal kode program ada perintah switch yang digunakan untuk memasukkan variabel terkontrol. Lalu ada beberapa pernyataan case diikuti dengan sebuah nilai. Jika isi nama_variabel sama dengan salah satu dari nilai ini, blok kode program dijalankan. Jika tidak ada kondisi case yang terpenuhi, blok standar di akhir baris dijalankan. Setiap blok kasus diakhiri dengan perintah break sehingga struktur case segera berhenti ketika kondisi terpenuhi.

Hasil Output Rangkaian

Setelah program pada Arduino dicompile dan menyalin link format .hex kemudian memasukkan kedalam arduino pada proteus, lalu dapat di jalankan rangkaian tersebut. Hasil output dari LCD menampilkan berikut selama 8 detik.


Kemudian LCD akan membersihkan otomatis hingga tidak ada tampilan, dengan menekan tombol pada keypad. Masing-masing angka berfugsi dengan baik dan ouput pada LCD pun sesuai.


Berikut beberapa pengoperasiannya:







Referensi:

Tidak ada komentar:

Posting Komentar

Tugas Project Smart Trash Bin Nama               : Denny Febriyanto NPM                  : 11420392 Mata Kuliah    : A lgoritma & Pemrog...