Arduino Ders 8.1 (RGB led nedir || RGB led nasıl bağlanır || RGB led örnekleri)

Arduino Ders 9: Interrupt-Kesmeler || Dış (Donanımsal Kesme)

Arduino Ders 9: Interrupt-Kesmeler || Dış (Donanımsal Kesme)

1. Giriş

Kesmeler (Interrupt), Arduino projelerinde gerçek zamanlı olayları işlemek için kullanılan önemli bir mekanizmadır. Dış kesmeler, mikrodenetleyicinin bir donanım pininde meydana gelen değişikliklere tepki vermesini sağlar. Bu, bir düğmeye basıldığında veya bir sensör sinyali geldiğinde, ana kodu durdurup belirli bir işlem gerçekleştirmek için kullanılır.

2. Dış Kesme (External Interrupt) Nedir?

Dış kesmeler, Arduino'daki belirli pinlere bağlı olaylara tepki verir. Dış kesme bir olay tetiklendiğinde, programın mevcut akışı durdurulur ve bir kesme fonksiyonu (Interrupt Service Routine, ISR) çalıştırılır.

Desteklenen Arduino Pinleri

  • Arduino UNO: Pin 2 ve Pin 3 dış kesme destekler.
  • Arduino MEGA: Pin 2, 3, 18, 19, 20, 21 dış kesme destekler.
  • Arduino Nano: Pin 2 ve Pin 3 dış kesme destekler.

3. Kesme Tetikleme Türleri

Dış kesmelerin nasıl tetikleneceğini belirlemek için dört farklı mod kullanılır:

  • LOW: Pin LOW seviyesine geçtiğinde kesme tetiklenir.
  • CHANGE: Pin durumunda herhangi bir değişiklik olduğunda (HIGH veya LOW), kesme tetiklenir.
  • RISING: Pin LOW'dan HIGH seviyesine geçtiğinde kesme tetiklenir.
  • FALLING: Pin HIGH'dan LOW seviyesine geçtiğinde kesme tetiklenir.

4. attachInterrupt() Fonksiyonu

Arduino'da dış kesmeler attachInterrupt() fonksiyonu ile ayarlanır. Bu fonksiyonun sözdizimi şu şekildedir:

attachInterrupt(dijitalPinToInterrupt(pin), fonksiyon, mod);
  • dijitalPinToInterrupt(pin): Kesmenin bağlanacağı pin.
  • fonksiyon: Kesme tetiklendiğinde çağrılacak ISR fonksiyonu.
  • mod: Kesme tetikleme modu (LOW, CHANGE, RISING, FALLING).

5. Örnek: Dış Kesme ile LED Kontrolü

Bu örnekte, bir düğmeye basıldığında bir LED'in durumunu değiştiren bir dış kesme uygulanmıştır.

Kod Örneği

#define LED 13
#define BUTTON 2

volatile bool ledDurum = false;

void setup() {
    pinMode(LED, OUTPUT); // LED pini çıkış olarak ayarlanır
    pinMode(BUTTON, INPUT_PULLUP); // Düğme pini giriş olarak ayarlanır

    attachInterrupt(digitalPinToInterrupt(BUTTON), kesmeFonksiyonu, FALLING); // Düşen kenarda kesmeyi ayarla
}

void loop() {
    digitalWrite(LED, ledDurum); // LED durumunu güncelle
}

void kesmeFonksiyonu() {
    ledDurum = !ledDurum; // LED durumunu değiştir
}

Kod Açıklaması

  • LED: 13 numaralı pine bağlı bir LED.
  • BUTTON: 2 numaralı pine bağlı bir düğme.
  • kesmeFonksiyonu: Düğmeye her basıldığında LED'in durumunu değiştirir.

6. Örnek: Sayıcı ile Dış Kesme

Bu örnekte, bir düğmeye her basıldığında bir sayacın değeri artırılır ve seri monitöre yazdırılır.

Kod Örneği

#define BUTTON 2

volatile int sayac = 0;

void setup() {
    Serial.begin(9600); // Seri haberleşmeyi başlat
    pinMode(BUTTON, INPUT_PULLUP); // Düğme pini giriş olarak ayarlanır

    attachInterrupt(digitalPinToInterrupt(BUTTON), kesmeFonksiyonu, FALLING); // Düşen kenarda kesmeyi ayarla
}

void loop() {
    Serial.print("Sayac: ");
    Serial.println(sayac);
    delay(500); // Yavaş yazdırma için bekle
}

void kesmeFonksiyonu() {
    sayac++; // Sayacı artır
}

Kod Açıklaması

  • sayac: Kesme her tetiklendiğinde artırılan bir sayaç.
  • kesmeFonksiyonu: Düğmeye her basıldığında sayacı artırır.

7. ISR'nin Önemli Kuralları

Kesme fonksiyonlarında (ISR) şu kurallara dikkat edilmelidir:

  • ISR içinde delay() kullanılamaz.
  • ISR mümkün olduğunca kısa olmalıdır.
  • Global değişkenler kullanılırsa, bu değişkenlere volatile anahtar kelimesi eklenmelidir.
  • ISR içinde seri iletişim (Serial.print()) kullanılmamalıdır, çünkü bu zamanlama sorunlarına neden olabilir.

8. Sonuç

Dış kesmeler, Arduino projelerinde anlık olaylara tepki vermek için son derece kullanışlıdır. Yukarıdaki örnekler, kesmelerin nasıl uygulanacağını ve ISR'nin nasıl yazılacağını göstermektedir. Donanım kesmelerini kullanarak projelerinizde daha hassas ve gerçek zamanlı kontrol sağlayabilirsiniz.

Yorum Gönder

0 Yorumlar