Menu
CoddyTech
flag Ar iconالعربيةdown icon

القياس باستخدام 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

تدرّب بنفسك: Playground لـ Arduino