Hesap Makinesi Uygulaması

Merhaba, bugün sizlerle Arduino ile Hesap Makinesi projesi yapacağız. Devrede kullanacağımız tuş takımı (4×4 Membran KeyPad) üzerinden girdiğimiz değerlerle yapmak istediğimiz işlemi ve sonucu LCD ekran üzerinden görmüş olacağız. Bu hesap makinesi toplama, çıkarma, çarpma ve bölme işlemlerini kolaylıkla gerçekleştirebilir. Arduino ile hesap makinesi projemizin sonunda LCD Ekran ve Tuş Takımının nasıl kullanılıp çalıştığını anlamış olacağız. Şimdi arduino ile hesap makinesi yapımına geçebiliriz.

Arduino ile Hesap Makinesi Projesi
Arduino ile Hesap Makinesi Projesi

Arduino Hesap Makinesi Yapımı

LCD’yi arudino ile 4-bit mod ile çalıştıracağımız için sadece LCD’nin son 4 Data Bit’i Arduino’ya bağlanacak. Arduino’ya USB port, 12V’luk DC adaptör veya 9V’luk batarya üzerinden güç verebilirsiniz.

Bazı Arduino kartları TX (D0) ve RX (D1) pinlerine herhangi bir şey bağlı olduğunda kodu yükleyince hata verebilir bu yüzden böyle bir durumla karşılaşmamak için bu Serial pinleri yerine Arduino üzerindeki Analog A0 ve A1 pinleri kullanacağız. Fakat öncelikle bu pinleri Dijital pinlere çevirmemiz gerekiyor. Bu pinlerin Dijital pin olarak kullanılması içinse ‘void setup() altına aşağıdaki kodları eklememiz gerekmektedir:

void setup() {
  pinMode(A0, OUTPUT);
  digitalWrite(A0, HIGH);
  pinMode(A1, OUTPUT);
  digitalWrite(A1, OUTPUT);

Tuş Takımı (Keypad) 8 output pine sahiptir ve bu pinler aşağıda vermiş olduğumuz devre şemasına uygun olacak şekilde A0-A1 ve D2-D7 pinlerine sırayla bağlayacağız. Kurulum şemasında gösterilen TX ve RX bağlantıları yerine A0 ve A1 pinlerini bağladığınıza emin olunuz aksi takdirde kodunuz çalışmayabilir. Arduino Hesap Makinesi projemizin devre diyagramını ve kodlarını aşağıda görebilirsin.

Arduino ile Hesap Makinesi için Gerekli Malzemeler

Arduino ile Hesap Makinesi Devre Şeması

Arduino PinKeypad PinArduino PinLCD Pin
A01D8RS
A12D9E
D23D10D4
D34D11D5
D45D12D6
D56D13D7
D67+5VVdd, A, Pot +
D78GroundRW, Vss, K, Pot –V0 = Pot orta bacak
Arduino ile Hesap Makinesi Devre Şeması
Arduino ile Hesap Makinesi Devre Şeması
Arduino ile Hesap Makinesi Devre Şeması
Arduino ile Hesap Makinesi Devre Şeması

Arduino ile Hesap Makinesi Kütüphane kurulumu

Kodları karta yüklemeden önce Arduino IDE’ye tuş takımı kütüphanesini eklememiz gerekiyor. LCD kütüphanesi Arduino içerisinde halihazırda bulunduğu için sadece tuş takımı kütüphanesini eklememiz yeterli olacaktır. Talimatları aynı şekilde uyguladığınıza emin olunuz yoksa kodunuzu Arduino’ya yüklerken hata ile karşılaşabilirsiniz.

1.Arduino IDE’yi açın ve üst menüden Sketch’e basın.

Arduino ile Hesap Makinesi Kütüphane kurulumu
Arduino ile Hesap Makinesi Kütüphane kurulumu
Hesap-Makinesi-Kutuphane-kurulumu-2
Hesap-Makinesi-Kutuphane-kurulumu-2

2.Include Library üzerinden Manage Libraries seçeneğine tıklayın.

3.Arama kutucuğuna Keypad yazın ve aşağıdaki resimdeki gözüken kütüphaneyi en son sürümü seçerek indirdikten sonra Arduino IDE’yi kapatıp tekrardan açın. Artık kodumuz Arduino üzerinde çalıştırılmak için hazır, şimdi aşağıdaki Arduino kodunu açmış olduğumuz Sketch’e yapıştırıp Arduino’ya Upload yapabiliriz.

Arduino ile Hesap Makinesi Kütüphane kurulumu-3
Arduino ile Hesap Makinesi Kütüphane kurulumu-3

Arduino Hesap Makinesi Kodları

#include <LiquidCrystal.h>
#include <Keypad.h> 
const byte ROWS = 4; // 4 satır
const byte COLS = 4; // 4 Sütun
// Keymap’I tanımla
char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowPins[ROWS] = { A0, A1, 2, 3 };// Arduino pinlerini ROW0, ROW1, ROW2 ve ROW3 Tuş Takımına (Keypad) tanınmla
byte colPins[COLS] = { 4, 5, 6, 7 }; // Arduino pinlerini COL0, COL1 ve COL2 Tuş takımına tanımla
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); //  Keypad oluştur
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; //LCD ekrana bağlanan pinleri tanımla
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

 long Num1,Num2,Number;
 char key,action;
 boolean result = false;


