بسم الله الرحمن الرحيم
الموضوع السادس : استخدام شاشة عرض البيانات 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
فيمكن استخدامه فى العديد من الأمور المتتقدمة والتى سنشرحها فى المستوى المتقدم
مع انتهاء هذا الدرس نكون قد اخذنا المختصر المفيد لكيفية التعامل مع السيريال مونيتر و عرض البيانات وإرسالها بطرق عديدة
الحمد لله رب العالمين
لا يوجد تعليقات
أضف تعليق