أساسیات برمجة Arduino | الجزء الرابع

برمجة Arduino

عوامل التشغیل في Arduino

يتم استخدام المشغلين على نطاق واسع في برمجة Arduino من الأساسيات إلى المستويات المتقدمة. يلعب دورًا مهمًا في كل مفهوم برمجة مثل C و C ++  و Java وما إلى ذلك.

ابدء: أساسیات برمجة Arduino | الجزء الأول

يتم استخدام العوامل لحل المشكلات المنطقية والرياضية. على سبيل المثال لحساب درجة الحرارة التي قدمها المستشعر بناءً على بعض الجهد التناظري.

أنواع المشغلين المصنفة في Arduino هي:

  • العمليات الحسابية (Arithmetic Operators)
  • العوامل المركبة (Compound Operators)
  • العوامل المنطقية (Boolean Operators)
  • عوامل المقارنة (Comparison Operators)
  • عوامل Bitwise (Bitwise Operators)

العمليات الحسابية (Arithmetic Operators)

هناك ستة مشغلين أساسيين مسؤولين عن إجراء العمليات الحسابية في Arduino وهي مذكورة أدناه:

عامل التخصيص (=)

يتم استخدام عامل التعيين في Arduino لتعيين قيمة المتغير. إنه مختلف تمامًا عن الرمز المتساوي (=) المستخدم عادةً في الرياضيات.

إضافة (+)

يتم استخدام عامل الجمع لجمع رقمين. على سبيل المثال P + Q.

الطرح (-)

يستخدم الطرح لطرح قيمة واحدة من الأخرى. على سبيل المثال P – Q.

عمليه الضرب ( * )

الضرب يستخدم لضرب رقمين. على سبيل المثال P * Q.

قسم ( / )

يتم استخدام القسمة لتحديد نتيجة قسمة رقم على آخر. على سبيل المثال P / Q.

مودولو (٪)

يتم استخدام عامل التشغيل Modulo لحساب الباقي بعد قسمة رقم على رقم آخر.

يتشابه معظم المشغلين مع العامل المعتاد المستخدم في الرياضيات.

دعونا نفهم العوامل بمساعدة مثالين.

مثال 1:

النظر في الكود أدناه.

int b;  
void setup ( )  
{  
Serial.begin( 9600 );  
}  
void loop ( )  
{  
b = 5 + 2;  
Serial.println(b);   
}  

في الكود أعلاه قمنا بتعيين نتيجة إضافة رقمين إلى b قبل طباعتها على وحدة التحكم.

للإخراج انقر فوق الزر تحميل و Serial Monitor الموجود على شريط الأدوات.

الإخراج:

7

المثال 2:

ضع في اعتبارك الكود أدناه:

int d;  
void setup ( )  
{  
Serial.begin( 9600 );  
}  
void loop ( )  
{  
d = 5 - 2;  
Serial.println(d);   
d = d + 3;  
Serial.println(d);  
}  

هنا d = d +3 لا تعمل كعملية حسابية معتادة. إنه عامل الإسناد حيث يتم تقييم يمين الوظيفة أولاً ويتم تعيينه إلى يسار علامة التساوي.

دعونا ننظر في الصورة أدناه لفهم أفضل.

أساسیات برمجة Arduino | عوامل التشغیل في Arduino

انتاج:

3
6

وبالمثل يمكننا إجراء الضرب والنمط والقسمة. المتغير int سيخزن قيم الأعداد الصحيحة. على سبيل المثال 20/3 = 6.

إذا أردنا طباعة القيم العشرية فنحن بحاجة إلى استخدام عدد عشري بدلاً من int.

علي سبيل المثال ضع في اعتبارك الكود أدناه:

int b;  
void setup ( )  
{  
Serial.begin( 9600 );  
}  
void loop ( )  
{  
b = 20.0 / 3; //  decimal value is used to force the compiler to print decimal value.  
Serial.println(b);   
}  

