Raspberry Pico ile Keypad Kullanımı

Gokrtl

Gökhan Kartal (TeknoDay)
Staff member
Katılım
27 Şubat 2019
Mesajlar
11,212
Bu konu altında raspberry pico ile keypad kullanımına bakacağız.
Eski bir uygulamamdaki kodları aldım. Bunları güç kaynağı kodlarımıza entegre edeceğiz.

C:
#include "Wire.h"
#include "I2CKeyPad.h"

const uint8_t KEYPAD_ADDRESS = 0x20;
   I2CKeyPad keyPad(KEYPAD_ADDRESS);
    int ToplamSayi = 0;
    int NoktaSay = 0;

bool konsol = false;
    
void setup() {
  Serial.begin(115200);
  Wire.begin();
  if (keyPad.begin() == false)
  {
    Serial.println("\nERROR: cannot communicate to keypad.\nPlease reboot.\n");
    while(1);
  }
  if (konsol) {
        Serial.begin(115200);
        delay(500);
        Serial.println(F("Tusla Gelsin v1"));
    }

}

void SatirTemizle(int satir) {
    lcd.setCursor(0,satir);
    lcd.print("                ");
    lcd.setCursor(0,satir);
}

void loop() {
  uint8_t idxx = keyPad.getKey();
    char idx = "D#0*C987B654A321"[idxx];

    if ( isdigit(idx) ) {
        uint8_t sayi = idx - '0';
        ToplamSayi = ((ToplamSayi * 10) + sayi);
        if (konsol) {
            Serial.print( "Tuslanan Sayi:" );
            Serial.println(ToplamSayi);
        }
        SatirTemizle(1);
        lcd.print(ToplamSayi);
    } else if ( idx == '#' ) {
// # tuşu enter gibi davranır
        SatirTemizle(1);
        lcd.print("Urun Ekleniyor.");
        if (konsol) {
            Serial.print(ToplamSayi);
            Serial.println( " Urun Eklendi.\n" );
        }
        int urlEk = ToplamSayi;
        String TamUrl = url_ekle + urlEk;
        SiparisVer(TamUrl, urlEk);
        ToplamSayi = 0;
    } else if ( idx == '*' ) {
// * tuşu yanlış girişi sıfırlar....
        ToplamSayi = 0;
        if (konsol) {
            Serial.print("ToplamSayi ");
            Serial.print(ToplamSayi);
            Serial.println(" sıfırlandı.\n");
        }
        SatirTemizle(1);
        lcd.print("Sayi Silindi...");
        delay(4000);       
        SatirTemizle(1);
        lcd.print("Urun No Giriniz");
    } else if ( idx == 'A' ) {
// A TUŞU Bu tuş hızlıca favori ürün siparişi verebilir!
        if (konsol) {
            Serial.println("A tuşuna basıldı");
            }
        SatirTemizle(1);
        lcd.print("A");
    } else if ( idx == 'B' ) {
// B TUŞU Bu tuş hızlıca favori ürün siparişi verebilir!
        if (konsol) {
            Serial.println("B tuşuna basıldı");
            }
        SatirTemizle(1);
        lcd.print("B");
    } else if ( idx == 'C' ) {
// C Tuşu NodeMCU ya Reset Atar!
        digitalWrite(D0, LOW);
    } else if ( idx == 'D' ) {
// D Tuşu numarası girilen ürünü siler!
        SatirTemizle(1);
        lcd.print("Urun Ekleniyor.");
        if (konsol) {
            Serial.print(ToplamSayi);
            Serial.println( " Urun Eklendi.\n" );
        }
        int urlEk = ToplamSayi;
        String TamUrl = url_sil + urlEk;
        SiparisSil(TamUrl, urlEk);
        ToplamSayi = 0;
    }
    delay(300);

}
 
Çok güzel bir şey bu :)
Pcf8574 seri haberleşme modülü.
Üzerindeki 9 tane sarı pine 4x4 keypadi bağlıyorsun, erkek pin header dan da arduino, pico artık her ne kullanıyorsan ona bağlıyorsun.
Burada işin güzel tarafı şu; pcf8574 üzerinde bir de dişi pin header var. Oradan da başka bir i2c modülü bağlayabiliyorsun. Ben oradan 16x2 ekran bağlamıştım. Bu sayede arduinonun sadece sda ve scl olan iki pinini kullanarak birden fazla eleman bağlayabiliyorsun.

images (8).jpeg
 
pico ile çalıştırabildin mi peki
Daha denemedim. Konusunu açıp evden çıktım. Mesai başladı.

Ama picoda da sda ve scl pinleri olduğuna göre 90% çalışacaktır.

Bu da bizzat benim anlatımım ile nasıl yapıldığı.

 
Benim asıl merak ettiğim, piconun hemen hemen her bacağında sda ve scl var. Bunları bir birinden bağımzsız kullanabiliyor muyuz, yoksa hepsi aynı arabirime mi bağlı?
 
Son düzenleme:
Benim asıl merak ettiğim, piconun hemen hemen her bacağında sda ve scl var. Bunları bir birinden bağımzsız kullanabiliyır muyuz, yoksa hepsi aynı arabirime mi bağlı?
aslında sadece 2 tane ı2c portu var fakat sanırım bu portlar birçok pine bağlı içeriden onu da çözeriz hangi pindekini kullanmak istediğimizi.
 
