دكستر العرب
./عضو جديد


السمعة:
- إنضم20 مايو 2025
- المشاركات 6
- مستوى التفاعل 12
- النقاط 3
اجعل الكتاب صديقًا، والعِلم طريقًا، و مساعدة الغير غايةً، تكن في الحياة عزيزًا، وفي الآخرة سعيدًا.
لا تجعل يومك يمر دون أن تُضيف لعقلك فكرة، ولقلبك نورًا، ولدينك عملًا.
فالعلم بلا عمل كالشجرة بلا ثمر.
اليوم سيكون مشروعنا الثاني بعد تحدثنا عن المشروع الأول الذي كان عبارة عن سلسلة من تشغيل 5 ليدات على التوالي
و انهينا الموضوع السابق بعدد من الأسئلة التي تعتبر تطوير على المشروع الأول و هذا هو المشروع الثاني فعليا بالكتاب عبارة عن تطوير على المشروع الأول
مقتبس من الموضوع السابق
التطوير
العلم ليس مجرد كلمات و أفكار تحفظ بل هو عبارة عن سلسلة من التطوير و هذا ما يجب عليك أن تنميه فالأن
انظر كيف يمكنك أن تطور المشروع مثلا :
- أنا لدي 100 ليد فهل من المنطق أن أعيد نفس الأسطر أو أن هناك شيء قد يسهل عليه هذه العملية و يقلل من وقتي بالبرمجة ؟
- مثلا أردت تغيير زمن التوقف لكل الليدات بدلا من نصف ثانية أردت جعله ثانية واحدة كيف يمكن أن أغيره بخطوة واحدة ؟
- هل هناك تغيير على إضاءة الليدات مثلا أن تعمل بدرجات بدلا من درجة واحدة ؟
- هل هناك أفكار لأجعل الإضاءة مثيرة قليلا و عشوائية بعض الشيء ؟
إن شاء الله هذا سيكون موضوعنا في المشروع القادم, و في هذا الوقت لا تقوموا بالإنتظار بل ابحثوا و تعلموا و شاركونا إلا ماذا وصلتم لأن المشاركة و المناقشات هي ما تؤدي للتعلم الحقيقي
project #2: repeating with for loops
السؤال الأول
ما قمنا به في المشروع السابق كان عبارة عن مصابيح من نوع led و كانت الخوازمية الخاصة بنااجعل ال led رقم 1 يعمل
انتظر لنصف ثانية
اجعل ال led رقم 1 ينطفئ
اجعل ال led رقم 2 يعمل
و قمنا بكتابة حوالي 15 سطر
و لكن على فرضا كنا نريد 100 ليد, فهل نحن مستعدين لكتابة حوالي 300 سطر !
فالحل الأن يكمن في الدالة
for
هي إحدى أهم الدالات الأساسية في لغة ++C فكرتها بكل اختصار أنك تقوم بتعيين قيمة أولية و الشرط و التغيير على القيمة و في داخل الدالة ال loob الخاصة بكفلتوضيح الأمر عمليا
نقوم بإستبدال ما بداخل ال void loop () في الموضوع السابق ب هذه الأسطر البسيطة
C++:
for ( int a = 2; a < 7 ; a++ )
{
digitalWrite(a, HIGH);
delay(500);
digitalWrite(a, LOW);
delay(500);
}
for
أقوم بتعريف المتغير a من نوع int (أي الأرقام الصحيحة فقط) و أضع له قيمة أولية و هي 2 (أي المنفذ 2)ثم الشرط و هو a>7 أي سيكون rang القيم من 2 إلى 6 (لأن ال a = 7 ليست ضمن الشرط)
ثم التغيير على القيمة بعد إنتهاء كل دورة سيكون بزيادة 1 للقيمة a
و عند الدخول في الدالة نجد أنها تقول لنا أخرج HIGH (أي 5 فولت) على المنفذ 2 ثم انتظر نصف ثانية ثم أخرج LOW على نفس المنفذ ثم انتظر نصف ثانية
ثم بعد إنتهاء هذه الدورة نقوم بزيادة 1 للقيمة السابقة ل a و سيصبح 3
فسأذهب للمنفذ 3 و أقوم بنفس العمل أجعله يعمل ثم ينتشر ثم ينطفئ ثم يعمل
قم المنفذ 4 و 5 و 6 و عند الوصول ل 7 لن أكمل لأنها خارج الشرط فسأكل لنهائية البرنامج
فيمكنني تعديل القيمة التي يتوقف عندها a مثلا ل a<102 عندها سيكون ال rang بين ال (2 إلى 101) أي 100 led
و هنا كمبرمج قمت بتسهيل العمل علي و حتى الضغط على ال Arduino (أدرت الكود بذكاء)
للمزيد من التفاصيل عن عمل ال for زر الرابط التالي

