Ceyhun TOPÇUOĞLU Kişisel Web Sitesi

Arduino Basit Buton Kontrolü (JC Button)

Arduino pratik çözümleri ile prototipleme aşamasında şüphesiz ilk başvurduğumuz platformalardan bir tanesi. Hal böyle iken hemen bir projeye girişmek istiyoruz fakat amiyane tabir ile bazı amelelikleri yerine getirmek durumundayız. Buton tanımlaması ve buton okuması da bunlardan bir tanesi. Örneğin butona basıldığı anda mı, basılı tutulduğunda mı, basılıp bırakıldığında mı işlem yapacaksınız ve bu kontrolü yazmak için bazı değişkenler tanımlamanız gerekecek. Sizlerle paylaşacağım kütüphane bu tanımlama ve metotları kendisi hallederek size kolay bir kullanım sağlıyor. Kütüphanenin adı JC_Button. Kütüphaneye github da ki bu linkden ulaşabilirsiniz. Aşağıda da direk indirebileceğiniz ayrı bir link mevcut.

Kütüphane butonları okuyarak ilgili metodu true veya false olarak döndürerek bize çıktı sağlıyor. Kütüphaneyi kullanabilmemiz için önce projemize dahil etmemiz gerekmetedir.

#include <JC_Button.h>

Ardından bir nesne tanımlaması yapmamız gerekmekte. myBtn adından bir buton tanımlaması yapmış olduk.

Button myBtn(pin, dbTime, puEnable, invert);

pin : kullanacağımız butonun numarası. Örneğin (0-13, A0-A5)

dbTime : algılama yapılması için gereken süre. Butona basma veya bırakma sırasında kaynaklanan mekanik ekstra temas-temassızlıkları önlemek için kullanılabilir.

puEnable : butonumuzda pull-up veya pull-down dirençleri kullandıysak bu değeri false olarak tanımlamaız gerekmekte. Varsayılan değer olarak değeri true tanımlıdır. Yani InputPullup şeklinde tanımlama ve okuma kontrolü sağlanacaktır.

invert : buton durumunu tersleyerek okumaya yarar. basıldığında 0 basılmadığında 1 olarak okumak isterseniz bu değer false olarak tanımlanmalıdır. Varsayılan değeri true olup basıldığında 1 basılmadığında 0 değerini kabul edecek şekildedir.

Kullanabilmemiz için Buton nesnesini başlatmamız gerekmektedir. Void setup içerisinde kullanabilirsiniz.

myBtn.begin();

Artık butonumuz okumaya hazır. Her kontrol işleminden önce önce butonu okumamız gerekmekte.

myBtn.read();

Örnek olarak hazırladığım kod ile hangi metot ne zaman uyanıyor bunu serial ekranda görebilirsiniz. Kod şu şekilde ;

isPressed : Basılı mı? sorgusunu yapabileceğiniz metot. digitalRead(pin); ile arasından hiçbir fark yoktur.

wasPressed : Butona basıldığı anda sadece bir kere true değerini döndürür hemen diğer seviyeye döner. Bırakılıp tekrar basılana kadarda aynı seviyede kalır kalmaktadır.

pressedFor : Bu metodun true döndürmesi için tanımlanan süre kadar vakit geçmesi gerekir. Uzun basma modunda kullanılabilir. Yani butona basıldıktan 1 saniye sonra algılama yapılmasını istiyorsanız myBtn.pressedFor(1000) metodunu kullanabillirsiniz.

pressedFor : Bu metot ise basılmadığında tanımlanan süre sonunda değer döndürür. Yani butona 1.2 saniye basılmadığını algılamanız gerekirse myBtn.releasedFor(1200)  metodunu kullanabilirsiniz.

lastChange : Butonun durumu değiştiği anda bu değer millis()’e eşitlenir. Yani butonun en son durumunun ne zaman değiştiğini myBtn.lastChange() bu metot ile kontrol edebilirsiniz. Örneğin bir butona x saniyeden sonra basıldı ise şunları yap kontrolünü bu metodu kullanarak bir önceki değerinden çıkararak yapabilirsiniz.

JC Buton sinyal diyagram

Resimde butona basıldığında ve basıldıktan sonra gerçekleşen durumları gösteren bir diyagram oluşturdum. Görüldüğü gibi isPressed buton ile aynı zamanda yükselip aynı zamanda düşüyor. wasPressed ise butonun lojik seviyesi yükseldiğinde sadece kısa bir darbe ile lojik 1 seviyesine çıkıyor, ardından yine yine düşüyor. pressedFor ise buton lojik 1 seviyesinde 1000 ms kaldığında lojik 1 seviyesine yükseliyor, butonla birlikte o da düşüyor. releasedFor ise butonun düşük seviyede 1200 ms kalmasının ardında yükseliyor, buton lojik 1 seviyesine ulaşıncaya kadar durumunu koruyor.

downloadKütüphane ve Örnek Program

Admin Hakkında
Kocaeli Üniversitesinde Mekatronik Mühendisliği hazırlık sınıfı öğrencisiyim. Nefes Doğa ve Kamp Grubu yöneticisi. #Camping #Vb.net #SolidWorks #PHP #SQL #ComputerSecurity... Ayrıntılı bilgi için tıklayın


Bir Yorum Yazın

Doğrulama Kodu : (Verilen işlemde boş bırakılan yeri doldurun) * Time limit is exhausted. Please reload CAPTCHA.