Bu projemizde, harici hiçbir kütüphane (Keypad.h vb.) kullanmadan 4x3 tuş takımını (keypad) nasıl tarayacağımızı ve basılan tuşları nasıl tespit edeceğimizi öğreniyoruz. Satır ve sütun tarama mantığını kavramak için harika bir temel uygulamadır.


// 4x3 KEYPAD KULLANIMI (KÜTÜPHANESİZ)
const byte SatirSayisi = 4;
const byte SutunSayisi = 3;
// Tuş matrisimiz
char keys[SatirSayisi][SutunSayisi] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'#','0','*'}
};
byte SatirPinleri[SatirSayisi] = {8, 7, 6, 5};
byte SutunPinleri[SutunSayisi] = {4, 3, 2};
void setup()
{
Serial.begin(9600);
// Satır pinlerini ÇIKIŞ (OUTPUT) yapıyoruz ve başlangıçta HIGH (1) veriyoruz
for (int i = 0; i < SatirSayisi; i++) {
pinMode(SatirPinleri[i], OUTPUT);
digitalWrite(SatirPinleri[i], HIGH);
}
// Sütun pinlerini GİRİŞ (INPUT_PULLUP) yapıyoruz.
// Dahili pull-up dirençleri sayesinde tuşa basılmadığında bu pinler HIGH okunur.
for (int j = 0; j < SutunSayisi; j++) {
pinMode(SutunPinleri[j], INPUT_PULLUP);
}
}
void loop()
{
char basilanTus = tusOku();
if (basilanTus != '\0') { // Eğer geçerli bir tuş dönmüşse ('\0' değilse)
Serial.println(basilanTus);
delay(250); // Aynı tuşun arka arkaya yüzlerce kez okunmasını engellemek için küçük bir gecikme
}
}
// Kütüphanenin yaptığı tarama işlemini yapan fonksiyon
char tusOku() {
for (int s = 0; s < SatirSayisi; s++) {
// İlgili satırı LOW (0) yapıyoruz (Testi başlatıyoruz)
digitalWrite(SatirPinleri[s], LOW);
for (int c = 0; c < SutunSayisi; c++) {
// Eğer bu sütun LOW okunuyorsa, kullanıcı o satır ve sütundaki tuşa basıyor demektir
if (digitalRead(SutunPinleri[c]) == LOW) {
// Diğer taramaları bozmamak için satırı tekrar HIGH yapıp tuşu döndürüyoruz
digitalWrite(SatirPinleri[s], HIGH);
return keys[s][c];
}
}
// Test bitince satırı tekrar eski haline (HIGH) getiriyoruz
digitalWrite(SatirPinleri[s], HIGH);
}
return '\0'; // Hiçbir tuşa basılmadıysa boş karakter döndür
}
Yazdığımız tarama algoritması, her satırı sırayla LOW (yani 0 volt) seviyesine çeker. O sırada sütunları dinleriz. Eğer o satır LOW iken sütunlardan biri de LOW değerine düşmüşse, fiziksel olarak o tuşa basılarak devre tamamlanmış demektir. Kodumuz basılan tuşun karakterini döndürdükten sonra satırı tekrar eski haline (HIGH) getirerek taramaya devam eder.
Henüz yorum yapılmamış. İlk yorumu siz yapın!