Buton
Basılınca iki ucunu birleştiren anahtar. Kart, butonun durumunu bir giriş pininden okur.
Nasıl çalışır?
Buton, basılmadığında iki ucu arasında bağlantı olmayan, basılınca iki ucu birleştiren (kısa devre yapan) bir anahtardır. Kendi başına bir gerilim üretmez; yalnızca bir yolu açar ya da kapatır.
Arduino bir butonu okumak için pini giriş yapar ve butonun bir ucunu o pine, öbür ucunu GND'ye bağlarsın. Sorun şudur: buton basılmamışken pin hiçbir şeye bağlı kalmaz (yüzen giriş) ve rastgele okunur. Çözüm, pini kodda INPUT_PULLUP yapmaktır: kartın içinde pini 5 V'a çeken bir direnç devreye girer.
Sonuç ters mantıktır:
- Basılı değil: pin 5 V'a çekilir,
digitalReadHIGH okur. - Basılı: pin GND'ye bağlanır,
digitalReadLOW okur.
İleri düzey: Gerçek butonların kontakları basarken çok kısa süre titrer (bounce). Bir basış, kodda birkaç kez görünebilir. Bunu önlemeye "debounce" denir (Modül 3, 8. ders).
Laboratuvarda nasıl bağlanır?
| Nereden | Nereye |
|---|---|
| Buton A | Uno D2 |
| Buton B | Uno GND |
Kodda pinMode(2, INPUT_PULLUP); yazarsın. Butona basmak için parçayı seçip özellik panelinden Basılı seçeneğini açarsın ya da parçaya basılı tutarsın; devre çalışırken de değiştirebilirsin. Laboratuvarda basılı butonun direnci çok küçüktür (0,1 Ω), açıkken bağlantı yoktur. İç pull-up direnci modelde yaklaşık 35 kΩ'dur.
Laboratuvar bağlantısız (yüzen) bir giriş için uyarı verir.
Sık yapılan hatalar
- Butonun mantığını ters sanmak.
INPUT_PULLUPile basılı = LOW'dur; "basılınca HIGH" beklersen program ters çalışır. INPUT_PULLUPyazmayı unutmak. Dış direnç yoksa pin yüzer ve okuma rastgele olur.- Butonun ucunu 5 V'a bağlamak.
INPUT_PULLUPkullanırken diğer ucu GND'ye bağlarsın. - Bir basışı birden çok basış saymak. Gerçek butonlarda kontak titreşimi (bounce) buna neden olur.
- GND bağlantısını unutmak. Buton basılsa bile pin LOW'a çekilemez.