İSTANBUL İÇİ SAAT 16:00'A KADAR VERECEĞİNİZ 2500₺ ve ÜZERİ SİPARİŞLERİNİZ AYNI GÜN KAPINIZDA 🏍️
500 TL üzeri ücretsiz kargo
İSTANBUL İÇİ SAAT 16:00'A KADAR VERECEĞİNİZ 2500₺ ve ÜZERİ SİPARİŞLERİNİZ AYNI GÜN KAPINIZDA 🏍️
500 TL üzeri ücretsiz kargo
Arduino ile 4x4 Keypad: LCD’li Hesap Makinesi Yapımı

Arduino ile 4x4 Keypad: LCD’li Hesap Makinesi Yapımı

4x4 Keypad ile LCD'li Hesap Makinesi Yapımı
4x4 Keypad ile LCD'li Hesap Makinesi Yapımı

Arduino ile 4x4 Keypad Kullanarak Hesap Makinesi Yapımı


4x4 Keypad Nedir?


4x4 Membran Keypad, günlük hayatta telefon, ATM veya güvenlik panellerinde gördüğümüz tuş takımlarıyla aynı mantıkta çalışır. Arduino ile birlikte elektronik projelerde şifreli sistemler, veri girişi veya hesap makineleri gibi uygulamalarda kullanılır.


Arduino ile Hesap Makinesi Projesi


Bu projede 4x4 Keypad’e girilen sayıları ve işlem operatörlerini LCD ekran üzerine yansıtarak çalışan bir hesap makinesi oluşturacağız. Girdiğiniz sayıların ekrana doğru şekilde yazıldığını ve işlemlerin hatasız sonuç verdiğini gözlemleyerek projeyi tamamlamış olacağız.

Gerekli Malzemeler



Bu proje için gerekli malzemeler Arduino setleri içerisinde de bulunabilir.


Devre Kurulumu


Tuş takımı Arduino’nun dijital pinlerine bağlanır. LCD ekran, I2C modülü sayesinde yalnızca 2 pin ile kontrol edilir. Böylece bağlantılar düzenli tutulur ve diğer pinler farklı sensörler için kullanılabilir.


4x4 Keypad Hesap Makinesi Devre Şeması
4x4 Keypad Hesap Makinesi Devre Şeması

I2C Adres Kontrolü


LCD ekranı kullanmadan önce I2C adresini tespit etmemiz gerekir. Bunun için aşağıdaki kod çalıştırılır ve Seri Monitör’den adres okunur.


#include <Wire.h>

void setup() {
  Wire.begin();
  Serial.begin(9600);
  Serial.println("I2C adresleri taraniyor...");
}

void loop() {
  for (byte address = 1; address < 127; address++) {
    Wire.beginTransmission(address);
    if (Wire.endTransmission() == 0) {
      Serial.print("Aygit bulundu! Adres: 0x");
      Serial.println(address, HEX);
    }
  }
  Serial.println("Tarama tamamlandi.");
  delay(5000); 
}

Arduino Kodları


Aşağıdaki kod, keypad üzerinden girilen rakam ve operatörleri okuyup LCD’ye yazdırır. "=" tuşuna basıldığında sonuç alt satırda görüntülenir, "C" tuşu tüm girdileri sıfırlar.


#include <Wire.h> //I2C haberleşme için gerekli kütüphane
#include <LiquidCrystal_I2C.h> //LCD ekran ve I2C modülü için gerekli kütüphane
#include <Keypad.h> //Tuş takımı için gerekli kütüphane

LiquidCrystal_I2C lcd(0x27, 16, 2); // (I2C Adresi, Sütun Sayısı, Satır Sayısı)

const byte ROWS = 4; 
const byte COLS = 4; //Tuş takımının satır ve sütün sayısı tanımlanıyor
char keys[ROWS][COLS] = {
  {'1','2','3','+'},
  {'4','5','6','-'},
  {'7','8','9','*'},
  {'C','0','=','/'}
}; //Tuş takımı üzerinde bulunan tuşların işlevleri matris içerisinde gösteriliyor ([2. sütun][3. satır] = 8 gibi)

byte rowPins[ROWS] = {9, 8, 7, 6}; // 6-9 dijital pinleri
byte colPins[COLS] = {5, 4, 3, 2}; // 2-5 dijital pinleri

Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS); //Tuş takımı girdilerini okumak için keypad nesnesi tanımlanıyor

String input = ""; //Kullanıcının gireceği sayıların tutulacağı string
char operation; //İşlem operatörleri (+, -, *, /)
float num1 = 0, num2 = 0; //Kullanıcının gireceği sayılar
bool resultShown = false; //Sonucun ekranda gösterildiğine dair kontrol değişkeni

