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

ساعة إيقاف بزر

جزء من قسم التوقيت دون delay في رحلة Arduino على Coddy. الدرس 18 من 18.

لساعة الإيقاف حالتان: التشغيل والإيقاف، والضغط ينقلها من إحداهما إلى الأخرى. وهي تقيس الوقت بالطريقة الآمنة: خزّن millis() عند البدء، واطرحه عند الانتهاء.

if (!running) {
  running = true;
  startTime = millis();
} else {
  running = false;
  Serial.println(millis() - startTime);
}

تُزال ارتدادات الزر كما في زر الوضع: تصرّف عند تغيّر القراءة، ثم انتظر 20 ms. ينتظر كلا الضغطين المدة نفسها، وهي 20 ms، لذا يبقى الوقت بينهما صحيحًا.

يُظهر LED الحالة: يكون مضاءً أثناء تشغيل ساعة الإيقاف.

challenge icon

التحدي

متوسط

الزر تتم قراءته وإزالة الارتداد منه بالفعل، وتُشغَّل onPress() مرة واحدة لكل ضغطة. اكتب onPress():

  • إذا لم تكن ساعة الإيقاف قيد التشغيل: شغّلها، وخزّن millis() في startTime وأضئ LED
  • إذا كانت قيد التشغيل: أوقفها، وأطفئ LED واطبع الوقت بالمللي ثانية

اضغط Run، ثم اضغط الزر مرتين، ثم Check.

جرّب بنفسك

const int ledPin = 13;
const int buttonPin = 2;

bool wasPressed = false;
bool running = false;
unsigned long startTime = 0;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT_PULLUP);
  Serial.begin(9600);
}

// تُستدعى مرة واحدة عند كل ضغطة.
void onPress() {
  // غير مشغّل: ابدأ، واحفظ الوقت، وأضئ LED
  // مشغّل: توقّف، وأطفئ LED، واطبع الوقت بوحدة ms
}

void loop() {
  bool pressed = digitalRead(buttonPin) == LOW;
  if (pressed != wasPressed) {
    if (pressed) {
      onPress();
    }
    wasPressed = pressed;
    delay(20);   // دع نقاط التلامس تستقر
  }
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس التوقيت دون delay

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