المخرجات:

6.66

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

دعونا نفهم ترتيب العمليات التي يأخذها Arduino في الاعتبار أثناء إجراء الحساب:

  • أقواس ()
  • الضرب والقسمة وmodulo
  • جمع وطرح

إذا كانت هناك عمليات متعددة بجانب بعضها البعض فسيتم حسابها من اليسار إلى اليمين.

دعونا نفهم بمثال.

ضع في اعتبارك الكود أدناه:

int c;  
void setup ( )  
{  
Serial.begin( 9600 );  
}  
void loop ( )  
{  
c = 2 * 3 / (2 + 1)  + 4;  
Serial.println(c);   
}  

انتاج:

6

دعونا نفهم كيف حدث الناتج أعلاه. انظر إلى الصورة أدناه:

أساسیات برمجة Arduino | عوامل التشغیل في Arduino

العوامل المركبة (Compound Operators)

تقوم العوامل المركبة بإجراء عمليتين حسابيتين أو أكثر في وقت واحد.

يتم تعيين نتيجة المعامل الأيمن إلى المعامل الأيسر كما تمت مناقشته أعلاه. سيتم تطبيق نفس الشرط على جميع العوامل المركبة المدرجة أدناه:

لنفكر في المتغير b.

+ + b

هنا b = b + 1. يطلق عليه عامل الزيادة.

= + b

على سبيل المثال b + = 4. وهذا يعني b = b + 4.

– – b

هنا b = b – 1. يطلق عليه عامل التناقص.

= – b

على سبيل المثال b – = 3. وهذا يعني b = b – 3.

=* b

على سبيل المثال b * = 6. وهذا يعني b = b * 6.

=/ b

على سبيل المثال b / = 5. وهذا يعني b = b / 5.

=٪ b

على سبيل المثال b٪= 2. وهذا يعني b=b٪2.

الآن دعنا نستخدم العوامل المذكورة أعلاه مع متغيرين b و c.

b + = c ( b = b + c)
b - = c ( b = b - c)
b * = c ( b = b * c)
b / = c ( b = b / c)
b % = c ( b = b % c)

يمكننا تحديد أي متغير بدلاً من b و c.

العوامل المنطقية (Boolean Operator)

العوامل المنطقية NOT (!) ، المنطقية AND (& &)  والمنطقية OR (| |).

دعونا نناقش العوامل المذكورة أعلاه بالتفصيل.

المنطقية AND (& &)

تكون نتيجة الشرط صحيحة إذا كان كلا المعاملين في الشرط صحيحين.

ضع في اعتبارك المثال أدناه:

if ( a = = b & & b = = c )  

البيان أعلاه صحيح إذا كان كلا الشرطين صحيحين. إذا كان أي من الشروط خاطئًا فسيكون البيان خاطئًا.

المنطقية OR (||)

تكون نتيجة الشرط صحيحة إذا كان أي من المتغيرات في الشرط صحيحًا.

النظر في المثال أدناه.

if ( a > 0 | | b  > 0 )  

البيان أعلاه صحيح إذا كان أي من الشرطين أعلاه (a> 0 or b > 0) صحيحًا.

NOT ( ! )

يتم استخدامه لعكس الحالة المنطقية للمعامل.

على سبيل المثال a ! = 2.

يُرجع عامل التشغيل NOT القيمة 1 أو TRUE عندما يكون المعامل المحدد FALSE. كما أنه يعكس قيمة التعبير المحدد.

عوامل المقارنة (Comparison Operators)

تُستخدم عوامل المقارنة لمقارنة قيمة متغير واحد مع الآخر.

عوامل المقارنة مذكورة أدناه:

أقل من (<)

يتحقق عامل التشغيل أقل من أن قيمة المعامل الأيسر أقل من المعامل الأيمن. البيان صحيح إذا تم استيفاء الشرط.

النظر في الكود أدناه.

