מניעת ריטוט של כפתור
חלק מהיחידה קלטים במסלול ה-Arduino של Coddy. שיעור 6 מתוך 22.
הלחצן בשיעור הזה הוא לחצן אמיתי, והקוד ההתחלתי הוא מונה הקליקים שלך מהשיעור הקודם. הרץ אותו ולחץ על הלחצן פעם אחת: המונה קופץ ביותר מאחד.
בתוך לחצן יש שני מגעי מתכת שנוגעים זה בזה. כשהם נפגשים, הם קופצים: במשך כמילישנייה הם נוגעים, נפרדים וחוזרים לגעת. גם שחרור הלחצן גורם לאותו הדבר. loop() קוראת את הפין פעמים רבות במהלך אותה מילישנייה וסופרת כל קפיצה כלחיצה.
הפתרון נקרא מניעת קפיצות: כשהקריאה משתנה, פעל על סמך השינוי פעם אחת, ואז המתן כ־20 ms עד שהמגעים יתייצבו לפני שתקרא שוב. אדם לא יבחין ב־20 ms.
if (reading != lastReading) {
if (reading == LOW) {
presses++;
Serial.println(presses);
}
delay(20);
}
lastReading = reading;המתן אחרי כל שינוי, לא רק אחרי לחיצה: גם השחרור מלווה בקפיצות, וכל קפיצה בדרך למעלה נראית כמו לחיצה חדשה.
אתגר
בינוניתקן את המונה כך שכל לחיצה תיספר פעם אחת:
- כאשר
readingשונה מ־lastReading, ספר אותה אם זו לחיצה (LOW), ואז המתן 20 ms - המשך לשמור את
lastReadingבסוףloop()
לחץ על Run, לחץ על הכפתור כמה פעמים וצפה בספירה, ואז לחץ על Check.
נסו בעצמכם
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;
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה קלטים
1כפתורים
הצגת מצב הכפתורנגד משיכה למטההמשיכה הפנימית למעלההחלפת מצב בכל לחיצהספירת לחיצות על הכפתורמניעת ריטוט של כפתורשני כפתורים בו־זמניתתרגלו בעצמכם: Arduino אונליין