Arduino Püf Noktası 1: Tek Butonla Led Yakıp Söndürme İncelikleri While Döngüsü Mühürleme

Merhaba arkadaşlar. Sizlere internette genelde anlatılmayan ama sürekli başımıza gelen küçük aksaklıkları kod bilgimizle algoritmalar oluşturarak nasıl sorunları çözebileceğimizi konuşacağız. Özellikle butonlar ve bu butonlara farklı fonksiyonlar verme üzerine pratikler yaparak algoritma becerimizi geliştireceğiz.

Bu yazımda sizlere bir butonu sistemin aç/kapa düğmesi yapabilmeyi anlatacağım. Butona ilk bastığımızda sistemimiz çalışacak, bir daha bastığımızda sönecek. Bu sistem elektronik sistemlerde mühürleme olarak adlandırılmaktadır. Bunu led açıp kapatarak örnekleyeceğiz. Size çok basit görünebilir de fakat yeni başlayanlar için bir sorun olabilmektedir.
Algoritmamız butona basıldığında led açıksa kapat, kapalı ise aç şeklinde olacak. Algoritmanın kodunu yazabilmek için ledin son durumda açık yada kapalı olduğunu görüntülememiz lazım. Çıkış olarak ayarladığımız pinden aynı zamanda okuma yapamayacağımız için değişken kullanmamız gerekecektir. ledDurumu adında bir değişken kullanıp, değişkenimizi ledi açtığımız zaman 1, kapattığımız zaman 0 olacak şekilde programlayabiliriz. Butona basılma ve bırakılma anlarında çok küçük arklar olur ve arduino bunu sinyal olarak algılar. Bunu engellemek için gözle fark edilmeyecek kadar küçük iki delay kodu eklemek yetecektir. Bunun için kodlarımız
if(digitalRead(buton)== HIGH) // Eğer butona basılırsa
{

delay(10);
if(ledDurumu == LOW){digitalWrite(led, HIGH); ledDurumu = 1;}  // led kapalıysa aç ve ledDurumu değişkenini 1 yap.
else if(ledDurumu == HIGH){digitalWrite(led, LOW); ledDurumu = 0;} // led açık ise kapat ve ledDurumu değişkenini 0 yap.

}
şeklinde olacaktır. Programı bu şekilde yüklediğinizde butona basılı tutulan zamana göre değişik derecelerde sapıtacağını fark edeceksiniz. Çünkü program sürekli döngüde olduğu için butona basınca önce led açılır ve ledDurumu 1 yapılır. Butona hala basılı tutulduğunda ana döngüden dolayı en son ledDurumu 1 olduğu için bu sefer arduino ledDurumu 0 yaparak ledi kapatır, sonra tekrar açar, kapatır. Bu işlem gözle görülmeyecek hızda yapılır ve göz tarafından hep açık gibi algılanır. Elimizi çektiğimiz esnada döngüde led durumu en son ne ise son işlem o olur. Bunu engellemek için ana döngüyü buton bırakılana kadar durduracak ikinci bir döngü kullanacağız. while(koşul){gerçekleştirileceklerdöngüsü parantez içindeki şartlar karşılandığı sürece süslü parantezler arasındaki işlemlerin sürekli gerçekleşmesini sağlar. Bu döngüyü buton basılı tutulduğu sürece arduino oyalansın diye kullanacağız. Döngü içine fonksiyonu olmayan herhangi bir şey yazıp arduinoyu oyalayabiliriz. Ben hiç bir işlem yaptırmadan döngüde kalmasını istiyorum. Döngümüzü while(digitalRead(buton)== HIGH){;} kodu ile kuracağım. Son durumda kodumuz,

if(digitalRead(buton)== HIGH) // Eğer butona basılırsa
{

delay(10);
if(ledDurumu == LOW){digitalWrite(led, HIGH); ledDurumu = 1;}  // led kapalıysa aç ve ledDurumu değişkenini 1 yap.
else if(ledDurumu == HIGH){digitalWrite(led, LOW); ledDurumu = 0;} // led açık ise kapat ve ledDurumu değişkenini 0 yap.
while(digitalRead(buton)== HIGH){;} // Butona basılı kaldığı sürece ana döngüye girmemesi için  kendi döngümüzle oyaladık.
delay(10);
}

şeklinde olacaktır.

Led açıp kapatma yerine kontrol etmek istediğiniz şeylerin kodlarını yazarak bir butonu aç/kapa butonu yapabilirsiniz. Eğer ledin sürekli yanıp sönmesi gibi döngü halindeki sistemi yönetmeniz gerekiyorsa bu mühürleme yöntemi işe yaramayacaktır. Çünkü mühürleme yaparken arduino butona basıldığı sürece ana döngüye dönmesin diye başka bir mühürlemeyle oyalıyoruz. Birkaç kod ekleyerek bu sorunun da üstesinden gelebiliriz. ledDurumu değişkeni butona basınca 1, tekrar basınca 0 oluyorsa bunu ana döngüde ayrı bir koşul şeklinde yazarak, sistemi yönetmek için kullanabiliriz. Örnek olarak 100 ms aralıklarla yanıp sönen bir led sistemini kontrol edelim. Eğer 1 olursa led yakıp söndür, 0 olursa söndür şeklinde ana loop programına bir kod yazacağız. Kodumuzun son hali,

void loop(){
if(digitalRead(buton)== HIGH) // Eğer butona basılırsa
{

delay(10);
if(ledDurumu == LOW){ ledDurumu = 1;}  // ledDurumu değişkenini 0 ise 1 yap.
else if(ledDurumu == HIGH){ ledDurumu = 0;} // ledDurumu değişkenini 1 ise 0 yap.
while(digitalRead(buton)== HIGH){;} // Butona basılı kaldığı sürece ana döngüye girmemesi için  kendi döngümüzle oyaladık.
delay(10);
}


if(ledDurumu == 1)  // ledDurumu değişkenini 1 ise ledi sürekli yakıp söndür.
{
digitalWrite(led,HIGH);
delay(100);
digitalWrite(led,LOW);
delay(100);
}

else if(ledDurumu == 0)// ledDurumu değişkenini 0 ise ledi söndür.
{
digitalWrite(led,LOW);
}

}
Yazılarımı beğendiyseniz veya eleştirmek isterseniz iletişim formundan yada yorum olarak geri bildirim verebilirsiniz...

COMMENTS

BLOGGER: 2
Loading...
Ad

Başlangıç Seviye,10,Ders,10,Hakkımda,1,İletişim,1,Orta seviye,3,Proje,1,Püf Nokta,2,
ltr
item
Arduino Dersleri: Arduino Püf Noktası 1: Tek Butonla Led Yakıp Söndürme İncelikleri While Döngüsü Mühürleme
Arduino Püf Noktası 1: Tek Butonla Led Yakıp Söndürme İncelikleri While Döngüsü Mühürleme
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3dToK8gSe0YzUw_IuQ4C50JXLJFHvhx0Vt_rmujd3ClR0gdEo7j9IaTB6mvbXUjm5aKMRZjMwTp4WFbNXuqeXr5RQQAW4zue-X-K7SK61cJqqtS_FJ0S7H8PqaSjpwIbZXaWuxoYaKnZG/s320/PUF1.png
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3dToK8gSe0YzUw_IuQ4C50JXLJFHvhx0Vt_rmujd3ClR0gdEo7j9IaTB6mvbXUjm5aKMRZjMwTp4WFbNXuqeXr5RQQAW4zue-X-K7SK61cJqqtS_FJ0S7H8PqaSjpwIbZXaWuxoYaKnZG/s72-c/PUF1.png
Arduino Dersleri
https://arduinodersi.blogspot.com/2017/03/arduino-puf-nokta-1-tek-butonla-led.html
https://arduinodersi.blogspot.com/
http://arduinodersi.blogspot.com/
http://arduinodersi.blogspot.com/2017/03/arduino-puf-nokta-1-tek-butonla-led.html
true
3083925267398540913
UTF-8
Tüm Yayınlar Yüklendi Başka Yayın Bulunamadı Tüm Yayınları Görüntüle Daha Fazla Oku Yanıtla Yanıtı İptal Et Sil By Ana Sayfa Sayfada Yayında üm Yayınları Görüntüle Sizin İçin Önerilen Etiket Arşiv Site İçinde Ara Tüm Yayınlar Aramanızla İlgili Yazı Bulunamadı Anasayfaya Dön Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sun Mon Tue Wed Thu Fri Sat January February March April May June July August September October November December Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec just now 1 minute ago $$1$$ minutes ago 1 hour ago $$1$$ hours ago Yesterday $$1$$ days ago $$1$$ weeks ago more than 5 weeks ago Takipçiler Bizi Takip Edin THIS CONTENT IS PREMIUM Please share to unlock Copy All Code Select All Code All codes were copied to your clipboard Can not copy the codes / texts, please press [CTRL]+[C] (or CMD+C with Mac) to copy