int b;  
int c ;  
void setup ( )  
{  
Serial.begin( 9600 );  
}  
void loop ( )  
{  
b = 3;  
c = 5;  
if ( b < 4 )  
Serial.println(b);   
if ( c < 4)  
Serial.println( c);  
}  

الإخراج: 3

في الكود أعلاه إذا كان أي من العبارتين صحيحً، فستتم طباعة القيمة المقابلة للمتغير. هنا الشرط الأول فقط هو الصحيح. ومن ثم ستتم طباعة قيمة b.

أكبر من (>)

يتحقق العامل أقل من أن قيمة الجانب الأيسر من العبارة أكبر من الجانب الأيمن. البيان صحيح إذا تم استيفاء الشرط.

على سبيل المثال a > b.

إذا كان a أكبر من b يكون الشرط صحيحًا وإلا خطأ.

يساوي (= =)

يتحقق من قيمة معاملين. إذا كانت القيم متساوية يتم استيفاء الشرط.

على سبيل المثال a = = b.

يتم استخدام العبارة أعلاه للتحقق مما إذا كانت قيمة a تساوي b أم لا.

لا يساوي (! =)

يتحقق من قيمة متغيرين محددين. إذا كانت القيم غير متساوية فسيكون الشرط صحيحًا ومُرضيًا.

على سبيل المثال a! = b.

أصغر من أو يساوي (<=)

يتحقق عامل التشغيل أصغر أو يساوي من أن قيمة الجانب الأيسر من العبارة أقل أو تساوي القيمة الموجودة على الجانب الأيمن. البيان صحيح إذا تم استيفاء أي من الشرطين.

على سبيل المثال a <= b

يتحقق من قيمة a أصغر أو يساوي b.

أكبر من أو يساوي (> =)

يتحقق عامل التشغيل أكبر أو يساوي من أن قيمة الجانب الأيسر من العبارة أكبر أو تساوي القيمة الموجودة على الجانب الأيمن من العبارة. البيان صحيح إذا تم استيفاء الشرط.

على سبيل المثال a > = b

يتحقق من قيمة a أكبر أو تساوي b. إذا تم استيفاء أي من الشرطين فإن العبارة صحيحة.

ما هي المصفوفات (Arrays)؟

يتم تعريف المصفوفات على أنها هياكل البيانات التي تسمح بتجميع قيم متعددة معًا بطريقة بسيطة. هذه طريقة وصول سهلة.

عادةً ما يتم إنشاء المصفوفة من أنواع البيانات مثل الأعداد الصحيحة والحقيقية والأحرف والمنطقية. يشير إلى قائمة مسماة لعدد محدد (n) لعناصر البيانات المماثلة.

عادةً ما تمثل مجموعة الأرقام المتتالية العناصر في المصفوفة وهي 0، 1، 2، 3، 4، 5، 6، ……. n.

على سبيل المثال إذا كان اسم مصفوفة مكونة من 5 عناصر هو AR فسيتم الإشارة إلى العناصر كما هو موضح أدناه:

AR[0], AR[1], AR[2], AR[3], and AR[4]    

المصفوفات في اردوينو

يتم التصريح عن المصفوفة في Arduino بنوع بيانات العدد الصحيح.

یقام بتعريفه أيضًا على أنه مجموعة من المتغيرات والتي يتم الحصول عليها برقم فهرس.

يتم تمثيل المصفوفة على النحو التالي:

أساسیات برمجة Arduino | المصفوفات في Arduino

يمكننا تحديد أي اسم حسب اختيارنا. اسم المصفوفة هو الاسم الفردي للعنصر.

إعلان المصفوفة (Array Declaration)

هناك طرق مختلفة للإعلان عن مصفوفة في Arduino وهي مذكورة أدناه:

يمكننا التصريح عن المصفوفة دون تحديد الحجم.

علي سبيل المثال:

int myarray[ ] = { 1, 4, 6, 7 } ;  

