attachInterrupt Fonksiyonu Nedir?

Arduino’da attachInterrupt() fonksiyonu, belirli bir donanım kesmesi (interrupt) meydana geldiğinde, önceden tanımlanmış bir fonksiyonun otomatik olarak çalışmasını sağlar. Bu sayede, programın ana döngüsünü (loop) beklemeden, belirli olaylar anında yakalanabilir ve işlem yapılabilir.

attachInterrupt(KesmePinNumarası, KesmeFonksiyonu, MOD);


KesmePinNumarası: Kullanacagımız kesme pininin numarasını belirten bir değerdir. Bu değer Arduino’ya bağlı olarak değişebilir. Arduıno Uno modelinde ise bu değer INT0 ve INT1’dir. INT0 Digital Pin 2, INT1 Digital Pin 3 olarak kullanılır.

Arduino ModeliKesme Pin SayısıKesme Pinleri
Arduino Uno2 adetPin 2, Pin 3
Arduino Nano2 adetPin 2, Pin 3
Arduino Mega6 adetPin 2, 3, 18, 19, 20, 21
Arduino Leonardo5 adetPin 0, 1, 2, 3, 7
void setup() {
attachInterrupt(0, KesmeFonksiyonu, MOD);     
/* Pin olarak INT0 yani Digital Pin 2'yi kullandık. */
}
attachInterrupt - INT0, INT1 attachInterrupt - INT0, INT1

KesmeFonksiyonu parametresi, kesme fonksiyonunun adını belirten bir değerdir. İstediğimiz ismi verebiliriz (örnek: Ömer, Kesme, Kocaeli).

attachInterrupt(0, kesme, MOD); (KesmeFonksiyonu olarak kesme yazdık.)

void kesme() {
  /* Interrupt burada gerçekleşecek */
}

MOD parametresi, kesme modunu belirten bir değerdir. 4 farklı mod vardır:

  • CHANGE: Pinin sinyal seviyesi değiştiğinde (LOW → HIGH veya HIGH → LOW) kesme oluşur
  • RISING: Yükselen Kenar
  • FALLING: Düşen Kenar
  • LOW: Pin LOW seviyesinde olduğu sürece

attachInterrupt(0, kesme, FALLING); (MOD olarak FALLING yazdık - Düşen kenar)

Örnek Kullanım

/* Bu örnekte INT0 Kesme pinimiz ile Led'i Yakıcağız,
INT1 Kesme pinimiz ile Led'i Söndüreceğiz. */
void setup() 
{
  attachInterrupt(0, led_yak, FALLING); 
  attachInterrupt(1, led_sondur, FALLING);
  pinMode(2, INPUT_PULLUP);
  pinMode(3, INPUT_PULLUP);
  pinMode(13, OUTPUT);
  Serial.begin(9600);
}
 
void loop() 
{
  // Ana döngü boş
}
 
void led_yak() 
{
  digitalWrite(13, 1);
  Serial.print("Led Yandı!\n");
}
 
void led_sondur() 
{
  digitalWrite(13, 0);
  Serial.print("Led Söndü!\n");
}

attachInterrupt Bağlantı Şeması


İlgili Konular: