Senin, 27 Februari 2017

Kalkulator Sederhana dengan Arduino

Kembali lagi pada proyek arduino, kali ini proyek yang akan saya ajarkan adalah bagaimana membuat kalkulator sederhana menggunakan arduino. Material yang dibutuhkan tidak terlalu banyak, akan tetapi menguras kantong. Sehingga ada baiknya jika kamu menyiapkan dana lebih untuk proyek ini.

Berikut ini adalah daftar komponen yang harus kamu miliki.

  1. Arduino
  2. Kabel jumper
  3. Potensiometer
  4. Liquid Crystal LCD
  5. Keypad 4x4
  6. Breadboard
Keypad digunakan untuk melakukan input nilai ke arduino, operasi yang memungkinkan untuk dilakukan adalah +, -, : , x. Nilai dan operator akan ditampilkan pada layar LCD. Layar tidak akan melakukan clear screen tanpa menekan tombol terlebih dahulu. Berikut ini adalah rangkaian yang dapat digunakan.
Rangkaian kalkulator sederhana 




Diperlukan perhatian terhadap detail lebih, karena banyak pin yang harus dimasukkan ke arduino. Jika kamu tidak dapat memasang dengan benar, ada baiknya mencari di internet mengenai lokasi pin dari LCD dan keypad. Berikut ini adalah kode yang digunakan untuk kalkulator.

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int inPin = 0;

const int numRows = 4;
const int numCols = 4;
const int debounceTime = 15;

const char keymap[numRows][numCols] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};

const int rowPins[numRows] = { 0, 1, 6, 7 }; // Rows 0 through 3
const int colPins[numCols] = { 8, 9, 10, 13 };

void setup() {
  lcd.begin(16,2);
for (int row = 0; row < numRows; row++)
{
pinMode(rowPins[row],INPUT); // Set row pins as input
digitalWrite(rowPins[row],HIGH); // turn on Pull-ups
}
for (int column = 0; column < numCols; column++)
{
pinMode(colPins[column],OUTPUT); // Set column pins as outputs
// for writing
digitalWrite(colPins[column],HIGH); // Make all columns inactive
}
lcd.setCursor(1,0);
lcd.print("A+ B- Cx D:");
}

void loop() {
  char key1=0;
 
  key1 = getKey();
  if( key1 != 0) { // if the character is not 0 then
  //it’s a valid key press
  if (key1 == '*'){
    lcd.clear();
    lcd.setCursor(1,0);
    lcd.print("A+ B- Cx D:");
  }  else{
char key2 = 0;
char key3 = 0;
lcd.setCursor(0,1);
int a = key1 - '0';
lcd.print(a);
while (key3 == 0){
key3 = getKey();
if (key3 != 0 ){
char op = convert(key3);
lcd.print(op); } }
while (key2 == 0){
key2 = getKey();
if (key2 != 0 ){
int b = key2 - '0';
lcd.print(b);
double c = calculate(key3,a,b);
lcd.print('=');
delay(1000);
lcd.print(c); } } } }

}

int calculate (char key3, int a, int b)
{
if (key3=='A'){
return(a+b);
} else
if (key3=='B'){
return(a-b);
} else
if (key3=='C'){
return(a*b);
}
if (key3=='D'){
return(a/b); } }

char convert (char key3)
{
if (key3=='A'){
return('+');
} else
if (key3=='B'){
return('-');
} else
if (key3=='C'){
return('x');
}
if (key3=='D'){
return(':'); } }

char getKey()
{
char key = 0; // 0 indicates no key pressed
for(int column = 0; column < numCols; column++)
{
digitalWrite(colPins[column],LOW); // Activate the current column.
for(int row = 0; row < numRows; row++) // Scan all rows for
// a key press.
{
if(digitalRead(rowPins[row]) == LOW) // Is a key pressed?
{
delay(debounceTime); // debounce
while(digitalRead(rowPins[row]) == LOW); // wait for key to be released
key = keymap[row][column]; // Remember which key
// was pressed

} }
digitalWrite(colPins[column],HIGH); // De-activate the current column.
}
return key; // returns the key pressed or 0 if none
}
 
Sesuaikan input yang anda pasang di arduino dengan kode, karena jika salah maka akan sulit dan memakan waktu untuk memperbaikinya. Berikut ini adalah hasil proyek yang sudah saya selesaikan.

Sebelum input nilai

Setelah input nilai
Team :
Fachri Satrya P
Theo Tanadi
Aditya Ghifari

Tidak ada komentar:

Posting Komentar