404

الصفحه التي تبحث عنها غير موجوده

الدرس السابع من تعلم الأردوينو

0
بسم الله الرحمن الرحيم
الموضوع السابع : الأوامر الأساسية مع الأرقام
يعد التعامل مع الأرقام مع الأردوينو من الأشياء المهمة جدا

اولا العمليات الأساسية :
سنقوم بعرض كيفية القيام بالعمليات الأساسية فى الأردوينو الجمع والطرح والضرب والقسمة
جميعنا يعلم كيفية عمل هذه العمليات الأساسية
الجمع
int x = 10;
int y = 10;
void setup(){
 Serial.begin(9600);
 int res = x+y;
 Serial.print(res);
}
void loop(){}
فكما تلاحظون الأاومر ليست بالمعقدة ابدا وقمنا بشرح جميعها فى الدروس السابقة
حيث قمت بعمل بتعريف متغيران
x,y
وجعل قيمة كل منهما تساوى 10
وقمت بجمعهما وعرض الناتج على شاشة السيريال مونيتور
ويمكن ايضا إستخدام طريقة اخرى لجمع واحد على الأعداد
بإستخدام
___1++;
حيث يكتب فى الأعلى اسم المتغير
وهذه العلامة تساوى
__1=__1+1;
حيث هذا الكود فى الأعلى يساوى هذا الكود
__1++;
سنقوم بعمل عداد لرقم ما بحيث نجمع على العدد واحد فى كل مره
int x = 10;
void setup(){
 Serial.begin(9600);
}
void loop(){
  x++;
  Serial.println(x);
}
حيث يقوم الكود السابق بجمع واحد على المتغير x
بحيث يصبح فى اول دورة 11
وفى ثانى دورة 12
وهكذا الى ما لا نهاية وهذه اليه جمع الأعداد بهذا الكود