يمكننا التصريح عن المصفوفة بدون تهيئة عناصرها. علي سبيل المثال:

int myarray[ 5];  

يمكننا تعريف المصفوفة عن طريق تهيئة الحجم والعناصر.

int myarray[ 8] = { 1, 4, 7, 9, 3, 2 , 4};  

ميزات Array

يمكن أن تكون عناصر المصفوفة أحرفًا وأرقامًا سالبة وما إلى ذلك.

علي سبيل المثال:

int myarray[ 4 ] = { 1, -3, 4};  
char myarray[ 6] =  " Hi " ;  

يجب ألا يقل حجم المصفوفة عن عدد العناصر. علي سبيل المثال:

int myarray[5 ] = { 1, 4, 6, 7 } ;

يمكن كتابتها كـ

int myarray[8 ] = { 1, 4, 6, 7 } ;

لكن لا يمكن كتابتها كـ

int myarray[ 2] = { 1, 4, 6, 7 } ;

دعونا نفهم بمثال.

ضع في اعتبارك الكود أدناه في Arduino IDE.

دعنا نحدد المصفوفة على النحو التالي:

int myarray[5 ] = { 1, 4, 6, 7 } ;

سيتم ترجمة الكود بنجاح كما هو موضح أدناه:

الآن إذا حددنا المصفوفة على النحو التالي:

nt myarray[ 2] = { 1, 4, 6, 7 } ;

سيعرض الرمز أخطاء كما هو موضح أدناه:

يجب أن يكون إجمالي العناصر أثناء تحديد نوع الحرف (n – 1)  حيث يمثل n حجم المصفوفة. وذلك لأن عنصرًا واحدًا مطلوبًا للاحتفاظ بالحرف الفارغ في المصفوفة.

علي سبيل المثال دعنا نحدد المصفوفة كـ

char abc[8 ] = " Arduino";

الوصول إلى عناصر المصفوفة في Arduino

المصفوفة في Arduino بها مؤشر صفري. هذا يعني أن العنصر الأول من المصفوفة تمت فهرسته على أنه 0. على سبيل المثال:

myvalue[0] = = 1, myvalue[1] = = 2, . . . .   

مثال 1:

لنأخذ مصفوفة  (ARarduino) من 6 عناصر. عناصر المصفوفة موضحة أدناه:

ARarduino [0] ، ARarduino [1] ، ARarduino [2] ، ARarduino [3] ، ARarduino [4] ، و ARarduino [5].

العنصر الأخير في المصفوفة هو ARarduino [5].

سيكون العنصر الأخير في المصفوفة هو n-1 حيث يمثل n الحجم المعلن للصفيف.

النظر في الكود أدناه.

ARarduino[6] = { 1, 4, 7, 6, 11, 15};  
// ARarduino[4] contains value 11  
// ARarduino[5] contains value 15  
//ARarduino[6] is invalid  

العمليات الحسابية على المصفوفة

دعونا نفهم العمليات التي تتم على المصفوفة.

مثال 1: المجموع

يمكننا أيضًا حساب مجموع العناصر داخل المصفوفة.

لنفكر في مصفوفة  (AR) تحتوي على 4 عناصر. العناصر هي: AR [0]  وAR [1]  وAR [2]  وAR [3].

لحساب مجموع أول عنصرين:

Serial.print( AR[0] + AR[1] );  

ستتم طباعة مجموع القيم المخصصة للعناصر داخل المصفوفة.

مثال 2: القسمة

سنقسم القيمة المخصصة للعنصر AR [4]  على 2. وسيتم تخصيص القيمة الناتجة للمتغير z””. ضع في اعتبارك الكود أدناه:

z = AR[4]  / 2;  
Serial.println ( x );  

ستتم طباعة النتيجة.