Pinler yapılandırılabiliyordur. Yani içerideki iki tane I2C nin birçok değişik pinden dışarı çıkmasını sağlayabiliyorsun.
 
aslında sadece 2 tane ı2c portu var fakat sanırım bu portlar birçok pine bağlı içeriden onu da çözeriz hangi pindekini kullanmak istediğimizi.
İçeriden bağlıysa farketmiyor olması lazım. Hangi pine bağlarsan bağla eninde sonunda aynı yere gidiyor. Ha 11-12 ye iki farklı cihaz bağlamışsın, ha 11-12, 13-14 de ayrı bağlamışsın.
 
İçeriden bağlıysa farketmiyor olması lazım. Hangi pine bağlarsan bağla eninde sonunda aynı yere gidiyor. Ha 11-12 ye iki farklı cihaz bağlamışsın, ha 11-12, 13,14 de ayrı bağlamışsın.
bu şekilde bir ı2c haberleşmesi yaptığında bütün pinlerden ı2c haberleşmesi çıkar anlamı kalmaz diğer i/o'ların mutlaka pin seçiyor olabilmemiz lazım
 
ı2c.png

2 tane ı2c portunun hangisini kullanacağımızı
Wire,Wire1 olarak seçiyoruz.
Hangi pinden kullanacağımızı setSDA setSCL diyip parantez içine yazıyoruz.
 
bu şekilde bir ı2c haberleşmesi yaptığında bütün pinlerden ı2c haberleşmesi çıkar anlamı kalmaz diğer i/o'ların mutlaka pin seçiyor olabilmemiz lazım
Neden anlamı kalmasın ki? Adam seçenek sunmuştur. Pinleri ister i2c olarak kullan, ister pwm, ister dijital olarak kullan. Arduinodaki gibi iki pine muhtaç kalma demiştir.
 
İçeriden bağlıysa farketmiyor olması lazım. Hangi pine bağlarsan bağla eninde sonunda aynı yere gidiyor. Ha 11-12 ye iki farklı cihaz bağlamışsın, ha 11-12, 13-14 de ayrı bağlamışsın.
Neden anlamı kalmasın ki? Adam seçenek sunmuştur. Pinleri ister i2c olarak kullan, ister pwm, ister dijital olarak kullan. Arduinodaki gibi iki pine muhtaç kalma demiştir.
bu dediğinden yola çıkarak öyle dedim senin dediğinden anladığım mesela ı2c 1 hattını aktif ettiysen bütün ı2c1 yazan pinlerden haberleşme çıkıyordur anlamında dedin sandım ben.
Öyle değilmiş hangi ı2c1 pinlerini kullanacağını seçiyorsun
 
Kart örnekleri ile gelen ı2c haberleşmesinde
üstündeki 2 tane ı2c portunu birbiri ile konuşturuyorsun
 
Picoyu kendi kendiyle konuşutrudum ve
SetSCL
SetSDA
komutları ile hangi pinlerden haberleşeceğini seçiyorsun ve sadece seçtiğin pinlerden çıkıyor diğerlerini bağlamıyor
 
Picoyu kendi kendiyle konuşutrudum ve
SetSCL
SetSDA
komutları ile hangi pinlerden haberleşeceğini seçiyorsun ve sadece seçtiğin pinlerden çıkıyor diğerlerini bağlamıyor
Güzel. Arduinoya göre güzel bir alternatif.
 
Picoyu kendi kendiyle konuşutrudum ve
SetSCL
SetSDA
komutları ile hangi pinlerden haberleşeceğini seçiyorsun ve sadece seçtiğin pinlerden çıkıyor diğerlerini bağlamıyor
Şimdi aklıma bir şey takıldı. Ben ekranı bağlarken pinleri set etmedim hiç. Bu durumda diğer pinlere ne oluyor?
 
İki tane boş tuşum var. Ne yapabilirim Sizce?

keypad_fusion.png
 

Çevrimiçi üyeler

Forum istatistikleri

Konular
5,839
Mesajlar
99,582
Üyeler
2,479
Son üye
yiyehuoxing32

Son kaynaklar

Son profil mesajları

gruptaki arkadaşlara selamlar. sıteyi bu gün fark ettim. Asansör için 2x7 segment LCD gösterge üretmek istiyorum. acaba bu sayfadaki arkadaşlardan destek alabilirmiyim. LCD nin mantık açılımı ektedir.
deneyci wrote on TA3UIS's profile.
Selam.
Amatör telsiz lisansı nasıl alınıyor?
Lisansı olmayanı forumlarına almıyorlar. :)
Bilgi alamıyoruz.
cemalettin keçeci wrote on HaydarBaris's profile.
barış kardeşim bende bu sene akıllı denizaltı projesine girdim ve sensörleri arastırıyorum tam olarak hangi sensör ve markaları kullandınız yardımcı olabilir misin?
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
* En mühim ve feyizli vazifelerimiz millî eğitim işleridir. Millî eğitim işlerinde mutlaka muzaffer olmak lâzımdır. Bir milletin hakikî kurtuluşu ancak bu suretle olur. (1922)
Back
Top