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.
Görev
OrtaSayaç, her basışın bir kez sayılmasını sağlayacak şekilde düzeltin:
reading,lastReadingdeğerinden farklı olduğunda, bir basışsa (LOW) sayın, ardından 20 ms bekleyinloop()sonundalastReadingdeğ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;
}
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