Görseldeki devrede tuş takımı uygulaması verilmiştir. Keypad kütüphanesini kurmak için
menülerden ”Taslak  Library Ekle  Kütüphaneleri Yönet” seçeneğinden arama kutusuna
“Keypad” yazılıp Keypad (Keypad by Mark Stanley and Alexander Brevig) kütüphanesi bulunarak
kurulur. Daha sonra “Taslak  Library Ekle  Keypad” seçilerek programın başına eklenir. Bu
programın bir örneğine menülerden “Dosya  Örnekler  Keypad  CustomKeypad” adımları
izlenerek de ulaşılır.


Kullanılan tuş takımının satır ve sütun bilgileri, tuş dizilimi ve Arduino’ya bağlanan pinlerin bilgileri belirlenen değişkenlere atanır. Daha sonra kütüphane komutuyla tuş haritası oluşturulur.


Keypad tusTakimi = Keypad( makeKeymap(tusDizilimi), satirPinleri, sutunPinleri, satir, sutun);

Oluşturulan “tusTakimi” nesnesiyle kütüphane fonksiyonları çağrılır. tusTakimi.getKey()
fonksiyonu, basılan tuşa ait karakteri döndürür.

#include <Keypad.h> //Tuş takımı kütüphanesi.

const byte satir = 4; //Dört satır.
const byte sutun = 4; //Dört sütün.

char tusDizilimi[satir][sutun] = {//Tuş takımındaki sebollerin dizilimini tanımlama.
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};
byte satirPinleri[satir] = {9, 8, 7, 6};
//{R1, R2, R3, R4} Satır pinlerinin Arduino pinlerine bağlantısı.
byte sutunPinleri[sutun] = {5, 4, 3, 2};
//{C1, C2, C3, C4} Sütün pinlerinin Arduino pinlerine bağlantısı.

//tusTakimi adında nesne oluşturma.
Keypad tusTakimi = Keypad( makeKeymap(tusDizilimi), satirPinleri, sutunPinleri, satir, sutun);

void setup() {
  Serial.begin(9600);
}

void loop() {
  char tus = tusTakimi.getKey();
  if (tus) {
    Serial.println(tus);
  }
}

#include <Keypad.h> //Tuş takımı kütüphanesi.

const byte satir = 4; //Dört satır.
const byte sutun = 4; //Dört sütün.

char tusDizilimi[satir][sutun] = {//Tuş takımındaki sebollerin dizilimini tanımlama.
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};
byte satirPinleri[satir] = {9, 8, 7, 6};
//{R1, R2, R3, R4} Satır pinlerinin Arduino pinlerine bağlantısı.
byte sutunPinleri[sutun] = {5, 4, 3, 2};
//{C1, C2, C3, C4} Sütün pinlerinin Arduino pinlerine bağlantısı.

//tusTakimi adında nesne oluşturma.
Keypad tusTakimi = Keypad( makeKeymap(tusDizilimi), satirPinleri, sutunPinleri, satir, sutun);

void setup() {
  Serial.begin(9600);
  for (byte i = 0; i < 4; i++) {
    for (byte j = 0; j < 4; j++) {
      Serial.print(tusDizilimi[i][j]);
      Serial.print("\t");
      delay(200);
    }
    Serial.println();
  }
}

void loop() {
  /* char tus = tusTakimi.getKey();

    if (tus) {
     Serial.println(tus);
    }*/

}

#include <Keypad.h> //Tuş takımı kütüphanesi.

byte hane = 0, LED = 13;
char sifre[] = "123ABC"; // Kullanılacak şifre.
char giris[sizeof(sifre)]; //Şifre uzunluğu kadar dizi oluştur.

//---Tuş takımı ayarları.---
const byte satir = 4; //Dört satır.
const byte sutun = 4; //Dört sütün.
char tusDizilimi[satir][sutun] = {//Tuş takımındaki sebollerin dizilimini tanımlama.
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};
byte satirPinleri[satir] = {9, 8, 7, 6};
//{R1, R2, R3, R4} Satır pinlerinin Arduino pinlerine bağlantısı.
byte sutunPinleri[sutun] = {5, 4, 3, 2};
//{C1, C2, C3, C4} Sütün pinlerinin Arduino pinlerine bağlantısı.

//tusTakimi adında nesne oluşturma.
Keypad tusTakimi = Keypad( makeKeymap(tusDizilimi), satirPinleri, sutunPinleri, satir, sutun);

void setup() {
  Serial.begin(9600);
  Serial.println("Lütfen şifrenizi giriniz: ");
}

void loop() {
  char tus = tusTakimi.waitForKey(); //Tuşa basılana kadar bekle.
  Serial.print(tus); //Basılan tuşu ekrana yazdır.
  giris[hane] = tus; //Sırayla her tuşu giris dizisine yükle.
  hane++;

  if (hane == sizeof(sifre) - 1) { //Şifre uzunluğu kadar tuşa basıldığında...
    if (!strcmp(giris, sifre)) { //İki diziyi karşılaştır.
      Serial.println("\nŞifre doğru. Kapı açıldı");
      digitalWrite(LED, HIGH);
      delay(1000);
      Serial.println("Lütfen şifrenizi giriniz: ");
    } else Serial.println("\nŞifre yanlış. Lütfen tekrar deneyiniz.");
    hane = 0;
  }
}