ثانيا الطرح
الطرح مشابه جدا لعملية الجمع
int x = 10;
int y = 20;
void setup(){
Serial.begin(9600(;
int res = y-x;
Serial.print(res);
}
void loop(){}
حيث يقوم هذا الكود بعمل عملية الطرح المتغير y من المتغير x
بحيث نحصل على الناتج 10
ويمكننا ايضا استخدام كود مشابه لكى نقوم بطرح واحد من متغير ما
عن طريق
__1--;
بحيث هذا الكود يساوى الكود الذى فى الأسفل
__1=__1-1;
فسيقوم بطرح 1 من المتغير فى كل دورة يدور فى الكود
int x = 100;
void setup(){
 Serial.begin(9600);
}
void loop(){
 int res = x--;
 Serial.println(res);
}
حيث يقوم هذا الكود بتعريف المتغير x
وجعل قيمته تساوى 100
وطرح واحد من المتغير فى كل دورة فى الكود
ثالثا الضرب
لكى نقوم بعمل عملية الضرب نستخدم هذه العلامة *
__1=__2*__3;
حيث فى الخانة الأول نضع اسم المتغير لكى نسجل فيه قيمة العملية
نضع الخانة الثانية والخانة الثالثة معاملان الضرب
int x = 10;
int y = 10;
void setup(){
 Serial.begin(9600);
 int res = x*y;
 Serial.print(res(;
}
void loop(){}
فيقوم هذا الكود بضرب المتغير
X
فى المتغير
y
رابعا القسمة
للقيام بعملية القسمة داخل الأردوينو
__1=__2/__3;
بحيث نضع فى الخانة الأول اسم المتغير الذى سنقوم بتخزين الناتج فيه ونضع فى الخانة الثانية والثالثة معاملات القسمة

int x = 10;
int y = 10;
void setup(){
 Serial.begin(9600);
 int res = x/y;
 Serial.print(res);
}
void loop(){}

يمكن ان يسأل احد ما فائدة معرفة هذه العمليات
هذه العمليات تعتبر قاعدة اساسية فى تعلم الأردوينو فعليها يبنى الكثير وهى تعتبر الأساس فى تعلم الأردوينو واشياء مهمة لايمكن ان نتخطاها
ونتجه الان الي بعض الأوامر الأخرى
امر
random(__1,__2);
نستخدم هذا الأمر لإحضار قيمة عشوائية بين رقمين محددين
حيث نضع فى الخانة الأول القيمة الأدنى
وفى الخانة الثانية القيمة الأقصى
فمثلا عند كتابة
random (1,10);
فيمكن ان يعرض قيمة عشوائية بين 1 الى 10
فيمكن ان يعرض 9 او 8 او 7 او اى رقم اخر بشرط ان يكون بين رقمين 9 و 10
void setup(){
Serial.begin(9600);
}
void loop(){
int z = random(1,10);
Serial.println(z);
}
حيث يقوم الكود السابق بأخذ قيمة عشوائية بين الرقم 1 الى 10 وعرضها داخل السيريال مونيتور

ننتقل الى امرين مهمين جدا امر
min(__1,__2);
max(__1,__2);
حيث يقوم هذا بعرض القيم
نبدأ الأول بأمر
min(__1,__2);
وحيث يقوم بعمل مقارنة بين رقمين لإخراج القيمة الأصغير بينهما
فمثلا اذا قمنا بإستخدام هذا الأمر
int c = min(10,20);
حيث يقوم هذا الأمر بعمل مقارنة بين رقم 10 و 20
ايهما اصغر
فطبيعيا 10 اصغر من 20 فسيقوم بأخذ قيمة 10 ووضعها cداخل المتغير  
void setup(){
Serial.begin(9600);
int z = min(10,20);
Serial.println(z);
}
void loop(){}
حيث يقوم هذا الكود بعمل مقارنة بين القيمتين 10 و 20
واختيار الأصغر بينهما وجعل قيمة الأصغر فى المتغير z
ويقوم بطباعة هذا المتغير داخل شاشة السيريال مونيتور

استخدام امر
max(__1,__2);
حيث يقوم هذا الأمر بعمل مقارنة بين رقمين واخذ القيمة الأكبر بينهما
فنضع فى الخانة الأولى والخانة الثانية القيمتين التى سنقوم بعمل المقارنة بينهما
مثال
max(10,20);
فيقوم هذا الأمر بأخذ القيمة الأكبر
فأيهما اكبر 10 او 20
طبعا 20 اكبر من 10 فيقوم هذا الأمر بعمل مقارنة بين 10 و 20
وأخذ القيمة الأكبر
void setup(){
Serial.begin(9600);
int z = max(10,20);
Serial.println(z);
}
void loop(){}
فيقوم هذا الكود بعمل مقارنة بين 10 و 20 واخذ القيمة الأكبر zووضعها فى المتغير بإسم
ويقوم بطبع المتغير فى شاشة السيريال مونيتور

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


الدرس السادس من دورة تعلم الاردوينو

0
بسم الله الرحمن الرحيم
الموضوع السادس : استخدام شاشة عرض البيانات serial monitor
احيانا نريد ان نعرض بيانات من الأردوينو لعرضها على الحاسوب
ولكننا لا نعرف ماذا نستخدم
اليوم سوف نتعلم serial monitor
تعد هذه الخاصية من الأشياء التى تسهل العمل مع الأردوينو بحيث يمكننا عرض قراءة قراءة حساس من الأردوينو على شاشة حاسوبك
ايضا يمكنك عرض قيمة قراءة السويتش او اى شئ اخر
إن الأردوينو تستخدم منفذى 0 و 1 لإرسال البيانات فيجب ان تجعل هذين المنفذين فارغين عند استخدامك للسيريال مونيتور او حتى عندما تقوم برفع الكود وينصح غالبا بعدم توصيل اية منافذ على هاتين المنفذين الذان هما tx , rx
سنشرح فى المستوى المتقدم كيف تقوم بإضافة منافذ اخرى مثلها

اولا لفتح صفحة السيريال مونيتور يجب الضغط على هذه الخانة فى برنامج Arduino ide

عند الضغط عليها تظهر هذه الواجهه


كما نلاحظ توجد العديد من الخيارات

1-            Clear output : لحذف جميع القيم المعروضة
2-            Baud : وهو المسئول عن تحديد سرعة التواصل بين الأردوينو والجهاز وتوجد قيم عديدة وهى :
300
1200
2400
4800
9600
19200
38400
74880
115200
وهناك العديد من القيم الأخرى لكن غالبا ما تكون القيمة الإفتراضية 9600
3-            Show timestamp : لعرض الوقت الذى تم إرسال فيه هذه البيانات
ولكى نقوم بفتح صفحة السيريال مونيتور على التينكر كاد بهذه 
الطريقة






والأن ننتقل الى الكود وكيفية كتابته توجد اكواد عدية فى إستخدام السيريال مونيتور
اولا لكى نخبر الأردوينو بأننا سوف نستخدم السيريال مونيتر
يجب اولا كما قلنا
TX and RXيجب عدم وضع اي مداخل او مخارج فى منافذ  
ثانيا نتجه الى خانة
void setup(){}
ونكتب
Serial.begin(x);
يعتبر هذا الكود هو المسئول عن التحكم بسرعة الإتصال بالأردوينو
begin()
  حيث يتم استخدام فى
                    الأكود التى تحتاج الى تحديد سرعة الإتصال ولها استخدامات اخرى سنشرحها مستقبلا
X:نكتب هنا سرعة الإتصال التى نريد استخدامها والتى تكون غالبا
9600
الأن ننتقل الى قسمين اساسيين
1-            القراءة من الأردوينو
2-            الإرسال الى الأردوينو
لكن قبل ان نبدء فى الشرح كان هناك متغير نسينا ان نشرحه فى الدرس الخاص به سنقوم بشرحه هنا
متغير
char __1 = __2;
 يعد هذا المتغير من اهم المتغيرات فى الأردوينو وانه يقبل قيمة من 0 الى 255 ويقبل حرف واحد فقط
 ASCI CODEويتعامل مع جدول
وهو جدول البيانات الشهير للمزيد من المعلومات منه اضغط هذا الرابط
ويجب وضع جميع قيمه داخل علامتى تنصيص ارقام وحروف

والأن نعود الى موضوعنا الأصلى
1-            القراءة من الأردوينو
لكى نقوم بالقراءة من الأردوينو وطباعة بيانات على شاشة السيريال مونيتور نستخدم الدالة
 print(“your text”);
فلطباعة نص او رقم يجب وضعه بين علامتين تنصيص لكن لطباعة متغير يكفى وضع اسمى المتغير فقط بدون علامتى التنصيص
تقبل هذه الدالة اكثر من اضافة لكن اشهر اثنين هما
ln
\t
  هى المسئولة عن اخذ سطر جديد لكل بيانات جديدة مرسلةlnحيث
من الأردوينو
 بين كلمتين Tabهى المسئولة عن أخذ مسافة \t حيث
وسنأخذ اكثر من مثال الأن
سنقوم بعرض قراءة سويتش
اولا التوصيل 

ثانيا الكود المستخدم
int sw = 12;

int state ;
void setup(){
 pinMode(sw,INPUT_PULLUP);
 Serial.begin(9600);
}
void loop(){
 state = digitalRead(sw);
 Serial.println("state \t:");
 Serial.println(state);
 delay(1000);
}
حيث فى هذا الكود قمت بتعريف منفذ السويتش على مقاومة رفع وقمت بتريف متغير لحفظ فيه قراءة السويتش
ثم قمت بتحديد سرعة الإتصال بين الجهاز والأردوينو
وبعد ذلك قمت بطباعة
state       :
بهذا الشكل فقمت بطباعة هذه الكلمة واضافة \t  مما يؤدى لجعل خانة tab  بين الكلمة والعلامة
بعد ذلك امرت الأردوينو بأن تطبع قيمة قراءة السويتش بكتابة اسم المتغير
وقمت بجعل الأردوينو تقوم بطبعه فى سطر جديد بإستخدام إضافة  
ln
لتجربة الكود عملى على التينكر كاد اضغط هنا
فعند القراءة نحصل على هذه البيانات



فنلاحظ عند عدم ضغط الزر تظهر القيمة بواحد
وعند الضغط على السويتش نلاحظ ان القيمة تكون صفر
كما نلاحظ فى الصورة السابقة

وننتقل الى القسم الثانى
1-            إرسال بيانات الى الأردوينو
                                                                                                                                لكى نرسل بيانات الى الأردوينو يجب التأكد اولا ان منفذ السيريال مونيتر متاح
فيجب استخدام دالة خاصة تسمي
available()
والتى منها نتأكد ان منافذ السيريال متاحة حاليا غالبا تستخدم هذه الدالة فى إرسال بيانات من الجهاز الى الأردوينو
مثال
if(Serial.available()>0){
الكود الخاص بك
}
نستخدم هذا الكود بهذه الطريقة للتأكد من ان حالة الإتصال بين الأردوينو والحاسوب اكبر من صفر لكى نبدأ فى تنفيذ كود السيريال
وهناك صيغة اخرى لكتابة الكود
While(Serial.available()==0){}
الكود

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

سنقوم الأن بإرسال بيانات الى السيريال مونيتور بعد ان تأكدنا انه متاح
سنستخدم دالة
read();
حيث هذه الدالة مخصصة لقراءة قيمة ASCI code
سنقوم الأن بعمل مثال عند إرسال قيمة S يقوم الأردوينو بتشغيل ليد
وعند ارسال قيمة Tيقوم الأردوينو بإطفاء الليد
بالنسبة للتوصيلات فهو توصيل ليد بالطريقة المعتادة مع الأردوينو

بالنسبة للكود البرمجى :
int led = 10;
void setup(){
  Serial.begin(9600);
  pinMode(led,OUTPUT);
}
void loop(){
  if(Serial.available()>0){
 char x = Serial.read();
  if(x=='s’){
   digitalWrite(led,HIGH);
  }
  if(x=='t'){
   digitalWrite(led,LOW);
      }
   }
}
لتجربة المشروع عملى على التينكر كاد اضغط هنا

فبعد ان قمت بتعريف الأمور الأساسية وتحديد سرعة الإتصال بين الحاسوب والأردوينو والتأكد من حالة السيريال

وجعلته يساوى قراءة السيريال charقمت بتعريف متغير من نوع
مونيتور
char x = Serial.read();
  char  دائما مع متغيرات من نوعSerial.read()فتتعامل
وكما قلنا ان هذا النوع من المتغيرات لايقبل قيمة اكثر من حرف
ولايقبل رقم اكبر من 255
لكن ماذا لو اردنا ان نرسل رقم اكبر الى الأردوينو
ماذا لو اردنا ارسال نص الى الأردوينو
ماذا لو اردنا ارسال قيمة عشرية الى الأردوينو
يوجد لكل نوع من هذه الأنواع داله خاصة بها

اولا ارسال رقم صحيح اكبر من 255
int x = Serial.parseInt();
تقوم هذه الدالة بأخذ رقم صحيح من السيريال مونيتر الى الأردوينو ويكون هذا الرقم اى قيمة لانه من نوع
Integer
ارسال قيمة عشرية الى الأردوينو
لكى نقوم بإرسال قيمة تتكون من كسر عشرى الى الأردوينو نستخدم هذا الأمر
float x =Serial.parseFloat();

ولكن ماذا لو اردنا ارسال نص الى الأردوينو نكتب
String x = Serial.readString
ولكن ماذا لو اردنا ارسال بيانات الى الأردوينو من دون فتح السيريال مونيتر نتجه الأن الى داله جديدة تسمى
Serial.write();
هذا الأمر يقوم بإرسال حزمة من البايتس الى الأردوينو
التى تكون فى صورة متغير يسمى
char
فيمكن استخدامه فى العديد من الأمور المتتقدمة والتى سنشرحها فى المستوى المتقدم

مع انتهاء هذا الدرس نكون قد اخذنا المختصر المفيد لكيفية التعامل مع السيريال مونيتر و عرض البيانات وإرسالها بطرق عديدة

الحمد لله رب العالمين