Başa dön
Arduino ile Hesap Makinesi Yapımı (4x4 Membran KeyPad)

Arduino ile Hesap Makinesi Yapımı (4×4 Membran KeyPad)

Merhaba arkadaşlar, bugün arduino ile hesap makinesi yapımı (4×4 membran tuş takımı keypad ve dokunmatik tft lcd ekran kullanarak) konusunu arduino çalıştırma kodları ve hesap makinesi kodu ile birlikte öğrenelim.

 

Programlamaya yeni başlıyorsanız Arduino bu iş için harika bir platformdur. Bu makalemizde Arduino ile keypad ve lcd dokunmatik ekran kullanarak kendi hesap makinemizi oluşturacağız. Bu hesap makinesi Toplama, Çıkarma, Çarpma ve Bölme gibi basit işlemleri tam sayılarla gerçekleştirebilir. Hesap makinesi mantığını kavradıktan sonra bilimsel hesap makinesi bile yapabilirsiniz.

Bu projenin sonunda, Arduino ile 16×2 LCD ve Membran Tuş Takımının nasıl kullanılacağını ve hazır kütüphaneleri kullanarak bunları programlamanın ne kadar kolay olduğunu öğrenmiş olacaksınız. Ayrıca, bu makale ile Arduino’nuzu belirli bir görevi yerine getirmek için nasıl programlayacağınızı da öğrenmiş olacaksınız.

 

Hesap Makinesi Yapımında Kullanılan Malzemeler:

  1. Arduino Uno R3
  2. 16×2 LCD Ekran
  3. 4×4 Membran Tuş Takımı
  4. 9V Pil
  5. Tekli Breadboard
  6. Jumper Kablo

 

Hesap Makinesi Arduino Devre Şeması:

 

Arduino Hesap Makinesi Yapımı Projesinin breadboard ile kablolama ve devre şeması yukarıda verilmiştir. Devre şemasında gösterilen + 5V ve toprak bağlantısı Arduino’nun 5V ve toprak pinine bağlanmalıdır. Arduino usb den veya 9c – 12V adaptör/pil kullanılarak beslenebilir.

 

LCD’yi Arduino ile 4 bit modunda çalıştırıyoruz, böylece LCD’nin sadece son dört veri biti Arduino’ya bağlı olacaktır. Tuş takımı, yukarıda gösterildiği gibi 0 pininden 7 pinine kadar bağlanması gereken 8 çıkış pinine sahiptir. Arduino ile bağlantınızı doğrulamak için aşağıdaki bağlantı tablosunu kullanabilirsiniz.

Arduino Pin Adı: KeyPad Pin Adı:
D0 1
D1 2
D2 3
D3 4
D4 5
D5 6
D6 7
D7 8
D8 LCD seçme pimini kaydedin (pim 4)
D9 LCD pinini etkinleştir (pin 6)
D10 Veri pimi 4 (pim 11)
D11 Veri pimi 4 (pim 11)
D12 Veri pimi 4 (pim 11)
D13 Veri pimi 4 (pim 11)
+ 5V LCD’nin Vdd pinine bağlı (pin 2)
Zemin LCD’nin Vss, Vee ve RW pinine bağlandı (pin 1-3 ve 5)

Pin 0 ve pin1’e bağlı bir şey varsa, bazı Arduino panoları program yüklenirken bir hata gösterebilir, bu nedenle herhangi bir sorunla karşılaşırsanız programı yüklerken tuş takımını çıkarın.

Bağlantılarınız tamamlandıktan sonra donanımınız aşağıdaki gibi görünecektir.

 

Arduino Hesap Makinesi Kodları

Tam Arduino Kodu bu yazının sonunda verilmiştir.

Daha önce de belirtildiği gibi Arduino ile bir LCD ve tuş takımını kütüphaneler kullanarak arayüzleyeceğiz. Önce Arduino IDE’mize ekleyelim. LCD için kütüphane’ye buradan ulaşabilirsiniz. GitHub Tuş takımı kütüphanesine gitmek için tıklayın.

İndirdiğiniz ZIP dosyasını Taslak -> library ekle -> .ZIP Kitaplığı Ekle… ile arduino’ya ekleyin.

Tuş takımını kullanmak için hazır bir kitaplık kullanmış olsak da, Arduino tuş takımı hakkında birkaç ayrıntıdan (aşağıda gösterilmiştir) bahsetmek zorundayız. ROWS ve COLS değişkeni, tuş takımımızın kaç satır ve sütuna sahip olduğunu söyleyecektir ve tuş haritası, tuşların klavyede bulunma sırasını gösterir. Bu projede kullandığımız tuş takımı haritası aşağıda gösterilmiştir.

Ayrıca aşağıda KeyPins ve colPins değişken dizisi kullanılarak Tuş Takımı’nın hangi pinlere bağlandığını da görebilirsiniz.

const byte ROWS = 4; // Four rows
const byte COLS = 4; // Three columns

