Menu
CoddyTech

Düğme Titreşimini Giderme

Coddy'nin Arduino Journey'sinin Girişler bölümünün bir parçası. Ders 6 / 22.

Bu dersteki düğme gerçek bir düğme ve başlangıç kodu önceki dersteki sayacındır. Kodu çalıştır ve düğmeye bir kez bas: sayaç birden fazla artar.

Bir düğmenin içinde iki metal temas noktası birbirine değir. Birbirlerine değdiklerinde zıplarlar: yaklaşık bir milisaniye boyunca birbirlerine çarpar, ayrılır ve yeniden çarparlar. Düğmeyi bırakmak da aynısını yapar. loop(), bu milisaniye boyunca pini birçok kez okur ve her zıplamayı bir basış olarak sayar.

Çözümün adı titreşim giderme: okuma değiştiğinde, bu değişikliği bir kez işle, ardından okumadan önce temas noktalarının kararlı hâle gelmesi için yaklaşık 20 ms bekle. İnsan 20 ms'yi fark etmez.

if (reading != lastReading) {
  if (reading == LOW) {
    presses++;
    Serial.println(presses);
  }
  delay(20);
}
lastReading = reading;

Her değişiklikten sonra bekle, yalnızca basıştan sonra değil: düğmeyi bırakırken de titreşim olur ve bırakma sırasındaki her titreşim yeni bir basış gibi görünür.

challenge icon

Görev

Orta

Sayaç, her basışın bir kez sayılmasını sağlayacak şekilde düzeltin:

  • reading, lastReading değerinden farklı olduğunda, bir basışsa (LOW) sayın, ardından 20 ms bekleyin
  • loop() sonunda lastReading değerini kaydetmeye devam edin

Run'a basın, düğmeye birkaç kez basıp sayımı izleyin, ardından Check'e basın.

Kendin dene

const int buttonPin = 2;

int presses = 0;
int lastReading = HIGH;

void setup() {
  pinMode(buttonPin, INPUT_PULLUP);
  Serial.begin(9600);
}

void loop() {
  int reading = digitalRead(buttonPin);
  if (reading == LOW && lastReading == HIGH) {
    presses++;
    Serial.println(presses);
  }
  lastReading = reading;
}
quiz iconKendini test et

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

Girişler bölümündeki tüm dersler

Kendi başına pratik yap: Arduino playground