נורית עם טיימר
חלק מהיחידה תזמון ללא Delay במסלול ה-Arduino של Coddy. שיעור 6 מתוך 18.
תאורת חדר מדרגות נדלקת כשלוחצים על הכפתור שלה, וכעבור זמן קצר נכבית מעצמה. לוחצים שוב כשהיא דולקת, והזמן מתחיל מחדש.
לשם כך צריך שני דברים: את מועד הלחיצה האחרונה, והאם האור דולק. שומרים את המועד במשתנה מסוג unsigned long כשהכפתור לחוץ:
if (digitalRead(buttonPin) == LOW) {
pressedAt = millis(); // התחל (או התחל מחדש) את מדידת הזמן
lightOn = true;
digitalWrite(ledPin, HIGH);
}לאחר מכן, בכל לולאה, בודקים כמה זמן עבר:
if (lightOn && millis() - pressedAt >= onTime) {
lightOn = false;
digitalWrite(ledPin, LOW);
}שני החלקים אף פעם לא ממתינים, ולכן הלחיצה מזוהה בכל רגע, גם כשהאור כבר דולק. אם מוסיפים delay(2000) אחרי הלחיצה, לחיצה שנייה בזמן ההמתנה תלך לאיבוד.
אתגר
קלבנו תאורת מדרגות:
- לחיצה מדליקה מיד את ה-LED בפין 13
- 2 שניות לאחר הלחיצה, היא נכבית מעצמה
- לחיצה כשהיא דולקת מתחילה מחדש את 2 השניות
לחצו על Run, לחצו על הכפתור כמה פעמים, ואז על Check.
נסו בעצמכם
const int ledPin = 13;
const int buttonPin = 2;
const unsigned long onTime = 2000; // משך הזמן שהנורה נשארת דולקת
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
}
void loop() {
// כשהכפתור לחוץ: הדלק את ה-LED ושמור את הזמן
// כשחלף מאז פרק הזמן onTime: כבה את ה-LED
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תזמון ללא Delay
תרגלו בעצמכם: Arduino אונליין