Arduino Dış (Harici) Kesmeler

Kesmeler; programlanabilir kontrol cihazlarında belirli görevlerin programdan bağımsız şekilde arka planda kontrol edilip, şartlar sağlandığında program durdurulup belirlenen kesme fonksiyonun çalışmasını sağlamaktır. Kesme fonksiyonunun tamamlanmasının ardından, program kaldığı yerden çalışmaya devam eder.

Arduino UNO kartında 2 adet dış kesme ve 3 adet zamanlayıcı kesmesi olmak üzere 5 adet kesme mevcuttur. Dış kesmeler Arduino UNO kartımızdaki 2 numaralı dijital G/Ç pininde bulunan INT0 ve 3 numaralı dijital G/Ç pininde bulunan INT1 kesmeleridir.

Dış Kesmeler:

Dış kesmeler az önce bahsettiğimiz gibi 2 ve 3 numaralı dijital pinlerde bulunan INT0 ve INT1 kesmeleridir. Dış kesme kullanılırken kesme pini kesinlikle dijital giriş olarak bağlantı yapılmalıdır. Kesmeyi başlatmak için setup() yapımızda kesme fonksiyonunu tanımlamamız gerekmektedir. Kesme fonksiyonu tanımlama işlemi attachInterrupt() fonksiyonu ile yapılır.

Fonksiyon parametreleri ise attachInterrupt(kesme pini,kesme fonksiyonu, kesme tipi); şeklindedir.

Arduino UNO kartımızda kesme pini 2 numaralı INT0 ya da 3 numaralı INT1 pinleri olduğunu söylemiştik. Kesme pini kısmına dijital pin numaraları değil, kesme numaraları olan INT0 kesmesi için “0”, INT1 kesmesi için “1” değeri yazılır. Kesme fonksiyonu kısmına ise kesme anında çalımak üzere yazdığımız fonksiyonun adı yazılır.

Kesme tipi ise 4 adet tetikleme tipinden biridir.

Bu tetikleme tipleri;

  • LOW : Pindeki voltaj 0 ise kesme oluşur.
  • CHANGE : Pinde oluşacak voltaj değişimlerinde kesme gerçekleşir.
  • RISING : Yükselen kenarlarda kesme gerçekleşir. Yani pindeki voltaj değeri 0’dan 5 Volta çıktığında (butona basarken) kesme gerçekleşir.
  • FALLING : Düşen kenarlarda kesme gerçekleşir. Yani pindeki voltaj değeri 5’ten 0’a düştüğünde (butondan elimizi çekerken) kesme gerçekleşir.

 

Örnek olarak INT0 dış kesmemizde butondan elimizi çekerken oluşacak bir kesme için kesme tanımlaması yapalım:

Daha sonra ise kesme fonksiyonumuzla birlikte kesme sırasında ne yapacağımızı yazıyoruz. Örnek olarak her kesme oluştuğunda seri port ekranına INT0 Kesmesi Oluştu yazdıralım.

Yukarıdaki kodları derleyip arduino ya yükledikten sonra, aşağıdaki devremizi kurup çalıştırıyoruz;

Seri Port ekranını açıyoruz. Artık her butona basıp bıraktığımızda seri port ekranına “INT0 Kesmesi Oluştu!” yazacaktır. Loop döngüsü içerisinde diğer kodlarımızı yazabiliriz. Kesme fonksiyonumuz loop döngüsünden bağımsız çalışacağı için kesme pinini kontrol etmeye gerek yoktur.

 

Yorum Yap