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.

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.