Menu
CoddyTech

זמנים מסוג 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;

סקץ' עם טיפוס שגוי עובד במשך חצי דקה ואז משתבש, ולכן קל לפספס את הבאג.

challenge icon

אתגר

קל

הסקיצה הזו מדפיסה את הזמן פעם בשנייה, אבל אחרי 32 שניות היא מדפיסה מספרים שליליים. שנה את הטיפוס של now כדי שהזמן יישאר נכון במשך ימים.

לחץ על Run והמתן יותר מ־33 שניות כדי לראות את הבאג, ואז תקן אותו ולחץ על Check.

נסו בעצמכם

void setup() {
  Serial.begin(9600);
}

void loop() {
  int now = millis();   // הטיפוס הזה קטן מדי בשביל ערך הזמן: יש לשנות אותו
  Serial.println(now);
  delay(1000);
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה תזמון ללא Delay

תרגלו בעצמכם: Arduino אונליין