PCF8574 ile I2C Tuş Takımı Yapımı ve Arduino ile Kullanımı

Projelerimizde sistem üzerinden bazı ayarlar yapabilmek, bazı değerleri değiştirebilmek için tuş takımlarına ihtiyaç duyarız. 4×4 membran tuş takımı kolay biz çözüm olsa da 8 dijital pini gözden çıkarmamız gerekir Arduino ile kullanmak için. Bu yazımda da yine  bir önceki yazımdaki gibi PCF8574 kullanarak matris tuş takımını(matrix keypad) I2C yolu üzerinden kullanmayı anlatmaya çalışacağm.

Gerekli Malzemeler:

  1. 1 adet 4×4 membran tuş takımı
  2. 1 adet PCF8574
  3. 4 adet 220 ? direnç
  4. Bağlantılar için kablo

Yukarıda şemasını verdiğim devreyi breadboard ya da delikli bakır plakete kurduktan sonra SDA-Arduino Analog4 ve SCL-Arduino Analog5 bağlantılarını yapıyoruz. Aşağıdaki bağlantılardan Keypad ve Keypad_I2C kütüphanelerini indirip yüklüyoruz. Bendeki tuş takımının konnektöründe 1 ve 8in ne taraf olduğu yazılıydı, eğer yazmıyorsa deneyerek pinleri bulmanız gerekiyor.

Aşağıda örnek bir program paylaşıyorum. Örnekte tuş takımından girilen değer serial monitörde yazdırılıyor. Kütüphane içerisinde birkaç örnek program da mevcut.

// PCF8574 I2C Tuş Takımı Örnek Programı
// Yazar: Alexander Brevig
// Düzenleme: İsmail BUÇGÜN
// www.arduinoturkiye.com

#include <Keypad_I2C.h> // Keypad_I2C kütüphanesini bağlıyoruz.
#include <Keypad.h> // Keypad kütüphanesini bağlıyoruz.
#include <Wire.h> // Wire kütüphanesini bağlıyoruz.

// Tuş takımı için kullandığımız PCF8574 için adres.
// PCF8574ün 1,2 ve 3. pinleri için toprak bağlantısı yapılırsa
// bağlantı adresi 0x20 oluyor.
#define I2CADDR 0x20

const byte ROWS = 4; // Tuş takımındaki satır sayısı
const byte COLS = 4; // Tuş takımındaki sütun sayısı

// Tuş takımı üzerindeki butonları matris şeklinde yazıyoruz.
char hexaKeys[ROWS][COLS] = {
  {"1","2","3","A"},
  {"4","5","6","B"},
  {"7","8","9","C"},
  {"*","0","#","D"}
};
byte rowPins[ROWS] = {7, 6, 5, 4}; // Satıların konnektördeki pin numaraları
byte colPins[COLS] = {3, 2, 1, 0}; // Sütunların konnektördeki pin numaraları

// Yeni bir tuş takımı sınıfı oluşturuyoruz.
Keypad_I2C customKeypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS, I2CADDR); 

void setup(){
  customKeypad.begin( );
  // Seri iletişimi başlatıyoruz.
  Serial.begin(9600); 
}

void loop(){
  // Tuş takımından gelen değeri customkey değişkenine atıyoruz.
  char customKey = customKeypad.getKey(); 

  if (customKey != NO_KEY){
  // Serial monitörde customkey değişkenini yazdırıyoruz.
  Serial.println(customKey);
  }
}

PCF8574 yerine PCF8574A da kullanabilirsiniz aynı bağlantı şemasıyla. Fakat bağlantı adresini 0×38 şeklinde değiştirmek gerekiyor. Ayrıca bir önceki yazımdaki PCF8574lü I2C LCD ile birlikte I2C tuş takımı da kullanacaksanız PCF8574ün 2 numaralı pininde Gnd yerine 5v bağlantısı yaparak 0x22 şeklinde bağlantı adresi oluşturabilirsiniz.


 
İyi çalışmalar…

Gerekli Olabilecek Bağlantılar:

İsmail

Üniversite öğrencisi, Arduino meraklısı.

11 comments

  1. ÖZAY YILMAZ dedi ki:

    Keypad_I2C librarysini hiç biryerde bulamadım
    i2ckeypad diye buluyorum onuda çalıştıramıyorum
    nerden bulurum bu dosyayı bi yardımcı olabilir misiniz
    şimdiden teşekkürler

  2. Ömer Koman dedi ki:

    senin keypadin uçları şeması farklı olabilir uçlarını tespit edip oyle bağla hatta arızalı bile olabilir.

  3. Ozan Duman dedi ki:

    merhabalar, öncelikle çalışmalarınızdan yoğun biçimde faydalanmaktayım teşekkür ederim. ben PCF8574 ile hem keypad hem de LCD kullanmak istiyorum. fakat ikisininde örneğinde A4 ve A5 pinleri kullanılmakta.. bu pinler sanırım bu kütüphaneler için sabit.. nasıl bir çözüm bu konuda?
    şimdiden teşekkürler

  4. sabri ünal dedi ki:

    Çoklu değer alıp girilen 2-3-4-5 haneli her neyse bu değerleri atıyorum # karakretini enter gibi kullanıp ne kadar sayı girilmişse bir değişken içine atıp nasıl kullanabiliriz. Basit bir örnek yazma şansınız var mı?
    Teşekkürler…

    • Ömer Koman dedi ki:

      teşekkürünüze teşşekkür önce bu devreyi yapıp biraz kandi çabanızla kod yazıp nerede takıldığınızı sorsanız iyi olacaktı. herkese tek tek yatecek kadar vaktimiz yok ama kodunuz varsa biraz bakıp hatanızı bulmamız daha kolay olabilirdi.

  5. nurettin dedi ki:

    bana arduni uno ile 1 potasiyometre baglayıp binary olarak 12 bit çıkış almak istiyorum bana yardımcı olabilirmisiniz

    • Ömer Koman dedi ki:

      arduino adc 10bittir map komutu ile 12 bite genişletebilirsin ama sonucta yine 10bit cozunurlukte olur aralıklar. foruma gelin sorun. yazı konusu dışında soru sormayın bu işler için forum icad edildi…

E-posta adresiniz gösterilmeyecek. Gerekli alanlar * ile işaretlidir.

*



Sosyal Ağlar