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

  • Nem Sensörü Uygulaması

    DHT sensörleri, kapasitif nem sensörü ve termistör (NTC) olmak üzere iki parçadan oluşur. İçindeanalog dijital dönüştürü vardır. Görsel 3.15a’da DHT11 ve DHT22’nin pin yapısı görülmektedir.DHT11 ve DHT22 aynı pin çıkışına sahiptir ancak bunların farklı özellikleri vardır. DHT11 0 ile 50 °Carasındaki sıcaklığı ±2 °C doğrulukla verirken DHT22 -40 ile 80 °C arasındaki sıcaklığı ±0,5 °Cdoğrulukla…

  • Seri Port Ekran Uygulaması

    Görseldeki çıktılarda seri port ekranına Serial.println() fonksiyonuyla “MerhabaDünya” yazdırılmaktadır.İkinci programda butonla dijital giriş uygulamasında butonun durumu seri port ekranına yazdırılmaktadır void setup() {  Serial.begin(9600); //Seri iletişim baudrate ayarı yapıldı. } void loop() {  Serial.println("Merhaba Dünya!"); } const byte buton = 2; void setup() {  Serial.begin(9600); //Seri iletişim baudrate ayarı yapıldı.  pinMode(buton, INPUT_PULLUP); } 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() { }

  • LCD Uygulaması

    Görseldeki LCD uygulamasında V0 ucuna bağlı dirençle ekran parlaklığı ayarlanmıştır. Bupine potansiyometre bağlanarak da LCD ekranın parlaklığı ayarlanabilir. LCD kütüphanesi dâhilîkütüphanelerde mevcuttur. Menülerden “Taslak  Library Ekle  LiquidCrystal” seçilerek kütüphane taslakta kullanılır. Aşağıdaki program LCD ekrana “Merhaba dünya.” yazdırmaktadır. Buprogramın bir örneğine menülerden “Dosya  Örnekler  LiquidCrystal  HelloWorld” adımlarını izleyerek de ulaşılır….

  • Wi-Fi Uygulaması NodeMCU 1.0 (ESP-12E) nem sensörü

    Bu uygulamada NodeMCU 1.0 (ESP-12E) kullanılarak Arduino IoT Cloud üzerinden başka birkonumdaki LED’i yakıp söndürme ve ortamın nem ve sıcaklık bilgisini bilgisayar veya akıllı telefon üzerinden görüntüleme yapılmaktadır. #include "thingProperties.h" #include "DHT.h" //Adafruit DHT Sensor Library v1.2.3 #define DHTpin 4     // Sensörün bağlandığı pin. NodeMCU 1.0 (ESP-12E) D2 pini. #define DHTtipi DHT11   // Sensör tipi:…

Bir Yorum Yazın

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