מדידה באמצעות micros()
חלק מהיחידה תזמון ללא Delay במסלול ה-Arduino של Coddy. שיעור 16 מתוך 18.
millis() סופרת אלפיות שנייה שלמות, וזה לא מדויק מספיק לדברים קצרים: לחיצה של 2.5 ms תציג 2 או 3. micros() היא שעון מאותו סוג, אבל היא סופרת מיליוניות השנייה, כלומר מיליונית השנייה: 1000 מהן בכל אלפית שנייה.
ב-Uno היא מתקדמת בקפיצות של 4 מיקרו־שניות, והיא מחזירה גם ערך מסוג unsigned long. כדי למדוד זמן, קראו את הערך לפני ואחרי, וחסרו:
unsigned long start = micros();
int reading = analogRead(A0);
unsigned long took = micros() - start;
Serial.println(took); // בערך 110: פעולת analogRead() נמשכת בערך 0.1 msמכיוון שהיא סופרת כל כך מהר, ל-micros() נגמרים המספרים הרבה יותר מהר מאשר ל-millis(): אחרי כ-70 דקות היא מתחילה שוב מ-0. השתמשו בה למדידת זמנים קצרים, וב-millis() לכל דבר שנמשך יותר מכמה דקות.
אתגר
קלמדוד כמה זמן הכפתור מוחזק, במיקרו־שניות:
- כשהכפתור נלחץ, שמור את
micros()בתוךpressedAt - כשהוא משתחרר, הדפס את
micros() - pressedAt
לחץ על Run, הקש על הכפתור, ואז לחץ על Check.
נסו בעצמכם
const int buttonPin = 2;
bool wasPressed = false;
unsigned long pressedAt = 0;
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
bool pressed = digitalRead(buttonPin) == LOW;
if (pressed && !wasPressed) {
// הכפתור נלחץ הרגע: שמרו את זמן הלחיצה
}
if (!pressed && wasPressed) {
// הכפתור שוחרר הרגע: הדפיסו כמה זמן הוא היה לחוץ, במיקרו־שניות
}
wasPressed = pressed;
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תזמון ללא Delay
תרגלו בעצמכם: Arduino אונליין