الدرس 14/31-1: دوال Arduino Millis (بدون تأخير) و map | SunFounder Robojax
يقدم هذا الدليل دالة millis() في أردوينو، وهي أداة أساسية للمشاريع القائمة على الوقت التي تتطلب تنفيذ كود غير معطل. على عكس delay()، التي توقف البرنامج بأكمله، فإن millis() تتبع الوقت المنقضي منذ بدء تشغيل اللوحة، مما يسمح لأردوينو الخاص بك بتنفيذ مهام متعددة بفعالية. يمكنك استخدام هذه التقنية لبناء:
- وميض LED غير معطل يعمل بينما يتم تنفيذ كود آخر.
- أحداث مؤقتة تُطلق بواسطة أجهزة استشعار أو أزرار، مثل ضوء ينطفئ بعد 5 ثوانٍ من الضغط على زر.
- أنظمة بسيطة لتسجيل البيانات تقوم بتسجيل قيم أجهزة الاستشعار على فترات منتظمة.
- أنظمة واجهة مستخدم تستجيب للمدخلات دون تجميد.
فهم دالة millis()
دالة millis() هي أمر مدمج في أردوينو يُرجع عدد المللي ثانية منذ بدء تشغيل لوحة أردوينو للبرنامج الحالي. تبدأ من الصفر عند التشغيل وتزداد كل مللي ثانية. يمكنك استدعاء هذه الدالة في أي نقطة في الكود الخاص بك للحصول على قيمة "وقت التشغيل" الحالية. على سبيل المثال، بعد ثانية واحدة، تُرجع 1000؛ وبعد 5 ثوانٍ، تُرجع 5000. الميزة الرئيسية هي أنها لا توقف الكود الخاص بك، لذا يمكنك التحقق من الوقت بينما تستمر المهام الأخرى في العمل.
لماذا نتجنب delay()؟
دالة delay() هي طريقة بسيطة لإيقاف البرنامج مؤقتًا، لكنها دالة معطلة. عندما تستدعي delay(5000)، يتوقف أردوينو عن تنفيذ جميع الأكواد الأخرى لمدة 5 ثوانٍ، مما يجمد أي مكونات متصلة. هذا يمثل مشكلة للمشاريع التي تحتاج إلى الاستجابة للمدخلات أو تحديث المخرجات باستمرار. استخدام millis() يسمح لك بالتحقق مما إذا كانت فترة زمنية معينة قد مرت دون إيقاف بقية البرنامج، مما يجعلها مثالية لتعدد المهام.
المكونات المطلوبة
- لوحة أردوينو (Uno، Mega، إلخ)
- كابل USB للبرمجة والطاقة
دليل التوصيل
هذا المثال لا يتطلب أي توصيلات خارجية. يحتاج أردوينو فقط إلى الاتصال بجهاز الكمبيوتر الخاص بك عبر USB لرفع الكود وعرض مخرجات الشاشة التسلسلية.
شرح الكود
هذا المثال الأول هو عرض بسيط لكيفية عمل millis(). يقوم الكود بتهيئة الشاشة التسلسلية وطباعة قيمة millis() في حلقة لا نهائية.
void setup() {
Serial.begin(9600);//تهيئة الشاشة التسلسلية
Serial.println("مقدمة إلى millis");
delay(2000);
}
void loop() {
Serial.println(millis());
}
تبدأ دالة setup() الاتصال التسلسلي بمعدل 9600 باود وتطبع رسالة ترحيبية. delay(2000) هنا مخصص للعرض فقط لإظهار أن millis() تبدأ العد من لحظة تشغيل البرنامج. تقوم دالة loop() بطباعة القيمة الحالية لـ millis() باستمرار. عند فتح الشاشة التسلسلية، سترى الوقت بالمللي ثانية يزداد بسرعة. يوضح هذا أن millis() هي عداد لا يتوقف أبدًا، مما يوفر مرجعًا زمنيًا مستمرًا لبرنامجك.
هذه هي اللبنة الأساسية. في الفيديو، يوضح المدرب كيفية استخدام هذه القيمة لتنفيذ إجراءات بعد فترة زمنية محددة، مثل التحقق مما إذا كانت 5000 مللي ثانية (5 ثوانٍ) قد مرت قبل تنفيذ كتلة كود معينة. يتم ذلك عن طريق تخزين القيمة الحالية لـ millis() في متغير ثم مقارنتها في الحلقة الرئيسية.
يتم تغطية تشغيل LED بقيمة نسبية باستخدام دالة map() في الدرس 14/31-4: مثال 1 على كود أردوينو map().
عرض المشروع المباشر
في الفيديو، يقوم المدرب برفع هذا الكود وفتح الشاشة التسلسلية. يمكنك رؤية أن المخرجات تبدأ بعد التأخير الأولي البالغ ثانيتين، مع إظهار قيمة قريبة من 1999. ثم تزداد الأرقام بسرعة، مما يوضح العد المستمر للمللي ثانية. يؤكد هذا العرض المباشر أن الدالة تعمل ويوفر فهمًا بصريًا واضحًا لكيفية تتبع الوقت.
مشاريع ذات صلة من هذا الفيديو
- الدرس 14/31-2: مثال 2 على كود أردوينو millis() مع حدث
- الدرس 14/31-3: مثال 3 على كود أردوينو millis() مع زر ضغط
- الدرس 14/31-4: مثال 1 على كود أردوينو map()
- الدرس 14/31-5: مثال 2 على كود أردوينو map()
الفصول
- [00:00] مقدمة إلى millis()
- [01:19] ما هي millis() ولماذا نستخدمها
- [03:06] عرض عملي لـ millis()
- [05:46] استخدام millis() لتنفيذ حدث مؤقت
- [08:29] مثال مع زر ضغط
- [12:14] مثال متقدم لتوقيت زر الضغط
- [17:20] مقدمة إلى دالة map()
- [19:47] مثال كود لـ map() مع LED
- [22:41] إنشاء دالة map مخصصة
/*
Lesson 14/31: Arduino coding millis() example 1
Get this code and watch video Download and resource page https://robojax.com/RJT597
YouTube video https://www.youtube.com/watch?v=lqgzQohNiIM
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
/*
* Example-1 of using millis() with Arduino
* Written by Ahmad Shamshiri on July 27, 2019
* in Ajax, Ontario, Canada
* Watch video instructio for millis() :https://youtu.be/u2HsiTS8niQ
*/
void setup() {
Serial.begin(9600);//initialize serial monitor
Serial.println("Introduction to millis");
delay(2000);
}
void loop() {
Serial.println(millis());
}// loop end
Common Course Links
Common Course Files
الأشياء التي قد تحتاجها
-
أمازونSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
أمازون
-
أمازون
-
أمازون
-
أمازون
الموارد والمراجع
-
توثيقوثائق لمجموعة SunFounder 3 في 1 لإنترنت الأشياء/السيارات الذكية/التعلمdocs.sunfounder.com
-
خارجياشترِ مجموعة التعلم الذكية 3 في 1 من سن فاونديرsunfounder.com
ملفات📁
مكتبات أردوينو (ملف مضغوط)
-
شفرة المصدر لمجموعة تعلم السيارة الذكية 3 في 1 من صن فاوندر
3in1-kit-main-v2.zip12.80 MB