void setup() {
  pinMode(A0, OUTPUT);
  digitalWrite(A0, HIGH);
  pinMode(A1, OUTPUT);
  digitalWrite(A1, OUTPUT);
  lcd.begin(16, 2); //16*2 LCD Ekran kullanıyoruz
  lcd.setCursor(3, 0);
  lcd.print("Robotistan"); //İntro mesajı görüntüle
  lcd.setCursor(1, 1);   // Göstergeyi sütun 0, satır 1’e ayarla
  lcd.print("Hesap Makinesi"); //İntro mesajı görüntüle
  delay(2000); //Ekranın bilgiyi göstermesi için bekle
  lcd.clear(); //Temizle
}
void loop() {

key = kpd.getKey(); // Basılan tuşun değerini char olarak depolama
if (key!=NO_KEY)
DetectButtons();
if (result==true)
CalculateResult();
DisplayResult();   
}
void DetectButtons()
{ 
     lcd.clear(); //Temizle
    if (key=='*') //Eğer iptal düğmesi basıldığında
    {Serial.println ("Button Cancel"); Number=Num1=Num2=0; result=false;}

     if (key == '1') //Eğer 1 düğmesi basıldığında
    {Serial.println ("Button 1"); 
    if (Number==0)
    Number=1;
    else
    Number = (Number*10) + 1; //iki kez basıldı
    }

     if (key == '4') //Eğer 4 düğmesi basıldığında
    {Serial.println ("Button 4"); 
    if (Number==0)
    Number=4;
    else
    Number = (Number*10) + 4; //iki kez basıldı
    }

     if (key == '7') //Eğer 7 düğmesi basıldığında
    {Serial.println ("Button 7");
    if (Number==0)
    Number=7;
    else
    Number = (Number*10) + 7; //iki kez basıldı
    }
 
    if (key == '0') //Eğer 0 düğmesi basıldığında
    {Serial.println ("Button 0");
    if (Number==0)
    Number=0;
    else
    Number = (Number*10) + 0; //iki kez basıldı
    }

     if (key == '2') //Eğer 2 düğmesi basıldığında
    {Serial.println ("Button 2"); 
     if (Number==0)
    Number=2;
    else
    Number = (Number*10) + 2; //Pressed twice
    }

     if (key == '5') //Eğer 5 düğmesi basıldığında
    {Serial.println ("Button 5"); 
     if (Number==0)
    Number=5;
    else
    Number = (Number*10) + 5; //Pressed twice
    }

     if (key == '8') //Eğer 8 düğmesi basıldığında
    {Serial.println ("Button 8"); 
     if (Number==0)
    Number=8;
    else
    Number = (Number*10) + 8; //Pressed twice
    }   

    if (key == '#') //Eğer # düğmesi basıldığında
    {Serial.println ("Button Equal"); 
    Num2=Number;
    result = true;
    }

     if (key == '3') //Eğer 3 düğmesi basıldığında
    {Serial.println ("Button 3"); 
     if (Number==0)
    Number=3;
    else
    Number = (Number*10) + 3; //Pressed twice
    }

     if (key == '6') //Eğer 6 düğmesi basıldığında
    {Serial.println ("Button 6"); 
    if (Number==0)
    Number=6;
    else
    Number = (Number*10) + 6; //Pressed twice
    }

     if (key == '9') //Eğer 9 düğmesi basıldığında
    {Serial.println ("Button 9");
    if (Number==0)
    Number=9;
    else
    Number = (Number*10) + 9; //Pressed twice
    }  
      if (key == 'A' || key == 'B' || key == 'C' || key == 'D') //Sütun 4’teki düğmeleri tespit etme
  {
    Num1 = Number;    
    Number =0;
    if (key == 'A')
    {Serial.println ("Addition"); action = '+';} //Toplama
     if (key == 'B')
    {Serial.println ("Subtraction"); action = '-'; } //Çıkarma
     if (key == 'C')
    {Serial.println ("Multiplication"); action = '*';} //Çarpma
     if (key == 'D')
    {Serial.println ("Devesion"); action = '/';}  // //Bölme
    delay(100);
  }

}
void CalculateResult()
{
  if (action=='+')
    Number = Num1+Num2;
  if (action=='-')
    Number = Num1-Num2;
  if (action=='*')
    Number = Num1*Num2;
  if (action=='/')
    Number = Num1/Num2; 
}
void DisplayResult()
{
  lcd.setCursor(0, 0); //Göstergeyi sütun 0, satır 1’e ayarla
  lcd.print(Num1); lcd.print(action); lcd.print(Num2); 

  if (result==true)
  {lcd.print(" = "); lcd.print(Number);} //Sonucu göster

  lcd.setCursor(0, 1);   // Göstergeyi sütun 0, satır 1’e ayarla
  lcd.print(Number); //Sonucu göster
}

Arduino ile Hesap Makinesi Yapımı Proje Videosu

Arduino ile hesap makinesi yapımı için tüm aşamaları görmüş ve projemizi tamamlamış olduk.  En iyi hesap makinesi uygulaması için 4×4 Tuş Takımı, LCD Ekran, Breadboard gibi gerekli malzemelere web sitemizden ulaşabileceğinizi unutmayın. Siz de hemen projeyi yapmaya başlayabilir ve kendi hesap makinenizi yapabilirsiniz.

Yorum bırakın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Scroll to Top