Menu
CoddyTech

מדידה באמצעות 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() לכל דבר שנמשך יותר מכמה דקות.

challenge icon

אתגר

קל

מדוד כמה זמן הכפתור מוחזק, במיקרו־שניות:

  • כשהכפתור נלחץ, שמור את 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;
}
quiz iconבחנו את עצמכם

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

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

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