نحن بحاجة إلى توخي الحذر أثناء إسناد قيمة للمصفوفة. قد ينتج عن رقم الفهرس الأكبر من حجم المصفوفة بيانات غير صالحة. يتم حفظ هذه البيانات في مواقع ذاكرة عشوائية مما قد يتسبب في حدوث خلل في البرنامج أو يصعب العثور عليه.

ملاحظة: لا يتحقق C ++  من الحجم الملزم قانونًا للمصفوفة المصرح عنها بينما یفعنلها JAVA و BASIC.

يتم تحديد بناء الجملة لتعيين قيمة إلى مصفوفة على النحو التالي:

myArray[0] = 5;   
// we can assign any value depending on the requirements.  

حلقة المصفوفات (Loop Arrays)

يمكننا أيضًا استخدام المصفوفات داخل الحلقة. لكل عنصر من عناصر المصفوفة يعمل عداد الحلقة كعنصر فهرس لتلك المصفوفة.

دعونا نفهم بمثال.

في هذا المثال ستتم طباعة العنصر الموجود فوق المنفذ التسلسلي.

وفيما يلي التعليمات البرمجية:

for (byte i = 0; i < 6; i = i + +)  // here, i++ can also be written as i+1  
 {  
  Serial.println(myArray[i]);  
}  

أمثلة التعليمات البرمجية

دعونا نفهم المصفوفات ببعض الأمثلة.

مثال 1: طباعة مجموع كل العناصر

ضع في اعتبارك الكود أدناه:

onst int sizeOFarray = 5; // constant variable indicating size of array  
int b[sizeOFarray] = {10, 20, 30, 40, 50}; // five values initialized to five elements of an array  
int sum = 0;  
  
void setup ()   
{  
Serial.begin(9600);  
}  
void loop ()   
{  
   // sum of array b  
   for ( int i = 0; i < sizeOFarray; i++ )  
      sum += b[ i ];  // here, sum = sum + b[i]  
   Serial.print('Sum of total elements of an array:') ;  
   Serial.print(sum) ;  // It will print the sum of all elements of an array  
}  

انتاج |

Sum of total elements of an array: 150

في الكود أعلاه استخدمنا متغير const. يحتفظ المترجم بالذاكرة في Arduino. نحتاج إلى استخدام عدد صحيح ثابت أكبر من صفر.

مثال 2: متوسط عناصر المصفوفة

ضع في اعتبارك الكود أدناه:

const int sizeOFarray = 5; // constant variable indicating size of array  
int b[sizeOFarray] = {10, 30, 40, 55, 65}; // five values initialized to five elements of an array  
int sum = 0;  
int average = 0;  
  
void setup ()   
{  
Serial.begin(9600);  
}  
void loop () {  
   // sum of array b  
   for ( int i = 0; i < sizeOFarray; i++ )  
      sum += b[ i ];  // here, sum = sum + b[i]  
      average = sum/5;  
   Serial.print('Average of the elements of the array:') ;  
   Serial.println(average) ;  // It will print the average of all elements of an array  
   // there are 5 elements. So, the average will be divided by 5.  
}  

انتاج |

Average of the elements of the array: 
40

المصادر

الأول
الثاني

منشور ذات صلة
السيارات ذاتية القيادة 6 Minutes

كيف تعمل السيارات ذاتية القيادة؟

جاسم ناظري

أول ما تحتاجه السيارة هو القدرة على اكتشاف موقعها في العالم. للقيام بذلك تحتاج السيارات ذاتية القيادة إلى HDMap يتضمن الكثير من البيانات حول الطريق والمناطق المحيطة.

Arduino 14 Minutes

أساسيات Arduino | تحميل، تثبيت وميزات

جاسم ناظري

بفضل تجربة المستخدم البسيطة التي يمكن الوصول إليها تم استخدام Arduino في آلاف المشاريع والتطبيقات المختلفة. برنامج Arduino سهل الاستخدام للمبتدئين ولكنه مرن بدرجة كافية للمستخدمين المتقدمين.

سلسلة دروس: برمجة Arduino

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

السلة