الفرق بين المراجعتين لصفحة: «Arduino/Topics»

من موسوعة حسوب
طلا ملخص تعديل
إضافة شرح لنوع البيانات.
سطر 1: سطر 1:
== بنية لغة Arduino C ==
==بنية لغة Arduino C==
 
==مجالات استخدام لغة Arduino C==
== مجالات استخدام لغة Arduino C ==
==البنية الأولية للشيفرة في أردوينو==
 
== البنية الأولية للشيفرة في أردوينو ==
لابد لكل شيفرة من شيفرات أردوينو أن تحوي الدالتين التاليتين:
لابد لكل شيفرة من شيفرات أردوينو أن تحوي الدالتين التاليتين:
 
===[[Arduino/setup|<code>setup()‎</code>]]===
=== [[Arduino/setup|<code>setup()‎</code>]] ===
تستدعى الدالة <code>setup()‎</code> أولًا عند البدء بتنفيذ الشيفرة (المخطط [sketch] كما تُطلِق عليه أردوينو)، إذ تُستَعمل لتهيئة المتغيرات، وأوضاع الأرجل، وواجهات التخاطب، والبدء باستعمال المكتبات ...إلخ. انتبه إلى أنَّ الدالة <code>setup()‎</code> ستُنفَّذ مرةً واحدةً فقط بعد تشغيل لوحة أردوينو أو تصفيرها (reset).
تستدعى الدالة <code>setup()‎</code> أولًا عند البدء بتنفيذ الشيفرة (المخطط [sketch] كما تُطلِق عليه أردوينو)، إذ تُستَعمل لتهيئة المتغيرات، وأوضاع الأرجل، وواجهات التخاطب، والبدء باستعمال المكتبات ...إلخ. انتبه إلى أنَّ الدالة <code>setup()‎</code> ستُنفَّذ مرةً واحدةً فقط بعد تشغيل لوحة أردوينو أو تصفيرها (reset).
 
===[[Arduino/loop|<code>loop()‎</code>]]===
=== [[Arduino/loop|<code>loop()‎</code>]] ===
بعد إنشاء الدالة <code>[[Arduino/setup|setup()‎]]</code> التي تهيئ وتضبط القيم الأولية المراد استعمالها، تعمل الدالة <code>loop()‎</code> على «تكرار» الشيفرة المكتوبة بداخلها -كما يشير اسمها بالضبط- على التوالي متيحةً بذلك لبرنامجك بالتحكم بلوحة أردوينو والتغيُّر والاستجابة للبيئة والعناصر المرتبطة بها.
بعد إنشاء الدالة <code>[[Arduino/setup|setup()‎]]</code> التي تهيئ وتضبط القيم الأولية المراد استعمالها، تعمل الدالة <code>loop()‎</code> على «تكرار» الشيفرة المكتوبة بداخلها -كما يشير اسمها بالضبط- على التوالي متيحةً بذلك لبرنامجك بالتحكم بلوحة أردوينو والتغيُّر والاستجابة للبيئة والعناصر المرتبطة بها.
 
==بنى التحكم==
== بنى التحكم ==
===<code>[[Arduino/break|break]]</code>===
 
=== <code>[[Arduino/break|break]]</code> ===
تُستعمَل الكلمة <code>break</code> المفتاحية للخروج من الحلقات <code>[[Arduino/for|for]]</code>، أو <code>[[Arduino/while|while]]</code>، أو <code>[[Arduino/dowhile|do...while]]</code> التكرارية، إذ تتخطى الشيفرة التي بعدها وشروط الحلقة المحددِّة وتخرج منها. تُستعمَل أيضًا للخروج من التعبير <code>[[Arduino/switchcase|switch...case]]</code> البرمجي.
تُستعمَل الكلمة <code>break</code> المفتاحية للخروج من الحلقات <code>[[Arduino/for|for]]</code>، أو <code>[[Arduino/while|while]]</code>، أو <code>[[Arduino/dowhile|do...while]]</code> التكرارية، إذ تتخطى الشيفرة التي بعدها وشروط الحلقة المحددِّة وتخرج منها. تُستعمَل أيضًا للخروج من التعبير <code>[[Arduino/switchcase|switch...case]]</code> البرمجي.
 
===<code>[[Arduino/continue|continue]]</code>===
=== <code>[[Arduino/continue|continue]]</code> ===
تتخطى الكلمة <code>continue</code> المفتاحية الشيفرة التي تليها في حلقة التكرار (مثل الحلقات <code>[[Arduino/for|for]]</code>، أو <code>[[Arduino/while|while]]</code>، أو <code>[[Arduino/dowhile|do...while]]</code> التكرارية) إلى عملية التحقق من التعبير الشرطي لتلك الحلقة ثم يُستأنَف عمل حلقة التكرار بشكل طبيعي.
تتخطى الكلمة <code>continue</code> المفتاحية الشيفرة التي تليها في حلقة التكرار (مثل الحلقات <code>[[Arduino/for|for]]</code>، أو <code>[[Arduino/while|while]]</code>، أو <code>[[Arduino/dowhile|do...while]]</code> التكرارية) إلى عملية التحقق من التعبير الشرطي لتلك الحلقة ثم يُستأنَف عمل حلقة التكرار بشكل طبيعي.
 
