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

برمجة Arduino

اردوينو Delay

هنا يحدد Arduino Delay دالة delay المستخدمة في برمجة Arduino. دعونا نناقش دالة delay بالتفصيل.

دالة delay

تعمل دالة delay على إيقاف البرنامج أو المهمة مؤقتًا لمدة محددة من الوقت. يتم تحديد الوقت داخل الأقواس المفتوحة والمغلقة بالمللي ثانية.

أين 1 ثانية = 1000 مللي ثانية

مثال 1:

delay(500)

هنا الوقت المحدد 0.5 ثانية.

يظهر أدناه:

أساسیات برمجة Arduino - دالة delay

ينتظر البرنامج لمدة محددة قبل الانتقال إلى السطر التالي من الكود. تسمح دالة delay بنوع البيانات الطويلة غير الموقعة في الكود.

يمكننا إنشاء العديد من الرسومات باستخدام التأخيرات القصيرة والطويلة حسب متطلبات المشروع. لا يقوم بتعطيل أي مقاطعات. لكن دالة delay لها بعض العيوب.

عيب استخدام delay في الرسم التخطيطي

delay يوقف الأنشطة الأخرى مثل التلاعب بالمسامير الموجودة على السبورة والحسابات الرياضية وقراءة أجهزة الاستشعار الأخرى أثناء دالة التأخير. يتجنب المبرمجون عادةً التأخير لأكثر من 10 ثوانٍ في الرسم التخطيطي.

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

مثال 1:

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

int LEDlightPin = 8;   // PIN 8 of the Arduino board initialized to the LED  
// We can specify the variable according to our choice.  
// For example, int PINonboard= 8  
void setup( )  
{  
pinMode( LEDlightPin, OUTPUT) // the digital pin on board is set as the Output.  
}  
void loop( )  
{  
digitalWrite(LEDlightPin, HIGH);  
delay(1500);  // The LED will light/ON for 1.5 seconds = 1500 milliseconds  
digitalWrite(LEDlightPin, LOW);  
delay(500); // The LED will dim/OFF for 0.5 seconds = 0.5x1000 = 500 milliseconds  
//We can modify the time duration accoordingly.  
}  

المثال 2:

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

void setup ( )  
{   
Serial.begin ( 4800); //opens the serial port and set the bits per rate to 4800  
}  
void loop ( )  
{  
Serial.print(" Welcome");  
delay(1000);     
Serial.println("to delay");  // It will print 'to delay' followed by a new line.  
delay ( 500);  // delay of 0.5 seconds between each printed line.  
}  

في الإخراج ستظهر كلمة ترحيب متبوعة بالكلمة لتأخير ثانية واحدة لاحقًا. بعد 0.5 ثانية ستتم طباعة سطر آخر.

انتاج:

Welcome to delay

Welcome to delay

.

.

.

.

ستتم طباعة الإخراج بشكل متكرر.

اردوينو بيانیة if

عبارة if هي العبارة الشرطية وهي أساس جميع أنواع لغات البرمجة.

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

وهذا يعني أنه العبارة ()if تتحقق من الشرط ثم تنفذ بيانًا أو مجموعة من العبارات.

دعونا نفهم المفهوم بمساعدة مخطط التدفق.

أساسیات برمجة Arduino

يشرح بوضوح عملية تنفيذ البيان. إذا كان الشرط خطأ فإنه يخرج من جملة if. إذا كان الشرط صحيحًا يتم تنفيذ الدالة.

يتم كتابة بيان if على النحو التالي:

if ( condition)  
{  
// include statements  
// if the condition is true  
// then performs the function or task specified inside the curly braces  
}  

هنا condition = يتضمن التعبيرات المنطقية ، التي يمكن أن تكون صحيحة أو خاطئة.

يمكننا أيضًا استخدام عامل واحد أو أكثر داخل الأقواس.

عوامل المقارنة التي يمكن استخدامها كشرط داخل الأقواس مذكورة أدناه:

a ! = b ( a not equal to b )
a < b ( a less than b )
a > b ( a greater than b )
a = = b ( a equal to b )
a < = b ( a less than or equal to b )
a > = b ( a greater than or equal to b )