W3Schools.com
W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.
السؤال الثاني
الأن كما قلنا مثلا أريد أن أغير الزمن في كل ال led مرة واحدة, فبدلا من أن أذهب لكل مرة ورد فيها الرقم 500 و أحوله لأي رقم أخر مثلا 1000 يوجد لدي خياريينالأول أن أكون أستخدم IDE مثل Visual Studio أو غيره من الأنواع الذي يعطيك قدرة على تغيير كل مرة ورد فيها الرقم 500 مرة واحدة
أو من البداية يمكنك جعل الزمن كمتغير
ففي بداية الكود في ال void setup يمكنك أن تقوم بتعريف الزمن بمتغير معين مثلا
C++:
int d = 500;
و وضع ال d بدلا من الرقم في ال delay و يمكنك تغيير قيمة ال d وقتما أردت فعتدها تغير كل القيم في ال delay دفعى واحدة
السؤال الثالث
نعم يمكن ذلك من خلال إستخدام منافذ ال PWM بدلا من ال digitalو الأن سنشرح الفرق بينهما بشكل بسيط و التعمق سيكون في مشروع خاص بها تناوله الكتاب
يوجد لدينا نوعين من الموجات في ال Arduino
موجات ال Digital | هذه نوع من الموجات التي إما أن تكون HIGH أو LOW و حالة ال HIGH = 5v أما ال LOW = 0v فإما on أو off .. فإما أن يعمل ال led في أعلى طاقته أو لا يعمل |
|
موجات ال Analog | هذا النوع من الموجات يكون في حالة متوسطة فهو ليس منطفئ تمام و ليس سعمل بكل قوته فيكون في حالة متوسطة فيمكنني تشغيل الليد في نصف طاقته أو ربعها أو أي قيمة بين القوة الكاملة و و الصفر فولت و هناك المزيد من المعلومات المهمة التي سنغطيها لاحقا |
مثال لتوصيل مقاومة متغيرة ك INPUT مع منافذ ال Analog و بدلا من إستخدام
digitalWrite
و digitalRead
نسنتخدم هنا analogWrite
و analogRead
فحرفيا الأمر so easy

و لكن لا تنسى أن هذا فقط شرح فكرة و ليس شرح لها و سنقوم بشرح ال Analog و ال PWM بتفصيل أكبر في مشروع لاحق إن شاء الله
السؤال الرابع
و هذا السؤال أنتظر منك عزيزي القارئ الإجابة عليهمثلا يمكننا أن نجعلها تعمل بنمط معين أو تعمل ك flasher أو تعمل بإستخدام منافذ ال analog و تخرج ضوء بسطوع تدريجي أو يمكن جعل الأمر يعمل على شكل إحتمالات و إضافة ذكاء صناعي للقيام بالأمر بشكل عشوائي و بالطبع هذا خيار غير مفضل لأن المشروع بسيط و الذكارة الصغيرة في الأردوينو ستسبب لنا مشكلة لذلك نستخدم متحكمات أخرى مثل ESP32 التي لن نتحدث عنها في الوقت الحالي
نعتذر لقصر الموضوع و المعلومات البسيطة التي احتواها و لكن إن شاء الله مشروعنا القادم سيكون ال PWM و شرحها و مشروع بسيط عليها للتحكم بقوة و سطوع إضاءة مصباح من نوع led
و لا تقلق سنعمل على شرح كل مشاريع الكتاب و لكن نقوم بالتدرج درجة درجة و الأهم أن تقوم نفسك بالقراءة و التعلم و نشر ما تعلمته فيكن أن أغفل أنا عن معلومة و أن تقوم بشرحها فهذه المقالات و حتى الكورسات لا تغني عن الكتب
و ابتغي دائما معالي الأمور و ادعوا لي و للمسلمين و المسلمات بالتوفيق و السداد
بقدر الكدِّ تكتسبُ المعالي *** ومن طلب العلا سهر الليالي
ومن رام العلا من غير كد *** أضاع العمر في طلب المحال
تروم العز ثم تنام ليلاً *** يغوص البحر من طلب اللآلي
( الامام الشافعى )