// Define the Keymap
char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowPins[ROWS] = { 0, 1, 2, 3 };// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
byte colPins[COLS] = { 4, 5, 6, 7 }; // Connect keypad COL0, COL1 and COL2 to these Arduino pins.

Ne tür bir tuş takımı kullandığımızı ve nasıl bağlandığını belirttikten sonra, aşağıdaki satırı kullanarak tuş takımı ayrıntılarını oluşturabiliriz.

<span style="color: #000000;">Keypad</span> <span style="color: #000000;">kpd</span> <span style="color: #434f54;">=</span> <span style="color: #000000;">Keypad</span><span style="color: #000000;">(</span> <span style="color: #000000;">makeKeymap</span><span style="color: #000000;">(</span><span style="color: #000000;">keys</span><span style="color: #000000;">)</span><span style="color: #434f54;">,</span> <span style="color: #000000;">rowPins</span><span style="color: #434f54;">,</span> <span style="color: #000000;">colPins</span><span style="color: #434f54;">,</span> <span style="color: #000000;">ROWS</span><span style="color: #434f54;">,</span> <span style="color: #000000;">COLS</span> <span style="color: #000000;">)</span><span style="color: #000000;">;</span> <span style="color: #434f54;">// &nbsp;Create the Keypad</span>

 

Benzer şekilde LCD’nin hangi Arduino pinlerine bağlanacağını da eklemeliyiz. Devre şemamıza göre tanımlar aşağıdaki gibi olacaktır.

<span style="color: #000000;">const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; //Pins to which LCD is connected
LiquidCrystal lcd(rs, en, d4, d5, d6, d7); //create the LCD</span>

 

Temel olarak, tuş takımında herhangi bir şey yazılıp yazılmadığını kontrol etmeliyiz, yazıldıysa ne yazıldığını tanımalı ve sonra “=” tuşuna basıldığında bir değişkene dönüştürmeliyiz, sonucu hesaplamalı ve son olarak lcd ekranda göstermeliyiz. Bu, aşağıda gösterildiği gibi döngü işlevi içinde yapılan şeydir.

key = kpd.getKey(); //storing pressed key value in a char

if (key!=NO_KEY)
DetectButtons();

if (result==true)
CalculateResult();

DisplayResult(); 

Arduino Hesap Makinesi Simülasyonu

Proteus yazılımını kullanarak projeyi simüle etmeyi de deneyebiliriz. Proteus’un kendi başına bir Arduino bileşeni yoktur, ancak kolayca indirilebilir ve kütüphanesine eklenebilir. Proteus’ta Arduino bileşenine sahip olduğunuzda, bağlantıyı devre şemasında gösterildiği gibi yapmak için Alfanümerik LCD ve Tuş Takımı ekleyin.

Daha sonra hex dosyasını Proteus’taki karta çift tıklayarak Arduino’ya ekleyin ve “program file” ‘ı indirilen bu hex dosyasına yönlendirin. Simülasyonun anlık görüntüsü aşağıda gösterilmiştir, tüm çalışma aşağıdaki videoda gösterilmiştir.

Hex dosyası nasıl alınır?

Not: Verilen onaltılık dosya, aşağıda verilen programın orijinaliyle aynı değildir. Simülasyon tuş takımının ve gerçek donanım tuş takımının tuş haritası farklı olduğu için değiştirildi.

 

Arduino Hesap Makinesi’nin Çalışması

Bağlantıları devre şemasına göre yapın ve aşağıdaki kodu yükleyin. Hata gösteriyorsa, kitaplığı yukarıda verilen talimatlara göre eklediğinizden emin olun. Ayrıca sorunun donanımınızla ilgili olup olmadığını kontrol etmek için simülasyonu deneyebilirsiniz. Her şey olması gerektiği gibi yapılırsa, aşağıdaki gibi çalıştığını görmelisiniz.

Burada kullanılan tuş takımının üzerinde uygun işaretler bulunmadığından, 4 işlem (toplama, çıkarma, çarpma, bölme) aşağıda liste şeklinde karşılaştırılmıştır.

Tuş takımındaki karakter Olduğu varsayılan
“A” Ekleme (+)
“B” Çıkarma (-)
“C” Çarpma işlemi (*)
“D” Bölünme (/)
“*” Açık (C)
“#” Eşittir (=)

Her düğmenin gerçekte neyi temsil ettiğini yazmak için bir işaretleyici kullanabilirsiniz.

Bunu yaptıktan sonra, hesap makinesini doğrudan kullanmaya başlayabilirsiniz. Numarayı yazın ve ikinci satırda görünecek olan işleme basın ve ikinci numaranızı yazın ve sonunda sonucunuzu almak için “#” tuşuna basın. Bu kadar kolay.

 

Hesap Makinesi Kodları – Arduino Kodu

/*
 * Arduino Keypad calculator Program
 */