#include <Keypad.h> // Tuş takımı kütüphanesi.
#include <EEPROM.h>
byte kullaniciSayisi = 0; // EEPROM hafızanın 0. baytında tutulacak.
byte toplamKullaniciSayisi = 100; // Sistemi en fazla kaç kişi kullanacak.
byte i, hane = 0, LED = 2, buzzer = 4;
char girilenSifre[4]; // Dört haneli şifrenin her bir rakamını bir baytta tut.

//---Tuş takımı ayarları.---
const byte satir = 4; // Dört satır.
const byte sutun = 4; // Dört sütün.
char tusDizilimi[satir][sutun] = { // Tuş takımındaki sebollerin dizilimini tanımlama.
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};
byte satirPinleri[satir] = {18,19,21,22};
//{R1, R2, R3, R4} Satır pinlerinin Arduino pinlerine bağlantısı.
byte sutunPinleri[sutun] = {23,25,26,27};
//{C1, C2, C3, C4} Sütün pinlerinin Arduino pinlerine bağlantısı.

//tusTakimi adında nesne oluşturma.
Keypad tusTakimi = Keypad( makeKeymap(tusDizilimi), satirPinleri, sutunPinleri, satir, sutun);
void setup() {
  //EEPROM.write(0, 0); // Yönetici şifresini sıfırlamak için kullanılır (kullanıcı sayısı da sıfırlanır).
  Serial.begin(9600);
  pinMode(LED, OUTPUT);
  pinMode(buzzer, OUTPUT);
  kullaniciSayisi = EEPROM.read(0); // Cihaz yeniden başladığında kart sayısını EEPROM’dan al
  if (kullaniciSayisi == 0) { // Yönetici kartı sisteme tanımlı değilse...
    Serial.println("Lütfen yönetici şifresini giriniz.");
    sifreOku();
    for (i = 0; i < 4; i++) {
      EEPROM.write(1 + i, girilenSifre[i]); // 1. adresten itibaren 4 haneli şifreyi yaz.
    } // Yönetici şifresi EEPROM hafızanın 1. - 4. baytlarında tutulacak (İlk 5 bayt doldu.).
    EEPROM.write(0, 1); // İlk şifre yöneticinin. Kullanıcı sayısı 1 oldu.
    Serial.println("Yönetici şifresi hafızaya kaydedildi.");
  }
}

void loop() {
  sifreOku();

  if (sifreKontrol())
    sifreGecerli();
  else
    sifreGecersiz();
}

void sifreOku() {
  Serial.println("Lütfen şifrenizi giriniz: ");
  while (hane < 4) { // Dört kere tuşa basılacak.
    char tus = tusTakimi.waitForKey(); // Tuşa basılana kadar bekle.
    Serial.print(tus); // Basılan tuşu ekrana yazdır.
    girilenSifre[hane] = tus; // Sırayla her tuşu girilenSifre dizisine yükle.
    hane++;
  }
  hane = 0; // Sonaraki döngü için sıfırla.
}

void sifreGecerli() {
  Serial.println("\n Şifre doğru. Kapı açıldı");
  digitalWrite(LED, HIGH);
  digitalWrite(buzzer, HIGH); // Dıııt.
  delay(2000);
  digitalWrite(LED, LOW);
  digitalWrite(buzzer, LOW);
}

void sifreGecersiz() { // Dıt dıt.
  Serial.println("\n Şifre yanlış. Lütfen tekrar deneyiniz.");
  digitalWrite(buzzer, HIGH);
  delay(500);
  digitalWrite(buzzer, LOW);
  digitalWrite(buzzer, HIGH);
  delay(500);
  digitalWrite(buzzer, LOW);
}

void yeniSifreKaydet() {
  Serial.println("\n Lütfen kaydedilecek yeni şifreyi giriniz: ");
  sifreOku();
  kullaniciSayisi = EEPROM.read(0); // EEPROM'un 0. adresinden kullanıcı sayısını al.
  for (i = 0; i < 4; i++) {
    EEPROM.write(kullaniciSayisi * 4 + 1 + i, girilenSifre[i]);   //Yeni şifreyi sıradaki dört byte'a yaz.
  }
  EEPROM.write(0, EEPROM.read(0) + 1); // Kart sayısını bir arttır.
  Serial.println("");
  Serial.print(EEPROM.read(0));
  Serial.print(". kullanıcı ");
  Serial.print(girilenSifre);
  Serial.println(" hafızaya kaydedildi.");
}

boolean sifreKontrol() { // Tüm EEPROM hafızayı tarar. Şifre geçerliye 1, değilse 0 döndürür.
  int j;
  byte k = 0;
  for (j = 1; j < toplamKullaniciSayisi * 4; j += 4) {
    /* Kayıtlı tüm kartlara bak. UNO hafızasına 1024/4=256 kart tanımlanabilir.
      j değişkeni kayıtlı kartların dört byte'lık ID'sinin ilk byte numarasını tutmaktadır.*/
    for (i = 0; i < 4; i++) { // Dört haneli şifre dört byte yer kaplar.
      if (EEPROM.read(j + i)  == girilenSifre[i]) { //Okunan kartı kayıtlı olanlarla karşılaştır. (5. byte'tan sonra)
        k++;
        if (k == 4) { // Tüm byte'lar doğrulandıysa...
          if (j == 1) // Okunan kart yönetici kartı ise...
            yeniSifreKaydet();
          else return 1; // 1 döndür. (Geçerli bir kullanıcı şifresi).
        }
      }
    }
  }
  return 0; // Girilen şifre hafızda yoksa 0 döndür.
}

Categories:

Tags:

No responses yet

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Dersler