İkinci Uygulama: Bir buton ve 3 LED bulunan bir devre hazırlayın. Butona her basışımızda sıradaki LED yanacak, önceki LED sönecektir. Butona bastığımız sürece olay bu şekilde devam edecektir.
1. basışta 1. LED yanacaktır
2. basışta 1. LED sönecek 2. LED yanacaktır
3. basışta 2. LED sönecek 3. LED yanacaktır.
4. basışta 3. LED sönecek ve a) maddesine dönülecektir.
İyi akşamlar arkadaşlar.Arduino ile bu uygulamayı yapmaya çalışıyorum.Yazdığım kodlar çalışmadı hatamı bana söyleyebilecek var mı?
Butona basıldığı zamanlar kontak sıçraması denen olay nedeniyle butona 1 kere basmanıza rağmen butona birden fazla basılmış gibi olur. kodunuz doğru olsa bile çalışmayacaktır.
Şurada buton tık sayacı diye bir anlatım var. Kodları inceleyip kendinize göre düzenlerseniz sonuca ulaşabilirsiniz.
Tam olarak neyi çalışmadı eğer ledler kararsız yanıyorsa her if koşulunun sonuna delay(500) ekle ki elini butondan çekene kadar sana biraz süre versin. Eğer söz dizimi hatası alıyorsan loop döngüsünü kapatmamışsın. Kodları resim olarak değil de doğrudan kod seçeneğiyle paylaşırsan derlemeyi deneyebiliriz yoksa kimse yeniden yazmak için uğraşmaz.
Butonu 2 veya 3. Pine baglayip INPUT_PULLUP olarak pin mode verin. Butonun diger bacagini gnd hattina baglayin. İnterupt servis rutini yazin. Tabii ki pull up oldugu ve diger bacak gnd ye bagli oldugu icin falling edge uzerine yazmalisiniz. Boylece her buton basisini 1 ve yalniz 1 kere algilayacaktir. Rising edge uzerine yazarsaniz butondan elinizi cektiginizde durum degisimi olur.
Bir diger nokta herhangi bir integer degisken tanimlayip bunu kalanli bolmeden kalan (mod) olarak switch case yapisindaki bir fonksiyona gonderin.
Bazı kodlar kağıt üstünde çalışır gibi görünse de uygulamada çalışmazlar. Arkadaşların da dediği gibi buton olayında basma ve bırakma anında debouce denen parazitler, sıçramalar oluşur. Bu da butonun basışının sağlıklı tespitini engeller. Çözüm olarak pull-up veya pull-down dirençlerle buton boşta kaldığı anlarda ground (GND, LOW, eksiye) ya da artıya (HIGH) çekilir. Böylece parazit yapması bir nebze önlenerek basma anları biraz daha netleşir. Bu da yetmez, loop bloğunun hızından dolayı butona basılmasıyla bir çok kez basılmış gibi bir sonuç elde edersiniz. O sebeple bu sorunu da delay() ile bekleme koyarak bir nebze engelleyebilirsiniz. Sağlıklı bir buton olayında bu da yetmeyecektir. Çünkü elinizi basılı tutarsanız yine birden fazla basmışsınız gibi davranacaktır. O sebeple basma anını kesin tespit için butonun önceki halinin LOW olmasına ve şimdiki halinin HIGH olmasını karşılaştırmanız gerekir. Aşağıdaki tinkercad örneğine bakabilirsiniz. Sadece butonun basma anının tespit kısmını eklemeniz yeterli olacaktır.
Tam olarak neyi çalışmadı eğer ledler kararsız yanıyorsa her if koşulunun sonuna delay(500) ekle ki elini butondan çekene kadar sana biraz süre versin. Eğer söz dizimi hatası alıyorsan loop döngüsünü kapatmamışsın. Kodları resim olarak değil de doğrudan kod seçeneğiyle paylaşırsan derlemeyi deneyebiliriz yoksa kimse yeniden yazmak için uğraşmaz.
sürekli ilk led yandı butona bastığımda üçü birden. Dediğiniz delay ekleyince oldu.Yalnız delay düüşük olursa da sorun oluyor yüksek bir değer olunca da beklemk gerekiyor arka arkaya basınca olmuyor..
sürekli ilk led yandı butona bastığımda üçü birden. Dediğiniz delay ekleyince oldu.Yalnız delay düüşük olursa da sorun oluyor yüksek bir değer olunca da beklemk gerekiyor arka arkaya basınca olmuyor..