#include <LiquidCrystal.h> //Header file for LCD from https://www.arduino.cc/en/Reference/LiquidCrystal
#include <Keypad.h> //Header file for Keypad from https://github.com/Chris--A/Keypad
const byte ROWS = 4; // Four rows
const byte COLS = 4; // Three columns
// Define the Keymap
char keys[ROWS][COLS] = {
 {'7','8','9','D'},
 {'4','5','6','C'},
 {'1','2','3','B'},
 {'*','0','#','A'}
};
byte rowPins[ROWS] = { 0, 1, 2, 3 };// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
byte colPins[COLS] = { 4, 5, 6, 7 }; // Connect keypad COL0, COL1 and COL2 to these Arduino pins.
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); //  Create the Keypad
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; //Pins to which LCD is connected
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
long Num1,Num2,Number;
char key,action;
boolean result = false;
void setup() {
 lcd.begin(16, 2); //We are using a 16*2 LCD display
 lcd.print("DIY Calculator"); //Display a intro message
 lcd.setCursor(0, 1);   // set the cursor to column 0, line 1
 lcd.print("-CircuitDigest"); //Display a intro message 
  delay(2000); //Wait for display to show info
   lcd.clear(); //Then clean it
}
void loop() {
 
key = kpd.getKey(); //storing pressed key value in a char
if (key!=NO_KEY)
DetectButtons();
if (result==true)
CalculateResult();
DisplayResult();   
}
void DetectButtons()
{ 
    lcd.clear(); //Then clean it
   if (key=='*') //If cancel Button is pressed
   {Serial.println ("Button Cancel"); Number=Num1=Num2=0; result=false;}
   
    if (key == '1') //If Button 1 is pressed
   {Serial.println ("Button 1"); 
   if (Number==0)
   Number=1;
   else
   Number = (Number*10) + 1; //Pressed twice
   }
   
    if (key == '4') //If Button 4 is pressed
   {Serial.println ("Button 4"); 
   if (Number==0)
   Number=4;
   else
   Number = (Number*10) + 4; //Pressed twice
   }
   
    if (key == '7') //If Button 7 is pressed
   {Serial.println ("Button 7");
   if (Number==0)
   Number=7;
   else
   Number = (Number*10) + 7; //Pressed twice
   } 
 
   if (key == '0')
   {Serial.println ("Button 0"); //Button 0 is Pressed
   if (Number==0)
   Number=0;
   else
   Number = (Number*10) + 0; //Pressed twice
   }
   
    if (key == '2') //Button 2 is Pressed
   {Serial.println ("Button 2"); 
    if (Number==0)
   Number=2;
   else
   Number = (Number*10) + 2; //Pressed twice
   }
   
    if (key == '5')
   {Serial.println ("Button 5"); 
    if (Number==0)
   Number=5;
   else
   Number = (Number*10) + 5; //Pressed twice
   }
   
    if (key == '8')
   {Serial.println ("Button 8"); 
    if (Number==0)
   Number=8;
   else
   Number = (Number*10) + 8; //Pressed twice
   }   
 
   if (key == '#')
   {Serial.println ("Button Equal"); 
   Num2=Number;
   result = true;
   }
   
    if (key == '3')
   {Serial.println ("Button 3"); 
    if (Number==0)
   Number=3;
   else
   Number = (Number*10) + 3; //Pressed twice
   }
   
    if (key == '6')
   {Serial.println ("Button 6"); 
   if (Number==0)
   Number=6;
   else
   Number = (Number*10) + 6; //Pressed twice
   }
   
    if (key == '9')
   {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') //Detecting Buttons on Column 4
 {
   Num1 = Number;    
   Number =0;
   if (key == 'A')
   {Serial.println ("Addition"); action = '+';}
    if (key == 'B')
   {Serial.println ("Subtraction"); action = '-'; }
    if (key == 'C')
   {Serial.println ("Multiplication"); action = '*';}
    if (key == 'D')
   {Serial.println ("Devesion"); action = '/';}  
   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);   // set the cursor to column 0, line 1
 lcd.print(Num1); lcd.print(action); lcd.print(Num2); 
 
 if (result==true)
 {lcd.print(" ="); lcd.print(Number);} //Display the result
 
 lcd.setCursor(0, 1);   // set the cursor to column 0, line 1
 lcd.print(Number); //Display the result
}

Arduino Hesap Makinesi Yapımı – Video

 

Hepsi bu kadar. Umarım Arduino 4×4 Keypad ile Hesap Makinesi Yapımı makalemizi beğenmiş ve yeni bir şeyler öğrenmişsinizdir.
Memnun kaldıysanız aşağıda bulunan “yukarı ok“a tıklayarak +1 puan verebilirsiniz.
Diğer Güncel Arduino Projeleri için BURAYA TIKLAYABİLİRSİNİZ.

Sizde Robotlara ve Maker’lığa Meraklıysanız Robotik Marketimiz ROBOCOMBO‘yu Ziyaret Edebilirsiniz.

Okuduğunuz İçin Teşekkürler.

 

 

Kaynak:  circuitdigest.com/microcontroller-projects/arduino-calculator-using-4x4-keypad