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
{
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.
}
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ştirilecekler} dö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.
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);
}
ş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.
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...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);
}
}
COMMENTS