לזכור את המצב
חלק מהיחידה תזמון ללא Delay במסלול ה-Arduino של Coddy. שיעור 7 מתוך 18.
לחיצה על כפתור נמשכת שבריר שנייה, אבל מה שהיא מתחילה יכול להימשך הרבה יותר. כדי להמשיך אחרי שמשחררים את הכפתור, הסקץ׳ צריך לזכור מה הוא עושה. משתנה לשם כך נקרא מצב או אופן פעולה:
int mode = 0; // 0 = כבוי, 1 = מהבהבחלקו את loop() לשניים. ראשית, הקלטים משנים רק את המצב. לאחר מכן, שאר הלולאה עושה את מה שהמצב אומר:
// 1. הקלטים משנים את המצב
if (digitalRead(blinkButton) == LOW) {
mode = 1;
}
// 2. המצב קובע מה יקרה
if (mode == 1) {
// הבהב באמצעות millis()
} else {
digitalWrite(ledPin, LOW);
}כל מספר מייצג דבר אחד שהסקץ׳ יכול לעשות. כתבו בהערה מה המשמעות של כל מספר. לסקץ׳ יכולים להיות כמה מצבים שהוא צריך: 0, 1, 2, 3 ועוד.
אתגר
קלהכפתור הירוק מחובר לפין 2 והאדום לפין 3.
- הירוק מגדיר את
modeל־1, והאדום מגדיר אותו ל־0 - כאשר
modeהוא 1, הנורית בפין 13 מהבהבת באמצעותmillis(), דולקת למשך 500 ms וכבויה למשך 500 ms - כאשר
modeהוא 0, הנורית כבויה
לחצו על Run, לחצו על הכפתור הירוק, שחררו אותו ואז לחצו על הכפתור האדום. לאחר מכן לחצו על Check.
נסו בעצמכם
const int ledPin = 13;
const int blinkButton = 2; // ירוק
const int offButton = 3; // אדום
int mode = 0; // 0 = כבוי, 1 = מהבהב
unsigned long previousMillis = 0;
int ledState = LOW;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(blinkButton, INPUT_PULLUP);
pinMode(offButton, INPUT_PULLUP);
}
void loop() {
// 1. הכפתורים רק משנים את המצב
// 2. לאחר מכן פועלים לפי המצב
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תזמון ללא Delay
תרגלו בעצמכם: Arduino אונליין