שעון עצר עם כפתור
חלק מהיחידה תזמון ללא Delay במסלול ה-Arduino של Coddy. שיעור 18 מתוך 18.
לשעון עצר יש שני מצבים, פועל ועצור, ולחיצה מעבירה אותו ממצב אחד לאחר. הוא מודד זמן בדרך הבטוחה: שומרים את millis() בתחילת המדידה ומחסרים בסופה.
if (!running) {
running = true;
startTime = millis();
} else {
running = false;
Serial.println(millis() - startTime);
}מנטרלים את קפיצות הכפתור כפי שעשינו עבור כפתור המצב: פועלים כשהקריאה משתנה, ואז ממתינים 20 ms. אחרי שתי הלחיצות ממתינים לאותן 20 ms, כך שהזמן ביניהן נשאר מדויק.
ה־LED מציג את המצב: דולק בזמן ששעון העצר פועל.
אתגר
בינוניהכפתור כבר נקרא ומבוצעת מניעת ריצוד, ו־onPress() פועלת פעם אחת בכל לחיצה. כתבו את onPress():
- אם שעון העצר אינו פועל: הפעילו אותו, שמרו את
millis()בתוךstartTimeוהדליקו את LED - אם הוא פועל: עצרו אותו, כבו את LED והדפיסו את הזמן במילישניות
לחצו על Run, לחצו על הכפתור פעמיים, ואז לחצו על Check.
נסו בעצמכם
const int ledPin = 13;
const int buttonPin = 2;
bool wasPressed = false;
bool running = false;
unsigned long startTime = 0;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
Serial.begin(9600);
}
// נקראת פעם אחת בכל לחיצה.
void onPress() {
// לא פועל: להתחיל, לשמור את הזמן, להדליק את ה-LED
// פועל: לעצור, לכבות את ה-LED, להדפיס את הזמן ב-ms
}
void loop() {
bool pressed = digitalRead(buttonPin) == LOW;
if (pressed != wasPressed) {
if (pressed) {
onPress();
}
wasPressed = pressed;
delay(20); // לאפשר למגעים להתייצב
}
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תזמון ללא Delay
תרגלו בעצמכם: Arduino אונליין