أين a و b هما المتغيرات.

مثال 1:

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

int a = 6; // initiaization of values to variables a and b  
int b = 4;  
void setup()  
{  
Serial.begin(9600);   
}  
void loop()  
{  
  if (a > b )  
  {  
    Serial.println( " a is greater than b ");   
  }  
  if (b > a )  
  {  
    Serial.println( " b is greater than a ");   
  }  
}  

المخرجات:

a is greater than b

يوضح الكود تهيئة القيم للمتغيرين a و b. في هذا المثال الشرط الأول هو True. ومن ثم يتم طباعة المعلومات المقابلة.

المثال 2:

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

const int LED1 = 2;  
const int LED2 = 13;  
int x = 80 ;  
void setup ( )  
{   
Serial.begin( 9600 );  
pinMode ( LED1, OUTPUT);  
pinMode ( LED2, OUTPUT);  
}  
void loop ( )  
{   
if ( x > 100 )  
{  
digitalWrite(LED1, HIGH);  
delay (500);  
}  
if ( x < 100 )  
{  
digitalWrite(LED2, HIGH);  
delay (500);  
}  
}  
المثال من اثنين من LED.

المثال من اثنين من LED.

في المثال أعلاه قمنا بتهيئة قيمة x. بما أن قيمة x أقل من 100 فإن الشرط الثاني صحيح. ومن ثم سوف تضيء LED2.

إذا كانت قيمة x أكبر من 100 سيضيء مؤشر LED1.

وبالمثل يمكننا استخدام عبارة if وفقًا لمتطلباتنا.

اردوينو if-else و else-if

يتم استخدام else-if و else-if بعد تحديد تعليمة if. يسمح بتجميع شروط متعددة.

If else

يتضمن شرط if-else عبارة if و else البيان. يتم تنفيذ الشرط في عبارة else إذا كانت نتيجة جملة If خاطئة.

يظهر المخطط الانسيابي أدناه:

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

if (condition)  
{  
// statements  
}  
else  
{  
//statements  
}  

يمكن أن تتضمن تعليمة else عبارات if الأخرى. نتيجة لذلك يمكننا تشغيل عبارات متعددة في برنامج واحد. يظهر المخطط الانسيابي أدناه:

أساسیات برمجة Arduino

سيتم تنفيذ التعليمات واحدة تلو الأخرى حتى يتم العثور على العبارة الصحيحة. عندما يتم العثور على العبارة true فإنها ستتخطى جميع عبارات if and else الأخرى في الكود وتقوم بتشغيل كتل التعليمات البرمجية المرتبطة.

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

مثال 1:

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

int a = 5;  
int b= 6;  
void setup ( )  
{  
Serial.begin ( 9600 );  
}  
void loop ( )  
{   
if ( a > b )  
{  
Serial.println ( " a is greater " );  
}  
else  
{  
Serial.println ( " a is smaller " );  
}  
}  

في المثال أعلاه تمت تهيئة القيم للمتغيرين a و b. ستتم طباعة الرسالة المتعلقة بالحالة المرضية.

المثال 2:

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

const int LED1 = 4;  
int x = 150 ;  
void setup ( )  
{   
Serial.begin( 9600 );  
pinMode ( LED1, OUTPUT);  
}  
void loop ( )  
{   
if ( x > 100 )  
{  
digitalWrite(LED1, HIGH);  
Serial.println ( " LED1 will light +++");  
delay (500);  
}  
else  
{  
Serial.println ( "LED1 will not light");   
}  
}  

الإخراج:

LED1 will not light

إذا كانت القيمة التي تم تهيئتها لـ x أقل من 100 فستتم طباعة الرسالة “LED1 will not light” في الإخراج.

else if

يمكن استخدام عبارة else if مع أو بدون عبارة else. يمكننا تضمين عدة عبارات أخرى في البرنامج.

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

if (condition)  
{  
// statements  
}  
else if ( condition)  
{  
// statements  
// only if the first condition is false and the second is true  
}  
else  
{  
//statements  
}  

دعونا نفهم عبارة else-if بمساعدة مثال.

مثال 1:

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

