الدرس الثاني الانتقال من اللبنات البرمجية في تينكركاد إلى لغة ++C
انظر إلى رأس الصفحة: الدرس الثاني الانتقال من اللبنات البرمجية إلى لغة ++C. في منصة تينكركاد، نبدأ باللبنات البصرية لأنها سهلة وتفيد في النماذج الأولية، لكن لغة ++C تمنحك تحكُّماً كاملاً بأجهزة الأردوينو. انظر إلى الجدول في الأسفل: عندما تريد الإعلان عن متغيّر باسم x في لبنات تينكركاد تسحب لبنة متغيّرات بنفسجية، وفي لغة ++C تكتب int x = 0; حيث تعني int نوع البيانات عدداً صحيحاً، وتنهي السطر بفاصلة منقوطة لأنها إجبارية في كل أمر برمجي. وإذا أردت تعيين قيمة للمتغيّر ليساوي 3، تسحب لبنة التعيين وتكتب في ++C السطر x = 3;.
يقوم هذا الدرس على جسر الفجوة بين البرمجة المرئية عبر اللبنات في بيئة تينكركاد وبين كتابة التعليمات النصية بلغة ++C للتحكم الكامل بلوحة الأردوينو. يوضح الدرس كيفية ترجمة الأوامر المرئية للمتغيرات، والعمليات الحسابية، والشروط، والتكرارات، ومعاملة أطراف الإدخال والإخراج الرقمية والتناظرية إلى شفرات برمجية دقيقة. على سبيل المثال، لبنة التكرار المرئية تتحول إلى حلقة for (counter = 0; counter < 5; ++counter) في لغة ++C لتنفيذ المهام بتتابع منظم.
الفكرة الأساسية
اللبنات البرمجية في تينكركاد وسيلة ممتازة لتنفيذ النماذج الأولية بسرعة، لكن الاستفادة الكاملة من إمكانات متحكم الأردوينو تتطلب الانتقال إلى كتابة التعليمات النصية بلغة ++C. يعلمك هذا الدرس كيف تتحول كل لبنة مرئية كنت تستخدمها إلى سطر أو دالة برمجية مفهومة لدى المعالج.
الشرح
نبدأ بالإعلان عن المتغيرات والعمليات؛ عندما تعلن عن متغير باسم x في تينكركاد، فإنك تكتب في ++C الأمر int x = 0; حيث يحدد نوع البيانات أولاً. ولتغيير قيمة متغير بمقدار محدد مثل 5، تكتب x += 5;، بينما تتطابق المقارنات مثل x < y أو العمليات المنطقية مثل x!= y && x < y بين البيئتين عبر صياغة دقيقة تستخدم الرموز المعروفة. في جانب الإخراج والرسائل، تحل جملة Serial.println("hello world"); محل لبنة طباعة الرسالة، ويتحول أمر الانتظار لمدة 5 ثوان إلى دالة delay(5000); مع ملاحظة أن الدالة تستقبل الزمن بالميلي ثانية. وفي العبارات الشرطية، يترجم الشرط المرئي إلى بنية if (...) {... }، بينما تتحول التكرارات إلى حلقات مثل for (counter = 0; counter < 5; ++counter) أو حلقات while. أما التعامل مع الأطراف الرقمية والتناظرية فيتطلب تهيئة الطرف أولاً باستخدام دالة pinMode(4, INPUT); لتحديد ما إذا كان الطرف سيستخدم للإدخال أو الإخراج، ثم قراءة قيمته عبر digitalRead(4); أو ضبطه عبر digitalWrite(4, HIGH);، بينما تستخدم دوال مثل analogRead و analogWrite للتعامل مع الإشارات التناظرية وعرض النبضة PWM.
مثال محلول خطوة بخطوة
خذ مثال الدايودات المشعة للضوء الواومضة. المكونات المطلوبة هي لوحة أردوينو أونو R3 ودايود مشع للضوء LED. لتوصيل الدائرة، قم بتوصيل مهبط (Cathode) الدايود بالطرف الأرضي GND للوحة الأردوينو بسلك أسود، ومصعد (Anode) الدايود بالطرف الرقمي 11 بسلك أخضر. في البرمجة، لعمل تكرارين يجعلمان الدايود يومض 5 مرات ثم 10 مرات بترددات مختلفة، نكتب الكود التالي: int counter; int counter2; void setup() { pinMode(11, OUTPUT); } void loop() { for (counter = 0; counter < 5; ++counter) { digitalWrite(11, HIGH); delay(1000); digitalWrite(11, LOW); delay(1000); } for (counter2 = 0; counter2 < 10; ++counter2) { digitalWrite(11, HIGH); delay(200); digitalWrite(11, LOW); delay(200); } }
أخطاء شائعة
- نسيان تحديد نوع المتغير عند الإعلان عنه لأول مرة، مثل كتابة x = 0; مباشرة دون كتابة int بجانبه.
- كتابة قيم الزمن داخل دالة delay بنص بين علامتي تنصيص مثل delay("1000"); بدلاً من كتابتها كرقم صحيح delay(1000);.
- الخلط بين دوال التعامل الرقمي ودوالمعاملة الأطراف التناظرية، مثل استخدام digitalRead لقراءة مستشعر حرارة موصل بطرف تناظري.
سؤالان للتدريب مع الإجابة
السؤال الأول: كيف يتم تحويل أمر الانتظار لمدة 5 ثوان من لبنات تينكركاد إلى لغة ++C؟ الإجابة: يتم تحويله إلى دالة الانتظار بالميلي ثانية كالتالي: delay(5000);. السؤال الثاني: ما هو الكود المكتوب بلغة ++C لتهيئة الطرف الرقمي رقم 4 ليكون طرف إخراج Output؟ الإجابة: الكود هو: pinMode(4, OUTPUT);