Arduino İle Keypad Kullanımı
Merhaba arkadaşlar! Bazı projelerimizde kullanıcıdan şifre, miktar veya buna benzer bilgiler istediğimiz zamanlar oluyor. Bu projelerde genellikle keypad kullanılmaktadır. Bu projemizde “Keypad Nedir?” ve “Arduino İle Keypad Kullanımı”‘ nı öğreneceğiz.
Keypad Nedir?
Keypad’in Türkçe anlamı tuş takımı demektir. Tuş takımı, satırlar ve sütunlar (matris olarak adlandırılır) halinde düzenlenmiş bir dizi düğmedir. Her düğmeye anahtar denir. Keypadlerin bir çok modeli bulunmaktadır. Ama piyasada en çok bulunan keypadler 3×4 ve 4×4 modelidir. Bu modeller aşağıda gösterilmektedir.
3×4 keypad, 4 satır ve 3 kolon pininden oluşmaktadır. 4×4 keypadi ise 4 satır ve 4 kolon pininden oluşmaktadır. Bu keypadlerin pin diyagramı aşağıda gösterilmiştir.
Pin diyagramımızı öğrendiğimize göre artık projemize geçebiliriz. Bu yazımızda arduino ile keypadden 4 haneli bir şifre girilmesini isteyeceğiz ve şifremizin doğru veya yanlış olduğunu seri monitöre yazdıracağız. Bu projeyi 2 şekilde yapacağız ilk olarak keypadin kullanımını hazır yazılmış bir kütüphane ile yapacağız ve ardından kütüphanesiz olarak yapacağız.
Projede Kullanılacak Malzemeler
Arduino İle Keypad Bağlantı Şeması
Hazır Kütüphane Keypad Kodu
İlk olarak keypad kütüphanesi yüklü değilse aşağıdaki linkten indirip kuralım.
// 4x4 KEYPAD KULLANIMI
#include "Keypad.h"
String sifre="8521";
String girilensifre="";
int harfsayisi=0;
const byte SatirSayisi = 4; // Satır sayısını gösteren sabiti tanımla
const byte SutunSayisi = 4; // Sütun sayısını gösteren sabiti tanımla
// Tuşları gösteren karakter matrisini tanımla
char keys[SatirSayisi][SutunSayisi] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte SatirPinleri[SatirSayisi] = {11, 10, 9, 8}; // Sırasıyla keypad satır pinlerinin bağlandığı Arduino pinleri
byte SutunPinleri[SutunSayisi] = {7, 6, 5, 4}; // Sırasıyla keypad sütun pinlerinin bağlandığı Arduino pinleri
// keypad1 adında bir keypad nesnesi tanımla
Keypad keypad1 = Keypad(makeKeymap(keys), SatirPinleri, SutunPinleri, SatirSayisi, SutunSayisi);
void setup()
{
Serial.begin(9600);
}
void loop()
{
char key = keypad1.getKey();
if (key != NO_KEY){
harfsayisi=harfsayisi+1;
girilensifre=girilensifre+key;
Serial.println(key);
}
if(harfsayisi==4){
if(girilensifre==sifre){
Serial.println("Dogru sifre girildi.");
}else{
Serial.println("Yanlis sifre girildi.");
}
harfsayisi=0;
girilensifre="";
}
}
Arkadaşlar kodumuzu anlatalım. Keypaddan girilen şifremiz girilensifre adlı değişkende tutulmaktadır. Eğer şifremiz 4 harfe ulaştığında bizim sifre değişkenimizde tutulan şifre ile karşılaştırılmaktadır ve şifre doğru ise bunu seri monitöre “Dogru sifre girildi.” yazmaktadır. Eğer şifre yanlış ise “Yanlis sifre girildi.” yazmaktadır. Ayrıca şifre kontrolü yapıldıktan sonra girilen harf sayımız sıfırlama yapılarak şifrenin tekrar girilmesini sağlamaktadır.
Şimdi aynı kodu kütüphanesiz olarak nasıl yapabiliriz buna bakalım.
Kütüphanesiz Keypad Kodu
const char satirlar = 4; // satır sayısı tanımlanıyor
const char kolonlar = 4; // kolon sayısı tanımlanıyor
String sifre="8521";
String girilensifre="";
int harfsayisi=0;
const char keys[4][4]={ //butonlar için matrix oluşturuluyor
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
char satirPinleri[satirlar] = {11,10,9,8};
char kolonPinleri[kolonlar] = {7,6,5,4};
void setup () {
Serial.begin(9600);
for(char r = 0; r < satirlar; r++){
pinMode(satirPinleri[r], INPUT); //satırlar input yapılıyor
digitalWrite(satirPinleri[r], HIGH); //satırlar high yapılıyor
}
for(char c = 0; c < kolonlar; c++){
pinMode(kolonPinleri[c], OUTPUT); //kolonlar output yapılıyor
}
}
void loop() {
char key = getKey();
if(key != 0){
harfsayisi=harfsayisi+1;
girilensifre=girilensifre+key;
Serial.println(key);
}
if(harfsayisi==4){
if(girilensifre==sifre){
Serial.println("Dogru sifre girildi.");
}else{
Serial.println("Yanlis sifre girildi.");
}
harfsayisi=0;
girilensifre="";
}
}
char getKey(){
char k = 0;
for(char c = 0; c < kolonlar; c++){
digitalWrite(kolonPinleri[c], LOW);
for(char r = 0; r < satirlar; r++){
if(digitalRead(satirPinleri[r]) == LOW){
delay(20); //20ms bekleme
while(digitalRead(satirPinleri[r])== LOW);
k = keys[r][c];
}
}
digitalWrite(kolonPinleri[c], HIGH);
}
return k;
}
Arkadaşlar bir yazımızın daha sonuna geldik umarım yararlı olmuştur.