Posted by : MC 3 Kasım 2015 Salı

Merhabalar,
Adım adım arduino köşemizde 2. projemizde bir önceki projemize buton ekleyerek,interrupt yani kesiciler kavramından bahsedeceğiz.


Bir önceki öğreniğimizden farklı olarak bu projemizde 2 nolu pinimizi dijital giriş olarak tanımlayarak bu pine buton bağlayacağız.

Butonumuza bastığımız anda 2 nolu pinimize R6 direnci üzerinden bir voltaj gelecek ve programımız içerisinde interrupt yani kesicimiz aktif hale gelerek ledlerin kontrolünü sağlayacağız.

Yukarıdaki şemayı dikkatli incelerseniz butonun açık olan ucunun 5V diğer ucununda R6 direnci üzerinden 2 nolu pine bağlandığını göreceksiniz.Bu durumda butona bastığımız anca 2 nolu dijital pin üzerinde bir voltaj oluşacak ve bizde butonun konumunu program içerisinde kontrol edebilir hale geleceğiz.Burada R6 direncini kullanmamızdaki amaç 2 nolu pinimizi yüksek gerilimden ve açırı akım çekiminden korumak.Önceki projemizde olduğu gibi her bir ledimizin önüne birer direnç koyarak fazla akım çekiminin önüne geçmeyi amaçlamıştık.

Gelelim interrupt yapısı nedir bu interrupt?

Bir örnek ile açıklamaya çalışalım.Evimizdeki kapı zili mesela.Bizim kapıyı açma eylemimizi programlarımızda kullandığımız bir fonksiyon olarak kabul edelim.Kapı zilinin çalma durumunu da bizim programımızdaki butonun basılma durumu olarak ele alalım.Biz günlük hayatımızda asla kapıda biri var mıdır? diyerek kapıyı sürekli kontrol etmeyiz.Onun yerine kapı zili bizi kapıda birinin olduğu konusunda bizi uyarır ve bizde bu durumu anlayarak o anda ne yapıyorsak (Tv izleme , yemek yeme , uzanma vb.) mevcut işimizi yarıda kesip kapı açma fonksiyonunu yerine getiriyor ve sonrasında yarıda kalan eylemimize devam ediyoruz.

Programlarda da interrupt bu durumu özetler.Herhangi bir koşulda tetiklendiği anda program anlık olarak olduğu yerde durur, interrupt devreye girer yapması gerekeni yapar ve sonrasında program olağan akışına devam eder.

Peki arduinoda nasıl işler interrupt?

Arduino Ide bu konuda bize attachInterrpt() yani programa interrupt bağlama fonksiyonu ile yardımcı oluyor.
Program kodlarımızı açıkladıktan sonra interrupt konusuna yazımızın sonuna doğru biraz daha değineceğiz.

Bizde bu projemizde interrupt ile buton kontrolünü sağlayarak,interrupta bağlayacağımız fonksiyonu yerine getirip ledlerimiz kontrol edeceğiz.


Yukarıdaki resimde bir önceki projemize ek olarak 2 nolu pine butonun bağlanmış halini görmektesiniz.

Gelelim arduino kodlarımıza :

volatile int buton_durum=LOW;
int ledler[]={8,9,10,11,12};// ledlerimizin bağlı olduğu pinleri bir dizi şeklinde tanımladık
int sayac=0;//programda ledlerimizi sırası ile yakacağız ve bu sayaç bize yardımcı olacak
int zamanlama=75;// ledlerimizin belirli bir zaman için yanıp sönmesini istiyoruz
int duraksama=500;

void setup()// arduinonun başlangıç değerleri ve pin durumlarının tanımladığı standart fonksiyon
{
     for (sayac=0;sayac<5;sayac++)// ledimizin bağlı olduğu herbir pini output olarak tanımlıyoruz
    {
            pinMode(ledler[sayac],OUTPUT);
    }
    attachInterrupt(0,led_yak,RISING);// led_sondur fonksiyonu ile interrupt bağlıyoruz
}

void loop()
{
  if(buton_durum)
  {
     for(sayac=0;sayac<5;sayac++)
     {
          digitalWrite(ledler[sayac],HIGH);// ilgili led yakıldı
          delay(zamanlama);
     }
     delay(duraksama);
     for(sayac=0;sayac<5;sayac++)
     {
          digitalWrite(ledler[sayac],LOW);// ilgili led söndürüldü
          delay(zamanlama);
     }
     delay(duraksama);
  }
}

void led_yak()
{
      led_durum=!led_durum;
}

Burada dikkat etmemiz gereken husus 2 nolu pine dair bir işlem yapmadık.Peki arduino nasıl anlayacak 2 nolu pinde buton olduğunu?

attachInterrupt(0,led_yak,RISING); 

bu fonksiyona dikkat ettiğimizde arduinonun 2 nolu pinine 0 numaralı interrupt tanımlanmıştır ve biz fonksiyonumuzu yazmamızla birlikte 2 nolu pini interrupt olarak kullanacağımızı belirtmiş oluyoruz.

Yine bu fonksiyon içerisinde led_yak fonksiyon adını vererek, interrupt tetiklendiğinde bu fonksiyonun çağrılması gerektiğini söylüyoruz.

Son kısım ise RISING. Burada ise voltajın yükselmeye başladığı anda tetikleme olasını istediğimizi belirtmiş oluyoruz.Bunu FALLING olarak tanımlayarak voltajın düşme anında tetikleme yapmasını da sağlayabilirsiniz.

Programı çalıştırdığınızda ledler butona basmadığınız anda yanmayacaktır.Butona bastığınız anda ise interrupt tetiklenecek ve sonrasında led_yak fonksiyonu görevini yerine getirerek ledlerin sırası ile yanmasını sağlayacaktır.

Bir sonraki yazımıda arduino ile analog okuma ve çıkış işlemleri nasıl yapılıyor bunlardan bahsedeceğiz.

{ 2 Comments... read them below or Comment }

  1. Bu yorum yazar tarafından silindi.

    YanıtlaSil
  2. led_durum =!led_durum;

    en son kod sırasında hata veriyor ilginiz için şimdiden teşekkürler.

    YanıtlaSil

ELEKTRO BLOGGER A HOŞGELDINIZ

ARAMA YAP

EN COK OKUNANLAR

- Copyright © ELEKTRO-BLOGGER Blogger