Menu
CoddyTech

מניעת ריטוט של כפתור

חלק מהיחידה קלטים במסלול ה-Arduino של Coddy. שיעור 6 מתוך 22.

הלחצן בשיעור הזה הוא לחצן אמיתי, והקוד ההתחלתי הוא מונה הקליקים שלך מהשיעור הקודם. הרץ אותו ולחץ על הלחצן פעם אחת: המונה קופץ ביותר מאחד.

בתוך לחצן יש שני מגעי מתכת שנוגעים זה בזה. כשהם נפגשים, הם קופצים: במשך כמילישנייה הם נוגעים, נפרדים וחוזרים לגעת. גם שחרור הלחצן גורם לאותו הדבר. loop() קוראת את הפין פעמים רבות במהלך אותה מילישנייה וסופרת כל קפיצה כלחיצה.

הפתרון נקרא מניעת קפיצות: כשהקריאה משתנה, פעל על סמך השינוי פעם אחת, ואז המתן כ־20 ms עד שהמגעים יתייצבו לפני שתקרא שוב. אדם לא יבחין ב־20 ms.

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

המתן אחרי כל שינוי, לא רק אחרי לחיצה: גם השחרור מלווה בקפיצות, וכל קפיצה בדרך למעלה נראית כמו לחיצה חדשה.

challenge icon

אתגר

בינוני

תקן את המונה כך שכל לחיצה תיספר פעם אחת:

  • כאשר 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;
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה קלטים

תרגלו בעצמכם: Arduino אונליין