הבהוב תוך כדי החלפת מצב באמצעות כפתור
חלק מהיחידה תזמון ללא Delay במסלול ה-Arduino של Coddy. שיעור 5 מתוך 18.
סקץ' שלעולם לא ממתין יכול לעקוב אחר לחצן ולהפעיל הבהוב בו-זמנית. כל לולאה אורכת כמה מיקרו-שניות, כך שהלוח בודק את הלחצן אלפי פעמים בשנייה ומזהה אפילו לחיצה קצרה מאוד.
ההבהוב משתמש בתבנית millis(). הלחצן משתמש בבדיקת הקצה מיחידת הקלט: פעל כאשר הלחצן לחוץ עכשיו ולא היה לחוץ בלולאה הקודמת. ! פירושו "לא", לכן !wasPressed נקרא "לא היה לחוץ".
bool wasPressed = false;
void loop() {
// ההבהוב: if (now - previous >= 500) { ... }
bool pressed = digitalRead(buttonPin) == LOW;
if (pressed && !wasPressed) {
// הכפתור נלחץ כעת
}
wasPressed = pressed;
}הכניסו את שני החלקים ל-loop(), אחד אחרי השני, והשאירו את delay() מחוץ לשניהם. אם ההבהוב היה ממתין 500 ms, לחיצה שמתחילה ומסתיימת במהלך ההמתנה לא הייתה מזוהה לעולם.
אתגר
בינוניגרמו ללוח לבצע שני דברים בו־זמנית:
- נורית ה־LED האדומה בפין 13 מתחלפת כל 500 ms, בתזמון באמצעות
millis() - כל לחיצה על הכפתור מחליפה את מצב נורית ה־LED הצהובה בפין 12: דולקת, ואז כבויה, ואז דולקת
לחיצה קצרה צריכה לעבוד בכל רגע, והחזקה של הכפתור מחליפה את מצב נורית ה־LED הצהובה פעם אחת בלבד. לחצו על Run, הקישו על הכפתור ואז לחצו על Check.
נסו בעצמכם
const int redLed = 13;
const int yellowLed = 12;
const int buttonPin = 2;
void setup() {
pinMode(redLed, OUTPUT);
pinMode(yellowLed, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
}
void loop() {
// 1. החלף את מצב נורית ה-LED האדומה כל 500 ms, באמצעות millis()
// 2. כל לחיצה על הכפתור מדליקה או מכבה את נורית ה-LED הצהובה
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תזמון ללא Delay
1millis()
שעון millis()זמנים מסוג unsigned longהבהוב ללא השהיהשתי נוריות LED, שתי מהירויותהבהוב תוך כדי החלפת מצב באמצעות כפתורנורית עם טיימרתרגלו בעצמכם: Arduino אונליין