int i = 2;  
int j = 3;  
void setup ( )  
{  
  Serial.begin(9600);  
}  
void loop ( )  
{  
  if ( i > j )  
  {  
    Serial.println( " I is greater ");  
  }  
  else if ( i < j )  
  {  
    Serial.println( " J is greater " );  
  }  
  else  
  {  
    Serial.println( " Both are equal " );  
  }  
}  

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

ما هو الفرق بين Else و Else If؟

يتم تنفيذ الجزء Else إذا ظهر خطأ أو كل شروط If الموجودة في الكود.

سيوقف else if تدفق البرنامج إذا أصبح هذا صحيحًا.

حلقة For في اردوينو

يتم تنفيذ العبارات الموجودة داخل الأقواس المتعرجة أسفل حلقة for بشكل متكرر وفقًا للشرط المحدد. يستخدم عداد الزيادة في الحلقة for لزيادة أو إنقاص تكرار الحلقة.

تُستخدم عبارة for بشكل شائع للمهمة أو العملية المتكررة أو للعمل على مجموعة البيانات / pins في تركيبة مع المصفوفات.

الصيغة هي:

for (initialization; condition; increment)  
{  
\\ statements  
}  

initialization: يتم تعريفه على أنه تهيئة المتغير.

condition: يتم اختبار الشرط عند كل إعدام. إذا كان الشرط صحيحًا فسيتم تنفيذ المهمة المحددة. تنتهي الحلقة فقط عندما يصبح الشرط خاطئًا.

increment: تشمل عامل الزيادة ، مثل i + + ، i – – ، i + 1 وما إلى ذلك. تتم زيادتها في كل مرة حتى يظل الشرط صحيحًا.

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

for ( i = 0 ; i < 5 ; i + +)  

البيان أعلاه سينفذ الحلقة لمدة خمس مرات. ستكون قيم i من 0 إلى 4.

إذا كان البيان:

for ( i = 0 ; i < = 5 ; i + +)  

البيان أعلاه سينفذ الحلقة ست مرات. ستكون قيم i من 0 إلى 5.

ملاحظة: إذا كنا لا نريد تنفيذ حلقة for مرارًا وتكرارًا. بعد ذلك يمكننا إدخال حلقة for في دالة void setup.

مثال 1:

طباعة رسالة اردوينو 15 مرة.

إن طباعة رسالة 15 مرة أو أكثر أمر معقد للغاية باستخدام Serial.println حيث سيصبح الرمز طويلاً للغاية.

للتغلب على هذا يفضل المبرمجون استخدام حلقة for لتنفيذ مهمة عدة مرات أثناء استخدام جملة واحدة.

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

int i;  
void setup ( )  
{  
  Serial.begin(9600);  
  for ( i = 0 ; i < 15 ; i ++ )  
  {  
   Serial.println( "Arduino");  
  }  
}  
void loop ( ) {  
}

انتاج:

المثال الثاني:

استخدام زيادة الضرب

زيادة الضرب في حلقة for ستولد تقدمًا لوغاريتميًا.

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

int x;  
void setup ( )  
{  
  Serial.begin(9600);  
  for (x = 2; x < 100; x = x * 2)   
  {  
  Serial.println(x);  
  }  
}  
void loop ( ) {  
}  

انتاج:

يمكننا أيضًا الإعلان عن نوع البيانات int مباشرة في حلقة for.

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

for (int x = 2; x < 100; x = x * 2)   

مثال 3: تلاشى LED

هنا التلاشى و LED يعني أن LED سوف يضعف ببطء.

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

const int pinPWM = 11; // here, we have initialized the PWM pin.  
void setup ( )  
{  
  Serial.begin(9600);  
}  
void loop ( )  
 {  
  int x = 1;  
  for (int i = 0; i > -1; i = i + x)  
 {  
    analogWrite(pinPWM, i);  
    if (i == 255)  
 {  
      x = -1;  // It will switch the direction at peak  
    }  
    delay(10); // It is delay time of 10 milliseconds  
    // the lesser the time, the more fading effect can be seen clearly  
  }  
}  