void setup() {
  lcd.init(); //LCD başlatılıyor
  lcd.backlight(); //LCD arka ışıkları başlatılıyor
  lcd.setCursor(0, 0); //LCD imleci 1. satırın 1. sütununa getiriliyor
  lcd.print("    KirpiLab");
  lcd.setCursor(0, 1); //LCD imleci 2. satırın 1. sütununa getiriliyor
  lcd.print(" Hesap Makinesi");
  delay(2000); //2 saniye bekleniyor
  lcd.clear(); //LCD ekranı temizleniyor
}

void loop() {
  char key = keypad.getKey(); //Basılan tuş okunarak key değişkenine atanıyor

  if (key != NO_KEY) { //Bir tuşa basılmışsa
    if (key >= '0' && key <= '9') { //Basılan tuş bir rakamsa
      if (resultShown) { //önceki işlem sonucu gösterilmişse yeni sayı girişi başlat
        input = ""; //Önceki girdi temizleniyor
        resultShown = false;
        lcd.clear(); //Ekran temizleniyor
      }
      input += key; //Girilen rakam input stringine ekleniyor
      
      lcd.setCursor(0, 0); //Üst satıra işlem yazılıyor
      if (operation) {
        // Eğer işlem seçildiyse: num1 operatör input
        lcd.print(String(num1) + " " + operation + " " + input);
      } else {
        // Eğer daha işlem seçilmediyse: sadece input
        lcd.print(input);
      }
    } 
    else if (key == '+' || key == '-' || key == '*' || key == '/') { //Eğer operatör tuşuna basıldıysa
      if (input.length() == 0 && resultShown) {
        //Eğer sayı girilmeden operatör seçilmişse, num1 zaten önceki sonuçtan geliyor
      } else {
        num1 = input.toFloat(); //Girilen ilk sayı num1'e atanıyor
      }
      operation = key; //Operatör atanıyor
      input = ""; //Yeni giriş için input temizleniyor
      lcd.clear(); //Ekran temizleniyor
      lcd.setCursor(0, 0);
      lcd.print(String(num1) + " " + operation); //İlk sayı ve işlem üst satıra yazılıyor
      lcd.setCursor(0, 1);
      lcd.print("                "); //Alt satır temizleniyor
      resultShown = false;
    } 
    else if (key == '=') { //Eğer '=' tuşuna basıldıysa işlem yapılır
      num2 = input.toFloat(); //İkinci sayı num2'ye atanıyor
      
      lcd.setCursor(0, 0);
      lcd.print(String(num1) + " " + operation + " " + String(num2)); //İşlem üst satıra yazılıyor

      lcd.setCursor(0, 1);
      if (operation == '/' && num2 == 0) {
        lcd.print("= TANIMSIZ"); //Sıfıra bölme durumu kontrol ediliyor
      } else {
        float result = 0;
        switch (operation) { //seçilen operatöre göre işlem yapılıyor
          case '+': result = num1 + num2; break;
          case '-': result = num1 - num2; break;
          case '*': result = num1 * num2; break;
          case '/': result = num1 / num2; break; 
        }
        lcd.print("= "); //Sonuç alt satıra yazılıyor
        lcd.print(result);
        num1 = result; //Devam eden işlemler için sonuç num1'e atanıyor
      }
      resultShown = true; //Sonuç gösterildi işaretleniyor
      input = ""; //Input temizleniyor
    } 
    else if (key == 'C') { //Temizleme (Clear) tuşuna basıldıysa her şey sıfırlanıyor
      input = "";
      num1 = num2 = 0;
      operation = '\0';
      resultShown = false;
      lcd.clear(); //Ekran temizleniyor
    }
  }
}

Projenin Çalışma Mantığı


  • Keypad’den rakamlar girilir ve LCD’ye yazdırılır.
  • Matematiksel operatör seçildiğinde ekranda işlem güncellenir.
  • = tuşuna basıldığında işlem sonucu alt satırda gösterilir.
  • C tuşu ile tüm girdiler sıfırlanır.

Sonuç


Bu proje sayesinde Arduino ile 4x4 Keypad kullanımını öğrenmiş olduk. Hem veri girişi hem de hesaplama mantığını kavramak için harika bir örnektir. Benzer yöntemle şifreli kapı kilit sistemleri veya menü kontrollü projeler de geliştirilebilir. Daha fazla içerik için Arduino kategorimizi inceleyebilirsiniz.


Hazırlayan: Kirpilab | Maker topluluğu için Arduino projeleri