זמנים מסוג unsigned long
חלק מהיחידה תזמון ללא Delay במסלול ה-Arduino של Coddy. שיעור 2 מתוך 18.
משתנה יכול להכיל מספרים רק עד לגודל מסוים, שנקבע לפי הטיפוס שלו. int ב-Uno יכול להכיל ערכים מ-32768- עד 32767. אחרי 32.8 שניות, הערך של millis() גדול מזה, ו-int שמנסה להכיל אותו חוזר למספר שלילי.
לטיפוס unsigned אין מספרים שליליים, ולכן הוא מגיע פי שניים יותר גבוה: unsigned int מכיל ערכים מ-0 עד 65535, שהם בערך 65 שניות באלפיות שנייה. ועדיין, זה לא מספיק.
unsigned long מכיל ערכים מ-0 עד 4,294,967,295. באלפיות שנייה מדובר ביותר מ-49 ימים, וזהו הטיפוס שהפונקציה millis() עצמה מחזירה. יש לאחסן כל זמן במשתנה כזה:
unsigned long now = millis();
unsigned long startTime = 0;סקץ' עם טיפוס שגוי עובד במשך חצי דקה ואז משתבש, ולכן קל לפספס את הבאג.
אתגר
קלהסקיצה הזו מדפיסה את הזמן פעם בשנייה, אבל אחרי 32 שניות היא מדפיסה מספרים שליליים. שנה את הטיפוס של now כדי שהזמן יישאר נכון במשך ימים.
לחץ על Run והמתן יותר מ־33 שניות כדי לראות את הבאג, ואז תקן אותו ולחץ על Check.
נסו בעצמכם
void setup() {
Serial.begin(9600);
}
void loop() {
int now = millis(); // הטיפוס הזה קטן מדי בשביל ערך הזמן: יש לשנות אותו
Serial.println(now);
delay(1000);
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תזמון ללא Delay
1millis()
שעון millis()זמנים מסוג unsigned longהבהוב ללא השהיהשתי נוריות LED, שתי מהירויותהבהוב תוך כדי החלפת מצב באמצעות כפתורנורית עם טיימרתרגלו בעצמכם: Arduino אונליין