بالنسبة للاتصال سنقوم بتوصيل الطرف الموجب لمصباح LED المتسلسل بالمقاوم بـ PIN 11  (pin PWM) والطرف السالب لمصباح LED بـ GND.

ملحوظة: حلقات for في لغة البرمجة C ++  أكثر مرونة من الأنواع الأخرى من لغات البرمجة.

المثال 4:

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

void setup ( )  
{  
  int i;  
  Serial.begin(9600);  
  for (i = 0; i < 4; i = i + 1)  
  {  
    Serial.println( "Hello Arduino" );  
  }  
  Serial.println( " DONE");  
}  
void loop ( )   
{   
}  

الكود أعلاه سيطبع Hello Arduino”” أربع مرات. بعد ذلك يصبح الشرط خاطئًا يخرج التحكم من الحلقة ويتم طباعة “DONE”.

انتاج:

وبالمثل يمكننا إنشاء أي برنامج باستخدام حلقة for وفقًا لذلك.

حلقة while في اردوينو

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

لن تخرج حلقة while أبدًا حتى يتم تغيير الحالة المختبرة أو إيقافها. يتضمن الاستخدام الشائع لحلقة while في Arduino اختبار المستشعر والمعايرة (معايرة إدخال المستشعر) والزيادة المتغيرة وما إلى ذلك.

الصيغة هي:

while (condition)  
{  
// code or set of statements  
}  

condition: يحدد التعبير المنطقي الذي يحدد الشرط ليكون صوابًا أو خطأً.

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

variable = 0;  
while (variable < 100) {  
  // performs the specified task 100 times repeatedly  
  variable++ ;  // increments after every execution  
}  

سيتم تنفيذ الكود أعلاه داخل الأقواس المتعرجة في حلقة while بشكل مستمر ومتكرر طالما أن المتغير أقل من 100.

مخطط حلقة while (Flowchart)

يظهر المخطط الانسيابي أدناه:

لتغيير مسار البرنامج نحتاج إلى تغيير الشرط المحدد داخل أقواس حلقة while. هذه العملية تشبه إلى حد كبير بيان if.

دعونا نفهم مفهوم حلقة while مع مثالين.

مثال 1:

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

int a = 0;  
void setup()  
{  
  Serial.begin(9600);  
while( a < 5)  
{  
  Serial.println("Welcome to Arduino");  
  a = a + 1;  
}  
}  
  void loop()  
  {  
  }  

انتاج:

ستتم طباعة الرسالة الموجودة داخل الحلقة خمس مرات كما هو موضح أدناه:

لنلق نظرة على الكود.

توضيح: في البداية قمنا بتعريف المتغير a على أنه 0 وقمنا بتهيئة الشاشة التسلسلية كالمعتاد (تعني Serial.begin ()). تتحقق الحلقة أولاً من الشرط المحدد داخل الأقواس. في البداية a = 0. الشرط صحيح (0 <5). سيتم تنفيذ الكود الموجود داخل الأقواس المتعرجة وستتم طباعة الرسالة.

الآن تتم زيادة قيمة a  (تمت إضافة 1 إلى a) ويتم تنفيذ الحلقة مرة أخرى.

وبالمثل تظل الحالة صحيحة خمس مرات. عندما تكون a = 5 تصبح الحالة خاطئة وتخرج الحلقة وتنخفض. يتم تنفيذ الكود خارج الحلقة.

لنفكر في مثال آخر.

المثال الثاني:

الرمز مشابه للمثال أعلاه. سنضيف فقط بعض العبارات خارج الحلقة.

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

int a = 0;  
void setup()  
{  
  Serial.begin(9600);  
while( a < 5)  
{  
  Serial.println("Welcome to Arduino");  
  a = a + 1;  
}  
  Serial.println("DONE");  
  Serial.println("Welcome to the code outside the loop");  
}  
  void loop()  
  {  
  }  

انتاج:

يمكننا أن نلاحظ أنه بمجرد أن يصبح الشرط في الحلقة خاطئًا تتم طباعة الرسالة المحددة خارج الحلقة.

المصادر

الأول
الثاني
الثالث
الرا
بع

منشور ذات صلة
سلسلة دروس: برمجة Arduino

اترك تعليقاً

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

السلة