===<code>[[Arduino/dowhile|dowhile]]</code>===
=== <code>[[Arduino/dowhile|dowhile]]</code> ===
تعمل الحلقة <code>do...while</code> التكرارية بنفس الطريقة التي تعمل بها الحلقة <code>[[Arduino/while|while]]</code> باستثناء أنه يُتحقق من الشرط في نهاية الحلقة وليس في بدايتها. هذا يعني أنَّ الحلقة ستُنفَّذ مرة واحدة على الأقل.
تعمل الحلقة <code>do...while</code> التكرارية بنفس الطريقة التي تعمل بها الحلقة <code>[[Arduino/while|while]]</code> باستثناء أنه يُتحقق من الشرط في نهاية الحلقة وليس في بدايتها. هذا يعني أنَّ الحلقة ستُنفَّذ مرة واحدة على الأقل.
 
===<code>[[Arduino/else|else]]</code>===
=== <code>[[Arduino/else|else]]</code> ===
يسمح التعبير <code>if...else</code> الشرطي بالتحكم بشكل أوسع بتسلسل عملية التحقق من عدة شروط معينة عند تنفيذ الشيفرة عوضًا عن التحقق من شرط وحيد عند استعمال التعبير <code>[[Arduino/if|if]]</code>. ستُنفَّذ العبارة <code>else</code> (إن وجدت) إن لم يتحقق الشرط المعطى في العبارة <code>if</code> ( أي أعطى القيمة <code>false</code>). يمكن أيضًا استعمال العبارة <code>else</code> مع العبارة <code>if</code> بالشكل <code>else if</code> لإضافة شرط آخر للتحقق منه وبذلك يمكن إجراء عدة عمليات تحقق متتابعة في الوقت نفسه.
يسمح التعبير <code>if...else</code> الشرطي بالتحكم بشكل أوسع بتسلسل عملية التحقق من عدة شروط معينة عند تنفيذ الشيفرة عوضًا عن التحقق من شرط وحيد عند استعمال التعبير <code>[[Arduino/if|if]]</code>. ستُنفَّذ العبارة <code>else</code> (إن وجدت) إن لم يتحقق الشرط المعطى في العبارة <code>if</code> ( أي أعطى القيمة <code>false</code>). يمكن أيضًا استعمال العبارة <code>else</code> مع العبارة <code>if</code> بالشكل <code>else if</code> لإضافة شرط آخر للتحقق منه وبذلك يمكن إجراء عدة عمليات تحقق متتابعة في الوقت نفسه.
 
===<code>[[Arduino/for|for]]</code>===
=== <code>[[Arduino/for|for]]</code> ===
تُستعمَل الحلقة <code>for</code> لتكرار كتلة برمجية معينة من الشيفرة عددًا محدَّدًا من المرات. يُستعمَل في هذه الحلقة عادةً عدادٌ لتتبع عدد مرات تكرار الشيفرة ومقاطعتها عند الوصول إلى عدد محدَّد. يمكن استعمال الحلقة <code>for</code> مع أية عملية تكرارٍ، وتُستعمَل بكثرة مع المصفوفات لتنفيذ عملية معينة على عناصرها التي قد تكون بيانات عادية أو أرجل معينة.
تُستعمَل الحلقة <code>for</code> لتكرار كتلة برمجية معينة من الشيفرة عددًا محدَّدًا من المرات. يُستعمَل في هذه الحلقة عادةً عدادٌ لتتبع عدد مرات تكرار الشيفرة ومقاطعتها عند الوصول إلى عدد محدَّد. يمكن استعمال الحلقة <code>for</code> مع أية عملية تكرارٍ، وتُستعمَل بكثرة مع المصفوفات لتنفيذ عملية معينة على عناصرها التي قد تكون بيانات عادية أو أرجل معينة.
 
===<code>[[Arduino/goto|goto]]</code>===
=== <code>[[Arduino/goto|goto]]</code> ===
تنقل الكلمة <code>goto</code> المفتاحية البرنامج إلى موضع معين ضمن الشيفرة.
تنقل الكلمة <code>goto</code> المفتاحية البرنامج إلى موضع معين ضمن الشيفرة.
 
===<code>[[Arduino/if|if]]</code>===
=== <code>[[Arduino/if|if]]</code> ===
يتحقَّق التعبير <code>if</code> الشرطي من شرط معيَّن وينفِّذ الكتلة البرمجية المكتوبة ضمنه إن كان محقَّقًا (أي كانت قيمته <code>true</code>).
يتحقَّق التعبير <code>if</code> الشرطي من شرط معيَّن وينفِّذ الكتلة البرمجية المكتوبة ضمنه إن كان محقَّقًا (أي كانت قيمته <code>true</code>).
 
===<code>[[Arduino/return|return]]</code>===
=== <code>[[Arduino/return|return]]</code> ===
تقاطع الكلمة <code>return</code> المفتاحية تنفيذ أيَّ دالةٍ وتعيد قيمةً من الدالة إلى من استدعاها إن حدُّدت.
تقاطع الكلمة <code>return</code> المفتاحية تنفيذ أيَّ دالةٍ وتعيد قيمةً من الدالة إلى من استدعاها إن حدُّدت.
 
===<code>[[Arduino/switchcase|switchcase]]</code>===
=== <code>[[Arduino/switchcase|switchcase]]</code> ===
يتحقَّق التعبير <code>switch...case</code> -كما في <code>[[Arduino/if|if]]</code>- من قيمة محدَّدة بطريقة تسمح للمبرمج بتحديد عدة شيفرات تُنفَّذ إحداها بناءً على تلك القيمة المفحوصة.
يتحقَّق التعبير <code>switch...case</code> -كما في <code>[[Arduino/if|if]]</code>- من قيمة محدَّدة بطريقة تسمح للمبرمج بتحديد عدة شيفرات تُنفَّذ إحداها بناءً على تلك القيمة المفحوصة.
 
