Keypad Uygulaması

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.
}

Benzer Temrinler & Yazılar

  • Potansiyometreyle Analog Giriş Uygulaması

    Görselde potansiyometrenin pin yapısı ve yapılan ayara göre orta ucundan alınan gerilimdeğerleri görülmektedir. Potansiyometrenin bir kenardaki ucu GND’ye, diğer kenardaki ucuysa 5V’a bağlanmıştır. Gerilim bölücü olarak çalışan bu potansiyometrenin orta ucundan 0-5 V arasında bir gerilim elde edilir. Bu gerilim Arduino’nun A3 analog girişine uygulanmıştır void setup() { Serial.begin(9600); //Seri iletişim başlatıldı. } void loop()…

  • EEPROM.read

    #include <EEPROM.h> byte deger; void setup() { Serial.begin(9600); int hafizaBoyutu = EEPROM.length(); //Kartın hafıza boyutunu al. for (int adres = 0; adres < hafizaBoyutu; adres++) { deger = EEPROM.read(adres); //Analog veriyi 10 ms aralıklarla tüm hafızadan sırayla oku. Serial.print("Adres = "); Serial.print(adres); Serial.print("\t Değer = "); Serial.println(deger); delay(10); } } void loop() { }

  • Optokuplörle dijital giriş uygulaması

    Görseldeki devrede optokuplör A0’a (14 numaralı pin) bağlanmıştır. Bu uygulamada A0pini dijital giriş olarak kullanılmıştır. Optokuplör iletime geçtiğinde normalde pull-up’tan dolayı 1olan A0 C-E üzerinden GND’ye bağlanır (0 olur.). Programda üç adet boolean (bool) değişken yanyana tanımlanmış ve ikisine değer atanmıştır. Programda HIGH veya 1 kullanılan yerlerde içinde1 bilgisi olan yak değişkeni kullanılmıştır.Optokuplörün 1 ve…

  • Bluetooth Uygulaması

    Bluetooth modülle haberleşmek için telefondan bluetooth bağlantısı açılarak hc-05 cihazı bulunur ve “Bluetooth aygıtını seç” düğmesiyle hc-05 seçilir. Varsayılan şifre “1234” veya “0000” dır.Bluetooth ile “A” harfi gönderilerek LED yakılır, “B” harfi gönderilerek LED söndürülür (Görseldeki). Bluetooth uygulama devresi Görselde görülmektedir. void setup() { pinMode(13, OUTPUT); Serial.begin(9600); // Bluetooth ile seri iletişimi başlat. } void…

  • Sıcaklık Dedektörü Devresi

    Görseldeki LM35 sıcaklık dedektörünün pin yapısı görülmektedir. Görsel 6.2’deki LM35’li sıcaklık dedektörü devresi, ortam sıcaklığı 30 °C’yi aşınca ses ve ışıkla ikaz verir. +V: 5 V besleme. OUT: Analog veri çıkışı. GND: Toprak pini. const byte buzzer = 13, LED = 12; void setup() { Serial.begin(9600); pinMode(buzzer, OUTPUT); pinMode(LED, OUTPUT); } void loop() { int…

  • Analog Çıkış Uygulaması

    Görseldeki uygulamada LED 9 numaralı PWM özellikli pine bağlanmıştır. LED’in parlaklığınıartırıp azaltmak için analogWrite() fonksiyonun ikinci parametresi 0-255 arası değiştirilir. 255’eyaklaştıkça parlaklık artmakta, 0’a yaklaştıkça parlaklık azalmaktadır. const byte ledPin = 9; // LED 9 numaralı pine bağlı. void setup() { // PWM pinleri çıkış olarak ayarlamaya gerek yoktur. } void loop() { for (int…

Bir Yorum Yazın

E-posta adresiniz yayınlanmayacaktır. Gerekli alanlar * ile işaretlenmiştir.