الأوقات بصيغة 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;يعمل البرنامج الذي يستخدم نوعًا غير مناسب لمدة نصف دقيقة ثم يبدأ بالتصرف على نحو خاطئ، لذا يسهل عدم ملاحظة الخطأ.
التحدي
سهليطبع هذا المخطط الوقت مرة كل ثانية، ولكن بعد 32 ثانية يطبع أعدادًا سالبة. غيّر نوع now لكي يظل الوقت صحيحًا لأيام.
اضغط على Run وانتظر حتى تتجاوز 33 ثانية لترى الخلل، ثم أصلحه واضغط على Check.
جرّب بنفسك
void setup() {
Serial.begin(9600);
}
void loop() {
int now = millis(); // هذا النوع صغير جدًا لتخزين الوقت: غيّره
Serial.println(now);
delay(1000);
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس التوقيت دون delay
1millis()
ساعة millis()الأوقات بصيغة unsigned longالوميض دون تأخيرمصباحا LED بسرعتين مختلفتينالوميض عند تبديل حالة زرمصباح يعمل بمؤقّتتدرّب بنفسك: Playground لـ Arduino