===<code>[[Arduino/while|while]]</code>===
=== <code>[[Arduino/while|while]]</code> ===
تكرِّر الحلقة <code>while</code> تنفيذ الكتلة البرمجية التي ضمنها بشكل مستمر ولا نهائي ما دامت قيمة الشرط المنطقي الموجود بين القوسين هي <code>true</code> (اطلع على البينة العامة في توثيق الحلقة)؛ متى ما أصبحت قيمة الشرط المنطقي <code>false</code>، تتوقف الحلقة وتخرج.
تكرِّر الحلقة <code>while</code> تنفيذ الكتلة البرمجية التي ضمنها بشكل مستمر ولا نهائي ما دامت قيمة الشرط المنطقي الموجود بين القوسين هي <code>true</code> (اطلع على البينة العامة في توثيق الحلقة)؛ متى ما أصبحت قيمة الشرط المنطقي <code>false</code>، تتوقف الحلقة وتخرج.
 
==صيغ إضافية==
== صيغ إضافية ==
===<code>[[Arduino/define|‎#define]]</code>===
 
=== <code>[[Arduino/define|‎#define]]</code> ===
التعبير ‎<code>#define</code> هو أحد العناصر المفيدة في C، إذ يسمح بإعطاء اسمٍ لقيمةٍ ثابتةٍ قبل أن يُفسَّر البرنامج. الثوابت المعرَّفة باستعمال هذا التعبير في أردوينو لا تحتل أيَّة مساحةٍ من ذاكرة البرنامج على الشريحة (chip). سيبدِّل المفسِّر (compiler) القيمة المعرَّفة مكان المراجع التي تشير إلى هذه الثوابت أثناء عملية تصريف الشيفرة.
التعبير ‎<code>#define</code> هو أحد العناصر المفيدة في C، إذ يسمح بإعطاء اسمٍ لقيمةٍ ثابتةٍ قبل أن يُفسَّر البرنامج. الثوابت المعرَّفة باستعمال هذا التعبير في أردوينو لا تحتل أيَّة مساحةٍ من ذاكرة البرنامج على الشريحة (chip). سيبدِّل المفسِّر (compiler) القيمة المعرَّفة مكان المراجع التي تشير إلى هذه الثوابت أثناء عملية تصريف الشيفرة.
 
===<code>[[Arduino/include|‎#include]]</code>===
=== <code>[[Arduino/include|‎#include]]</code> ===
يُستعمَل التعبير ‎<code>#include</code> لتضمين مكتبات خارجية في شيفرتك. هذا يساعد المبرمج على الوصول إلى مجموعة أكبر من مكتبات C القياسية (التي هي مجموعة من الدوال المُنشَأ مسبقًا) والمكتبات التي كُتبَت خصِّيصًا لأردوينو.
يُستعمَل التعبير ‎<code>#include</code> لتضمين مكتبات خارجية في شيفرتك. هذا يساعد المبرمج على الوصول إلى مجموعة أكبر من مكتبات C القياسية (التي هي مجموعة من الدوال المُنشَأ مسبقًا) والمكتبات التي كُتبَت خصِّيصًا لأردوينو.
 
===<code>[[Arduino/semicolon|;]]</code>===
=== <code>[[Arduino/semicolon|;]]</code> ===
تُستعمَل الفاصلة المنقوطة <code>;</code> لإنهاء كل تعبير برمجي في لغة أردوينو C.
تُستعمَل الفاصلة المنقوطة <code>;</code> لإنهاء كل تعبير برمجي في لغة أردوينو C.
 
===<code>[[Arduino/curlybraces|{}]]</code>===
=== <code>[[Arduino/curlybraces|{}]]</code> ===
القوسان المعقوصان <code>{}</code> (curly braces، أو braces فقط أو curly brackets) هما جزءٌ لا يتجزأ من لغة C. يستعملان في بُنى عديدة مثل بنى التحكم وغيرها وهذا يربك أحيانًا المبتدئين أثناء تعلمهم اللغة.
القوسان المعقوصان <code>{}</code> (curly braces، أو braces فقط أو curly brackets) هما جزءٌ لا يتجزأ من لغة C. يستعملان في بُنى عديدة مثل بنى التحكم وغيرها وهذا يربك أحيانًا المبتدئين أثناء تعلمهم اللغة.
 
===[[Arduino/singlelinecomment|<code>//</code>]]===
=== [[Arduino/singlelinecomment|<code>//</code>]] ===
تبدأ التعليقات السطرية بخطين مائلين متجاورين <code>//</code> وتنتهي بنهاية السطر بشكل تلقائي. سيُتجاهل أي شيء يلي الرمزين <code>//</code> حتى نهاية السطر أثناء تفسير الشيفرة.
تبدأ التعليقات السطرية بخطين مائلين متجاورين <code>//</code> وتنتهي بنهاية السطر بشكل تلقائي. سيُتجاهل أي شيء يلي الرمزين <code>//</code> حتى نهاية السطر أثناء تفسير الشيفرة.
 
===[[Arduino/blockcomment|<code>/* */</code>]]===
=== [[Arduino/blockcomment|<code>/* */</code>]] ===
تبدأ التعليقات الكتلية (block comment) أو التعليقات متعددة الأسطر (multi-line comment) بالرمز <code>*/</code> وتنتهي بالرمز <code>/*</code>. يمكن أن يمتد هذا التعليق على عدَّة أسطر بحسب الحاجة؛ ومتى ما قرأ المفسِّر الرمز <code>*/</code>، سيتجاهل كل ما كُتِب بعده حتى يصل إلى الرمز <code>/*</code>.
تبدأ التعليقات الكتلية (block comment) أو التعليقات متعددة الأسطر (multi-line comment) بالرمز <code>*/</code> وتنتهي بالرمز <code>/*</code>. يمكن أن يمتد هذا التعليق على عدَّة أسطر بحسب الحاجة؛ ومتى ما قرأ المفسِّر الرمز <code>*/</code>، سيتجاهل كل ما كُتِب بعده حتى يصل إلى الرمز <code>/*</code>.
 
==المعاملات في لغة أردوينو C==
== المعاملات في لغة أردوينو C ==
===[[Arduino/arithmetic operators|المعاملات الحسابية]]===
 
=== [[Arduino/arithmetic operators|المعاملات الحسابية]] ===
تجري المعاملات الحسابية (Arithmetic Operators) العمليات الحسابية الأساسية الأربعة (الجمع والطرح والضرب والقسمة) بالإضافة إلى عمليات أخرى مثل حساب باقي القسمة وإسناد قيمٍ إلى متغيراتٍ.
تجري المعاملات الحسابية (Arithmetic Operators) العمليات الحسابية الأساسية الأربعة (الجمع والطرح والضرب والقسمة) بالإضافة إلى عمليات أخرى مثل حساب باقي القسمة وإسناد قيمٍ إلى متغيراتٍ.
 
===[[Arduino/comparison operators|معاملات الموازنة]]===
=== [[Arduino/comparison operators|معاملات الموازنة]] ===
تجري معاملات الموازنة (Comparison Operators) عمليةَ موازنةٍ -كما هو اسمها- بين قيمتين أو متغيِّرين أو متغير وقيمة معينة ثم تعيد قيمة منطقية تمثِّل حالة أحد المعاملين (أكبر أو أصغر أو يساوي ...إلخ) نسبةً للآخر.
تجري معاملات الموازنة (Comparison Operators) عمليةَ موازنةٍ -كما هو اسمها- بين قيمتين أو متغيِّرين أو متغير وقيمة معينة ثم تعيد قيمة منطقية تمثِّل حالة أحد المعاملين (أكبر أو أصغر أو يساوي ...إلخ) نسبةً للآخر.
 
===[[Arduino/boolean operators|المعاملات المنطقية]]===
=== [[Arduino/boolean operators|المعاملات المنطقية]] ===
تجري المعاملات المنطقية (Boolean Operators) العمليات المنطقية (العملية AND أو العملية OR أو العملية NOT) على القيم أو التعابير المنطقية ثم تعيد القيمة المنطقية الناتجة.
تجري المعاملات المنطقية (Boolean Operators) العمليات المنطقية (العملية AND أو العملية OR أو العملية NOT) على القيم أو التعابير المنطقية ثم تعيد القيمة المنطقية الناتجة.
 
===[[Arduino/pointer access operators|معاملات وصول المؤشر]]===
=== [[Arduino/pointer access operators|معاملات وصول المؤشر]] ===
معاملات وصول المؤشر هي (Pointer Access Operators) هي المعاملات التي تُستعمَل مع المؤشرات لتوفير وصول المؤشر إلى عناوين المتغيرات في الذاكرة والإشارة إليها، وإمكانية وصول المتغيرات إلى القيم المحتواة في عناوين الذاكرة التي تشير إليها المؤشرات.
معاملات وصول المؤشر هي (Pointer Access Operators) هي المعاملات التي تُستعمَل مع المؤشرات لتوفير وصول المؤشر إلى عناوين المتغيرات في الذاكرة والإشارة إليها، وإمكانية وصول المتغيرات إلى القيم المحتواة في عناوين الذاكرة التي تشير إليها المؤشرات.
 
===[[Arduino/bitwise operators|معاملات الأعداد الثنائية]]===
=== [[Arduino/bitwise operators|معاملات الأعداد الثنائية]] ===
تجري معاملات الأعداد الثنائية (Bitwise Operators) جميع العمليات المنطقية وعمليات الإزاحة على بتات الأعداد والقيم الثنائية ثم تعيد القيمة الناتجة.
تجري معاملات الأعداد الثنائية (Bitwise Operators) جميع العمليات المنطقية وعمليات الإزاحة على بتات الأعداد والقيم الثنائية ثم تعيد القيمة الناتجة.
 
===[[Arduino/compound operators|معاملات مركَّبة]]===
=== [[Arduino/compound operators|معاملات مركَّبة]] ===
تستعمل المعاملات المركبة (Compound Operators) في كتابة الشيفرات في أردوينو بكثرة لتصفير وضبط وقلب بتات معينة في القيم الثنائية وغيرها من العمليات المهمة التي تسهِّل وتبسِّط عملية كتابة الشيفرة كثيرًا.
تستعمل المعاملات المركبة (Compound Operators) في كتابة الشيفرات في أردوينو بكثرة لتصفير وضبط وقلب بتات معينة في القيم الثنائية وغيرها من العمليات المهمة التي تسهِّل وتبسِّط عملية كتابة الشيفرة كثيرًا.
==أنواع البيانات==


== أنواع البيانات ==
=== الكائن <code>[[Arduino/stringobject|string]]</code> ===
تنشئ الدالة <code>String()‎</code> نسخةً من الصنف <code>String</code> الذي يوفِّر الكثير من الأدوات للتعامل مع السلاسل النصية وإجراء عمليات عليها.


=== <code>[[Arduino/string|string]]</code> ===
===<code>[[Arduino/array|array]]</code>===
المصفوفة هي مجموعة من المتغيرات والثوابت الموضوعة في وعاء واحد والتي يمكن الوصول إليها والتعامل معها عبر رقم فهرس كلٍّ منها.


=== <code>[[Arduino/stringobject|stringobject]]</code> ===
===<code>[[Arduino/bool|bool]]</code>===
يخزِّن المتغير الذي يصرَّح عنه بأنَّه من النوع <code>bool</code> إحدى القيمتين المنطقيَّتين التاليتين: <code>[[Arduino/constants#.D8.A7.D9.84.D8.AB.D8.A7.D8.A8.D8.AA true|true]]</code>، أو <code>[[Arduino/constants#.D8.A7.D9.84.D8.AB.D8.A7.D8.A8.D8.AA false|false]]</code> عبر حجز بايتٍ واحدٍ من الذاكرة فقط.


=== <code>[[Arduino/array|array]]</code> ===
===<code>[[Arduino/boolean|boolean]]</code>===
النوع <code>boolean</code> هو نوع غير قياسي، وهو اسمٌ بديل للنوع <code>[[Arduino/bool|bool]]</code> المُعرَّف في أردوينو.


=== <code>[[Arduino/bool|bool]]</code> ===
===<code>[[Arduino/byte|byte]]</code>===
يُخزِّن النوع <code>byte</code> عددًا عديم الإشارة بحجم 8 بت.


=== <code>[[Arduino/boolean|boolean]]</code> ===
===<code>[[Arduino/char|char]]</code>===
يحجز النوع <code>char</code> بايتًا واحدًا من الذاكرة ويخزِّن فيه قيمة محرف محدَّد.


=== <code>[[Arduino/byte|byte]]</code> ===
===<code>[[Arduino/double|double]]</code>===
يحجز النوع <code>double</code> أربعة بايتات من الذاكرة فقط في لوحات أردوينو Uno (والتي تعتمد على متحكمات ATMega) أو ثمانية بايتات في اللوحات Due لتخزين عدد عشري فيها.


=== <code>[[Arduino/char|char]]</code> ===
===<code>[[Arduino/float|float]]</code>===
يحجز النوع <code>float</code> أربعة بايتات من الذاكرة لتخزين عدد عشري فيها.


=== <code>[[Arduino/double|double]]</code> ===
===<code>[[Arduino/int|int]]</code>===
يحجز النوع <code>int</code> حجمًا مقداره 2 بايت من الذاكرة في لوحات أردوينو Uno (وتلك التي تعتمد على متحكمات ATMega)  أو 4 بايت في لوحات أردوينو Due (وتلك التي تعتمد على متحكمات SAMD) لتخزين عدد صحيح فيه.


=== <code>[[Arduino/float|float]]</code> ===
===<code>[[Arduino/long|long]]</code>===
تحجز النوع <code>long</code> حجمًا كبيرًا من الذاكرة مقداره 4 بايت يُستعمَل لتخزين الأعداد التي تتسم بأنَّها طويلة.


=== <code>[[Arduino/int|int]]</code> ===
===<code>[[Arduino/short|short]]</code>===
يحجز النوع <code>short</code> في جميع لوحات أردوينو (التي تعتمد على المتحكمات ATMega و ARM) حجمًا من الذاكرة مقداره 2 بايت لتخزين عدد قصير فيه.


=== <code>[[Arduino/long|long]]</code> ===
=== <code>[[Arduino/string|string]]</code> ===
 
يمثِّل النوع <code>string</code> سلسلةً نصيةً مؤلفةً من عدة محارف مرتبطة مع بعضها بعضًا. تُستعمَل مصفوفة من المحارف لتخزين هذا النوع من البيانات واستدعائها والتعامل معها لاحقًا.
=== <code>[[Arduino/short|short]]</code> ===
 
=== <code>[[Arduino/unsignedchar|unsignedchar]]</code> ===
 
=== <code>[[Arduino/unsignedint|unsignedint]]</code> ===
 
=== <code>[[Arduino/unsignedlong|unsignedlong]]</code> ===
 
=== <code>[[Arduino/void|void]]</code> ===
 
=== <code>[[Arduino/word|word]]</code> ===
 
== الدوال ==
 
=== [[Arduino/digital io|دوال التحكم بأرجل الدخل والخرج الرقمية]] ===
 
=== [[Arduino/analog io|دوال التحكم بأرجل الدخل والخرج التشابهية]] ===
 
=== [[Arduino/advanced io|دوال متقدمة للتحكم بأرجل الدخل والخرج]] ===
 
=== [[Arduino/time|دوال التوقيت]] ===
 
=== [[Arduino/math|الدوال الرياضية]] ===
 
=== [[Arduino/characters|دوال التعامل مع المحارف]] ===
 
=== [[Arduino/conversion|دوال التحويل]] ===
 
=== [[Arduino/random numbers|دوال توليد الأعداد العشوائية]] ===
 
=== [[Arduino/bits and bytes|دوال التحكم بالبتات والبايتات]] ===
 
=== [[Arduino/interrupts|دوال التحكم بالمقاطعات]] ===
 
=== [[Arduino/communication|دوال التحكم بالاتصالات]] ===
 
=== [[Arduino/usb|دوال التحكم بالمنفذ USB]] ===
 
== الثوابت والمتغيرات ==
 
=== الثوابت ===
 
==== <code>[[Arduino/floatingpointconstants|floatingpointconstants]]</code> ====
 
==== <code>[[Arduino/integerconstants|integerconstants]]</code> ====
 
==== <code>[[Arduino/constants|constants]]</code> ====
 
=== مجال وقيود المتغير (Variable Scope & Qualifiers) ===
 
==== <code>[[Arduino/const|const]]</code> ====
 
==== <code>[[Arduino/scope|scope]]</code> ====


==== <code>[[Arduino/static|static]]</code> ====
===<code>[[Arduino/unsignedchar|unsigned char]]</code>===
يحجز النوع <code>unsigned char</code> حجمًا من الذاكرة مقداره 1 بايت فقط.


==== <code>[[Arduino/volatile|volatile]]</code> ====
===<code>[[Arduino/unsignedint|unsigned int]]</code>===
يحجز النوع <code>unsigned int</code> حجمًا من الذاكرة مقداره 2 بايت في لوحات أردونيو Uno واللوحات التي تعتمد على متحكمات ATMega أو 4 بايت في لوحات أردوينو Due لتخزين عدد صحيح عديم الإشارة فيها.


=== أدوات إضافية ===
===<code>[[Arduino/unsignedlong|unsigned long]]</code>===
يحجز النوع <code>unsigned long</code> حجمًا كبيرًا من الذاكرة مقداره 4 بايت يُستعمَل لتخزين الأعداد عديمة الإشارة التي تتسم بأنَّها طويلة.


==== <code>[[Arduino/progmem|PROGMEM]]</code> ====
===<code>[[Arduino/void|void]]</code>===
تُستعمَل الكلمة المفتاحية <code>void</code> مع الدوال التي يُعرِّفها المبرمج في الشيفرة لتُشير إلى أنَّه لا يُتوقَّع أن تعيد هذه الدالة بعد انتهاء تنفيذها أيَّة بيانات إلى من استدعاها.


==== <code>[[Arduino/sizeof|sizeof()‎]]</code> ====
===<code>[[Arduino/word|word]]</code>===
تُخزِّن المتغيرات التي من النوع <code>word</code> عددًا عديم الإشارة بحجم 2 بايت.


== مصادر ==
==الدوال==
===[[Arduino/digital io|دوال التحكم بأرجل الدخل والخرج الرقمية]]===
===[[Arduino/analog io|دوال التحكم بأرجل الدخل والخرج التشابهية]]===
===[[Arduino/advanced io|دوال متقدمة للتحكم بأرجل الدخل والخرج]]===
===[[Arduino/time|دوال التوقيت]]===
===[[Arduino/math|الدوال الرياضية]]===
===[[Arduino/characters|دوال التعامل مع المحارف]]===
===[[Arduino/conversion|دوال التحويل]]===
===[[Arduino/random numbers|دوال توليد الأعداد العشوائية]]===
===[[Arduino/bits and bytes|دوال التحكم بالبتات والبايتات]]===
===[[Arduino/interrupts|دوال التحكم بالمقاطعات]]===
===[[Arduino/communication|دوال التحكم بالاتصالات]]===
===[[Arduino/usb|دوال التحكم بالمنفذ USB]]===
==الثوابت والمتغيرات==
===الثوابت===
====<code>[[Arduino/floatingpointconstants|floatingpointconstants]]</code>====
====<code>[[Arduino/integerconstants|integerconstants]]</code>====
====<code>[[Arduino/constants|constants]]</code>====
===مجال وقيود المتغير (Variable Scope & Qualifiers)===
====<code>[[Arduino/const|const]]</code>====
====<code>[[Arduino/scope|scope]]</code>====
====<code>[[Arduino/static|static]]</code>====
====<code>[[Arduino/volatile|volatile]]</code>====
===أدوات إضافية===
====<code>[[Arduino/progmem|PROGMEM]]</code>====
====<code>[[Arduino/sizeof|sizeof()‎]]</code>====
==مصادر ==

مراجعة 14:15، 26 أكتوبر 2018

بنية لغة Arduino C

مجالات استخدام لغة Arduino C

البنية الأولية للشيفرة في أردوينو

لابد لكل شيفرة من شيفرات أردوينو أن تحوي الدالتين التاليتين:

setup()‎

تستدعى الدالة setup()‎ أولًا عند البدء بتنفيذ الشيفرة (المخطط [sketch] كما تُطلِق عليه أردوينو)، إذ تُستَعمل لتهيئة المتغيرات، وأوضاع الأرجل، وواجهات التخاطب، والبدء باستعمال المكتبات ...إلخ. انتبه إلى أنَّ الدالة setup()‎ ستُنفَّذ مرةً واحدةً فقط بعد تشغيل لوحة أردوينو أو تصفيرها (reset).

loop()‎

بعد إنشاء الدالة setup()‎ التي تهيئ وتضبط القيم الأولية المراد استعمالها، تعمل الدالة loop()‎ على «تكرار» الشيفرة المكتوبة بداخلها -كما يشير اسمها بالضبط- على التوالي متيحةً بذلك لبرنامجك بالتحكم بلوحة أردوينو والتغيُّر والاستجابة للبيئة والعناصر المرتبطة بها.

بنى التحكم

break

تُستعمَل الكلمة break المفتاحية للخروج من الحلقات for، أو while، أو do...while التكرارية، إذ تتخطى الشيفرة التي بعدها وشروط الحلقة المحددِّة وتخرج منها. تُستعمَل أيضًا للخروج من التعبير switch...case البرمجي.

continue

تتخطى الكلمة continue المفتاحية الشيفرة التي تليها في حلقة التكرار (مثل الحلقات for، أو while، أو do...while التكرارية) إلى عملية التحقق من التعبير الشرطي لتلك الحلقة ثم يُستأنَف عمل حلقة التكرار بشكل طبيعي.

dowhile

تعمل الحلقة do...while التكرارية بنفس الطريقة التي تعمل بها الحلقة while باستثناء أنه يُتحقق من الشرط في نهاية الحلقة وليس في بدايتها. هذا يعني أنَّ الحلقة ستُنفَّذ مرة واحدة على الأقل.

else

يسمح التعبير if...else الشرطي بالتحكم بشكل أوسع بتسلسل عملية التحقق من عدة شروط معينة عند تنفيذ الشيفرة عوضًا عن التحقق من شرط وحيد عند استعمال التعبير if. ستُنفَّذ العبارة else (إن وجدت) إن لم يتحقق الشرط المعطى في العبارة if ( أي أعطى القيمة false). يمكن أيضًا استعمال العبارة else مع العبارة if بالشكل else if لإضافة شرط آخر للتحقق منه وبذلك يمكن إجراء عدة عمليات تحقق متتابعة في الوقت نفسه.

for

تُستعمَل الحلقة for لتكرار كتلة برمجية معينة من الشيفرة عددًا محدَّدًا من المرات. يُستعمَل في هذه الحلقة عادةً عدادٌ لتتبع عدد مرات تكرار الشيفرة ومقاطعتها عند الوصول إلى عدد محدَّد. يمكن استعمال الحلقة for مع أية عملية تكرارٍ، وتُستعمَل بكثرة مع المصفوفات لتنفيذ عملية معينة على عناصرها التي قد تكون بيانات عادية أو أرجل معينة.

goto

تنقل الكلمة goto المفتاحية البرنامج إلى موضع معين ضمن الشيفرة.

if

يتحقَّق التعبير if الشرطي من شرط معيَّن وينفِّذ الكتلة البرمجية المكتوبة ضمنه إن كان محقَّقًا (أي كانت قيمته true).

return

تقاطع الكلمة return المفتاحية تنفيذ أيَّ دالةٍ وتعيد قيمةً من الدالة إلى من استدعاها إن حدُّدت.

switchcase

يتحقَّق التعبير switch...case -كما في if- من قيمة محدَّدة بطريقة تسمح للمبرمج بتحديد عدة شيفرات تُنفَّذ إحداها بناءً على تلك القيمة المفحوصة.

while

تكرِّر الحلقة while تنفيذ الكتلة البرمجية التي ضمنها بشكل مستمر ولا نهائي ما دامت قيمة الشرط المنطقي الموجود بين القوسين هي true (اطلع على البينة العامة في توثيق الحلقة)؛ متى ما أصبحت قيمة الشرط المنطقي false، تتوقف الحلقة وتخرج.

صيغ إضافية

‎#define

التعبير ‎#define هو أحد العناصر المفيدة في C، إذ يسمح بإعطاء اسمٍ لقيمةٍ ثابتةٍ قبل أن يُفسَّر البرنامج. الثوابت المعرَّفة باستعمال هذا التعبير في أردوينو لا تحتل أيَّة مساحةٍ من ذاكرة البرنامج على الشريحة (chip). سيبدِّل المفسِّر (compiler) القيمة المعرَّفة مكان المراجع التي تشير إلى هذه الثوابت أثناء عملية تصريف الشيفرة.

‎#include

يُستعمَل التعبير ‎#include لتضمين مكتبات خارجية في شيفرتك. هذا يساعد المبرمج على الوصول إلى مجموعة أكبر من مكتبات C القياسية (التي هي مجموعة من الدوال المُنشَأ مسبقًا) والمكتبات التي كُتبَت خصِّيصًا لأردوينو.

;

تُستعمَل الفاصلة المنقوطة ; لإنهاء كل تعبير برمجي في لغة أردوينو C.

{}

القوسان المعقوصان {} (curly braces، أو braces فقط أو curly brackets) هما جزءٌ لا يتجزأ من لغة C. يستعملان في بُنى عديدة مثل بنى التحكم وغيرها وهذا يربك أحيانًا المبتدئين أثناء تعلمهم اللغة.

//

تبدأ التعليقات السطرية بخطين مائلين متجاورين // وتنتهي بنهاية السطر بشكل تلقائي. سيُتجاهل أي شيء يلي الرمزين // حتى نهاية السطر أثناء تفسير الشيفرة.

/* */

تبدأ التعليقات الكتلية (block comment) أو التعليقات متعددة الأسطر (multi-line comment) بالرمز */ وتنتهي بالرمز /*. يمكن أن يمتد هذا التعليق على عدَّة أسطر بحسب الحاجة؛ ومتى ما قرأ المفسِّر الرمز */، سيتجاهل كل ما كُتِب بعده حتى يصل إلى الرمز /*.

المعاملات في لغة أردوينو C

المعاملات الحسابية

تجري المعاملات الحسابية (Arithmetic Operators) العمليات الحسابية الأساسية الأربعة (الجمع والطرح والضرب والقسمة) بالإضافة إلى عمليات أخرى مثل حساب باقي القسمة وإسناد قيمٍ إلى متغيراتٍ.

معاملات الموازنة

تجري معاملات الموازنة (Comparison Operators) عمليةَ موازنةٍ -كما هو اسمها- بين قيمتين أو متغيِّرين أو متغير وقيمة معينة ثم تعيد قيمة منطقية تمثِّل حالة أحد المعاملين (أكبر أو أصغر أو يساوي ...إلخ) نسبةً للآخر.

المعاملات المنطقية

تجري المعاملات المنطقية (Boolean Operators) العمليات المنطقية (العملية AND أو العملية OR أو العملية NOT) على القيم أو التعابير المنطقية ثم تعيد القيمة المنطقية الناتجة.

معاملات وصول المؤشر

معاملات وصول المؤشر هي (Pointer Access Operators) هي المعاملات التي تُستعمَل مع المؤشرات لتوفير وصول المؤشر إلى عناوين المتغيرات في الذاكرة والإشارة إليها، وإمكانية وصول المتغيرات إلى القيم المحتواة في عناوين الذاكرة التي تشير إليها المؤشرات.

معاملات الأعداد الثنائية

تجري معاملات الأعداد الثنائية (Bitwise Operators) جميع العمليات المنطقية وعمليات الإزاحة على بتات الأعداد والقيم الثنائية ثم تعيد القيمة الناتجة.

معاملات مركَّبة

تستعمل المعاملات المركبة (Compound Operators) في كتابة الشيفرات في أردوينو بكثرة لتصفير وضبط وقلب بتات معينة في القيم الثنائية وغيرها من العمليات المهمة التي تسهِّل وتبسِّط عملية كتابة الشيفرة كثيرًا.

أنواع البيانات

الكائن string

تنشئ الدالة String()‎ نسخةً من الصنف String الذي يوفِّر الكثير من الأدوات للتعامل مع السلاسل النصية وإجراء عمليات عليها.

array

المصفوفة هي مجموعة من المتغيرات والثوابت الموضوعة في وعاء واحد والتي يمكن الوصول إليها والتعامل معها عبر رقم فهرس كلٍّ منها.

bool

يخزِّن المتغير الذي يصرَّح عنه بأنَّه من النوع bool إحدى القيمتين المنطقيَّتين التاليتين: true، أو false عبر حجز بايتٍ واحدٍ من الذاكرة فقط.

boolean

النوع boolean هو نوع غير قياسي، وهو اسمٌ بديل للنوع bool المُعرَّف في أردوينو.

byte

يُخزِّن النوع byte عددًا عديم الإشارة بحجم 8 بت.

char

يحجز النوع char بايتًا واحدًا من الذاكرة ويخزِّن فيه قيمة محرف محدَّد.

double

يحجز النوع double أربعة بايتات من الذاكرة فقط في لوحات أردوينو Uno (والتي تعتمد على متحكمات ATMega) أو ثمانية بايتات في اللوحات Due لتخزين عدد عشري فيها.

float

يحجز النوع float أربعة بايتات من الذاكرة لتخزين عدد عشري فيها.

int

يحجز النوع int حجمًا مقداره 2 بايت من الذاكرة في لوحات أردوينو Uno (وتلك التي تعتمد على متحكمات ATMega) أو 4 بايت في لوحات أردوينو Due (وتلك التي تعتمد على متحكمات SAMD) لتخزين عدد صحيح فيه.

long

تحجز النوع long حجمًا كبيرًا من الذاكرة مقداره 4 بايت يُستعمَل لتخزين الأعداد التي تتسم بأنَّها طويلة.

short

يحجز النوع short في جميع لوحات أردوينو (التي تعتمد على المتحكمات ATMega و ARM) حجمًا من الذاكرة مقداره 2 بايت لتخزين عدد قصير فيه.

string

يمثِّل النوع string سلسلةً نصيةً مؤلفةً من عدة محارف مرتبطة مع بعضها بعضًا. تُستعمَل مصفوفة من المحارف لتخزين هذا النوع من البيانات واستدعائها والتعامل معها لاحقًا.

unsigned char

يحجز النوع unsigned char حجمًا من الذاكرة مقداره 1 بايت فقط.

unsigned int

يحجز النوع unsigned int حجمًا من الذاكرة مقداره 2 بايت في لوحات أردونيو Uno واللوحات التي تعتمد على متحكمات ATMega أو 4 بايت في لوحات أردوينو Due لتخزين عدد صحيح عديم الإشارة فيها.

unsigned long

يحجز النوع unsigned long حجمًا كبيرًا من الذاكرة مقداره 4 بايت يُستعمَل لتخزين الأعداد عديمة الإشارة التي تتسم بأنَّها طويلة.

void

تُستعمَل الكلمة المفتاحية void مع الدوال التي يُعرِّفها المبرمج في الشيفرة لتُشير إلى أنَّه لا يُتوقَّع أن تعيد هذه الدالة بعد انتهاء تنفيذها أيَّة بيانات إلى من استدعاها.

word

تُخزِّن المتغيرات التي من النوع word عددًا عديم الإشارة بحجم 2 بايت.

الدوال

دوال التحكم بأرجل الدخل والخرج الرقمية

دوال التحكم بأرجل الدخل والخرج التشابهية

دوال متقدمة للتحكم بأرجل الدخل والخرج

دوال التوقيت

الدوال الرياضية

دوال التعامل مع المحارف

دوال التحويل

دوال توليد الأعداد العشوائية

دوال التحكم بالبتات والبايتات

دوال التحكم بالمقاطعات

دوال التحكم بالاتصالات

دوال التحكم بالمنفذ USB

الثوابت والمتغيرات

الثوابت

floatingpointconstants

integerconstants

constants

مجال وقيود المتغير (Variable Scope & Qualifiers)

const

scope

static

volatile

أدوات إضافية

PROGMEM

sizeof()‎

مصادر