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

الأوقات بصيغة unsigned long

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

لا يمكن للمتغير أن يحتوي إلا على أعداد تصل إلى حدٍّ معين، يحدده نوعه. في لوحة Uno، يتراوح int من -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

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