Menu
CoddyTech

FALLING, RISING ve CHANGE

Coddy'nin Arduino Journey'sinin delay() Kullanmadan Zamanlama bölümünün bir parçası. Ders 13 / 18.

Uno'da kesmeyi tetikleyebilen iki pin vardır: pin 2 ve pin 3. Kesme gerektiren bir düğme bunlardan birine bağlanmalıdır. Çipin içinde bunlar kesme 0 ve kesme 1'dir; bu nedenle pini numarasına dönüştürmek için digitalPinToInterrupt() kullanın. attachInterrupt(3, ...) kesme 3'ü ister; Uno'da böyle bir kesme yoktur ve hiçbir şey olmaz.

attachInterrupt() işlevinin son kısmı, hangi değişikliğe tepki verileceğini belirtir:

  • FALLING: pin HIGH değerinden LOW değerine geçer (pull-up kullanıldığında, basma)
  • RISING: pin LOW değerinden HIGH değerine geçer (bırakma)
  • CHANGE: ikisinden biri

CHANGE ile ISR hem basıldığında hem de bırakıldığında çalışır. Hangisinin gerçekleştiğini öğrenmek için pini okur:

void onChange() {
  if (digitalRead(buttonPin) == LOW) {
    // butona basıldı
  } else {
    // buton bırakıldı
  }
}

attachInterrupt(digitalPinToInterrupt(buttonPin), onChange, CHANGE);
challenge icon

Görev

Kolay

Buton 3 numaralı pine bağlı ve loop() yavaş bir işle meşgul. 13 numaralı pindeki LED'in butonu anında takip etmesini sağla:

  • onChange() içinde butonu oku: LOW LED'i yakar, HIGH söndürür
  • onChange() işlevini CHANGE ile buton pinine bağla

Run'a bas, butonu basılı tutup bırak, ardından Check'e bas.

Kendin dene

const int ledPin = 13;
const int buttonPin = 3;

// Düğme pininin durumu her değiştiğinde çalışır.
void onChange() {
  // Düğmeye basıldığında LED'i yak, bırakıldığında söndür
}

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT_PULLUP);
  Serial.begin(9600);
  // onChange() işlevini burada düğme pinine bağla
}

void loop() {
  // yavaş işlem: olduğu gibi bırak
  Serial.println("working");
  delay(2000);
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

delay() Kullanmadan Zamanlama bölümündeki tüm dersler

Kendi başına pratik yap: Arduino playground