Merhaba arkadaşlar, bu yazımızda 4×4 Keypad (Membran tuş takımı) kullanımını öğrenip hesap makinesi uygulaması gerçekleştireceğiz.
4×4 Keypad ( Membran Tuş Takımı )
Membran keypad tuş takımları arduino projelerinde, hesap makinelerinde, kapı kilitleme, kasa şifresi, robot kontrolü gibi projelerde gördüğünüz tuş takımlarıdır. Bununla birlikte, arduino projelerinde, menülerde gezinmek, şifre girmek ve robotları kontrol etmek için kullanılabilir. Projeleriniz için bilgi giriş donanımı olarak kullanılır. Herhangi bir mikrokontrolör ile kolayca kontrol edilmektedir.
Membran tuş takımları ince, esnek bir plastik malzemeden yapılmıştır ve arkasında bulunan yapışkan sayesinde projelerinizde kolaylık sağlamaktadır. 4×3, 4×4, 4×1 gibi modelleri de mevcuttur. Biz bugün projemizde 4 x 4 ‘lük bir tuş takımı tercih edeceğiz.
Özellikler
- Boyut: 68.9 x 76 x 0.8mm
- Kablo Boyu: 85mm (konnektör dahil)
- Konnektör: dupont 8 pin, 0.1 inch (2.54mm)
- Ağırlık: 7g
4×4 Keypad Kullanımı
Bu projemizde tuş takımında bastığımız tuşların seri port ekranında görünmesini sağlayacağız.
Devre Şeması
Kodlar
Lcd ekran ve keypad kütüphanelerini buradan indirebilirsiniz. ( kütüphane )
#include <Keypad.h> | |
const byte ROWS = 4; //satır | |
const byte COLS = 4; //sutun | |
char buton; | |
char keys [ROWS] [COLS] = { | |
{'1', '2', '3', 'A'}, | |
{'4', '5', '6', 'B'}, | |
{'7', '8', '9', 'C'}, | |
{'*', '0', '#', 'D'} | |
}; | |
byte rowPins[ROWS] = {9, 8, 7, 6}; | |
byte colPins[COLS] = {5, 4, 3, 2}; | |
Keypad myKeypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); | |
void setup() | |
{ | |
Serial.begin(9600); //Keypadimizden Gelen Buton Değerlerini Okumak İçin Seri Ekranı Başlatıyoruz | |
} | |
void loop() | |
{ | |
buton = myKeypad.getKey(); //Klavye Adını Verdiğimiz Keypadimizden Gelen Buton Değerlerini Arduinoya Okutuyoruz | |
if (buton) | |
{ | |
Serial.println(buton); //Seri Ekranımıza Basılan Buton Değerini Yazdırıyoruz | |
} | |
} |
4×4 Keypad ile Hesap Makinesi Uygulaması
I2C LCD ekran ile beraber bir hesap makinesi yapacağız. ( I2C Lcd ekran kullanımı için yazımızı okuyabilirsiniz.)
Devre Şeması
Kodlar
#include <LiquidCrystal_I2C.h> //LCD ekran kütüphanesi | |
LiquidCrystal_I2C lcd(0x27, 16, 2); // Bu kodu kullanırken ekranda yazı çıkmaz ise 0x27 yerine 0x3f yazınız | |
#include <Keypad.h> //keypad kütüphanesi | |
const byte ROWS = 4; //satır | |
const byte COLS = 4; //sutun | |
char keys [ROWS] [COLS] = { | |
{'1', '2', '3', '+'}, | |
{'4', '5', '6', '–'}, | |
{'7', '8', '9', '*'}, | |
{'C', '0', '=', '/'} | |
}; | |
byte rowPins[ROWS] = {9, 8, 7, 6}; // satır pinleri | |
byte colPins[COLS] = {5, 4, 3, 2}; // sutun pinleri | |
Keypad myKeypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); | |
boolean presentValue = false;leblebi | |
boolean next = false; | |
boolean final = false; | |
String num1, num2; | |
float answer = 0; | |
char op; | |
void setup() | |
{ | |
lcd.init(); | |
lcd.backlight(); // arka plan ısıgı | |
lcd.setCursor(0,0); // cursor baslangıc | |
lcd.print("Robolink"); | |
lcd.setCursor(0,1); // cursor baslangıc | |
lcd.print("Teknoloji"); | |
delay(2000); | |
lcd.clear(); | |
} | |
void loop() | |
{ | |
char key = myKeypad.getKey(); | |
if (key != NO_KEY && (key == '1' || key == '2' || key == '3' || key == '4' || key == '5' || key == '6' || key == '7' || key == '8' || key == '9' || key == '0')) | |
{ | |
if (presentValue != true) | |
{ | |
num1 = num1 + key; | |
int numLength = num1.length(); | |
lcd.setCursor(0, 0); | |
lcd.print(num1); | |
} | |
else | |
{ | |
num2 = num2 + key; | |
int numLength = num2.length(); | |
int numLength1 = num1.length(); | |
lcd.setCursor(1 + numLength1, 0); | |
lcd.print(num2); | |
final = true; | |
} | |
} | |
else if (presentValue == false && key != NO_KEY && (key == '/' || key == '*' || key == '–' || key == '+')) | |
{ | |
if (presentValue == false) | |
{ | |
int numLength = num1.length(); | |
presentValue = true; | |
op = key; | |
lcd.setCursor(0 + numLength, 0); | |
lcd.print(op); | |
} | |
} | |
else if (final == true && key != NO_KEY && key == '=') | |
{ | |
if (op == '+') | |
{ | |
answer = num1.toInt() + num2.toInt(); | |
} | |
else if (op == '–') | |
{ | |
answer = num1.toInt() – num2.toInt(); | |
} | |
else if (op == '*') | |
{ | |
answer = num1.toInt() * num2.toInt(); | |
} | |
else if (op == '/') | |
{ | |
answer = num1.toFloat() / num2.toFloat(); | |
} | |
lcd.clear(); | |
lcd.setCursor(0, 0); | |
lcd.print("="); | |
lcd.print(answer); | |
lcd.noAutoscroll(); | |
} | |
else if (key != NO_KEY && key == 'C') | |
{ | |
lcd.clear(); | |
presentValue = false; | |
final = false; | |
num1 = ""; | |
num2 = ""; | |
answer = 0; | |
op = ' '; | |
} | |
} |
kodu yazdığım zaman 83. satırda hata veriyor.(kopyala yapıştır da yaptım) bir bakar mısınız?
83 satırdaki hatayı düzeltmek için bütün sayfadaki – işaretleri silip aynı tuşla yazıp tekrar yüklerseniz düzelir. İşaretleri faklı algıladığından uyumsuzluk ortaya çıkıyor
kodu bida yükle arduino onu tanımaya çalışıyo bida kopyala yapıştır oluyo
Merhaba. Arduino kullanmada yeniyim. Bu yüzden kütüphaneyi kurarken bir zorlukla karşılaştım. Yüklemeye çalıştığım zaman “.Belirtilen dizin/zip dosyası geçerli bir kütüphane içermiyor.” yazısıyla karşılaşıyorum. Bu ödevi acil olarak yetiştirmem lazım. Hatanın kaynağı nedir acaba?
MERHABA YAPMIŞ OLDUĞUNUZ ÇALIŞMA HARİKA TEBRİK EDER ÇALIŞMALARINIZDA BAŞARILAR DİLERİM.
Hülya KİBAROĞLU.
Merhaba yapmış olduğunuz çalışma harika çalışmalarınızda başarılar dilerim.
Hülya KİBAROĞLU.
83 satırdaki hatayı düzeltmek için bütün – silip tekrar yazın karakter farklılığından kaynaklanıyor