تعلم لغة برمجة الاردوينو. اردوينو: أمثلة على ما يمكن القيام به. ما يمكن تغييره

13.04.2022

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

فيسوينو

Visuino عبارة عن بيئة رسومية مجانية مدعومة بوحدات التحكم الصناعية Controllino (PLCs) المتوافقة مع Arduino. فهو يجعل من الممكن إنشاء أنظمة أتمتة معقدة وحلول IoT (إنترنت الأشياء)، ويمكن القيام بذلك ببساطة عن طريق نقل الكتل المرئية وتوصيلها. تقوم بيئة البرنامج تلقائيًا بإنشاء تعليمات برمجية لوحدات التحكم الصناعية.

إذن ما الذي يجب القيام به. حدد المكونات (الوحدات) من لوحة المكونات وانقلها إلى منطقة التصميم. ثم يجب أن تكون متصلة وتكوين الخصائص. ويتم ذلك باستخدام مفتش الكائن.

تشمل مزايا Visuino مجموعة كبيرة من المكونات للرياضيات و وظائف منطقية، الماكينات، شاشات العرض، الإنترنت، الخ.

عندما تتم برمجة PLC، تطالبك البيئة الرسومية بذلك طريقة بأسعار معقولةاتصالات إلى وحدة التحكم. يمكن أن يكون هذا منفذًا تسلسليًا أو Ethernet أو Wi-Fi أو GSM.

أخيرًا، أصبح مشروعك جاهزًا: تم تسجيل جميع وحدات التحكم، وكل شيء يعمل. الآن، من خلال النقر على شعار Arduino الموجود على اللوحة العلوية، ستجبر Visuino على إنشاء أكواد لـ Arduino وفتح بيئة التطوير الخاصة به (Arduino IDE)، والتي من خلالها يمكنك بالفعل تجميع الكود وتحميله في PLC.

نصيحة.إذا كانت اللوحة المثبتة لا تتطابق مع Arduino الخاص بك، فيمكنك تغييرها باستخدام أمر Select Board.

يخدش

تم إنشاء بيئة البرمجة الرسومية هذه في عام 2003، عندما قررت مجموعة من موظفي MIT Media Lab تطوير لغة برمجة يمكن للجميع الوصول إليها. ونتيجة لذلك، وبعد مرور بعض الوقت، تم تقديم سكراتش للجمهور.

ربما الأهم من ذلك كله أنها تبدو مثل لعبة الليغو. بواسطة على الأقلالمبدأ هو نفسه: إنها بيئة موجهة للكائنات يتم فيها تجميع البرامج من أجزاء ملونة ومشرقة. يمكن نقل هذه الأجزاء وتعديلها وجعلها تتفاعل بطرق مختلفة. أساس سكراتش هو كتل من الأوامر، مثل أجهزة الاستشعار والمتغيرات والحركة والصوت والمشغلين والمظهر والقلم والتحكم وما إلى ذلك. محرر الرسوم البيانيةيجعل من الممكن رسم أي كائن. لقد مرت أقل من خمس سنوات على إنشاء برنامج سكراتش، حيث ظهر مشروع سكراتش للاردوينو (المختصر بـ S4A)، والذي يسمح ببرمجة الاردوينو PLC.

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

نصيحة.يوجد مورد خاص للمبتدئين في Scratch: https://scratch-ru.info.

اردوبلوك

عندما يتقن شخص ما برنامج Scratch بالكامل، لكنه لم يصل بعد إلى Wiring، حيث تتم برمجة اللوحات المتوافقة مع Arduino، فقد حان الوقت للتوصية بأداة ArduBlock المكتوبة بلغة Java. إنه جيد بشكل خاص لأولئك المهتمين بالروبوتات.

ما الفرق؟ الحقيقة هي أن برنامج Scratch لا يعرف كيفية وميض Arduino، فهو يتحكم فقط في PLC الخاص به عبر USB. وبالتالي، لا يمكن للاردوينو أن يعمل بمفرده، لأنه يعتمد على الكمبيوتر.

في الواقع، يعد ArduBlock مرحلة وسيطة بين برنامج Scratch المخصص للأطفال وبرنامج Visuino الاحترافي تمامًا، وإن كان بسعر معقول، لأنه، مثل الأخير، لديه القدرة على وميض وحدات التحكم المتوافقة مع Arduino.

نصيحة.لا تنس تثبيت جهاز Java على جهاز الكمبيوتر الخاص بك. لن يستغرق الأمر وقتا طويلا.

لذلك، المزيد من البيئات الرسومية - جيدة ومختلفة. نرجو أن يكون اردوينو معك.

الصورة: شركات التصنيع، pixabay.com

بعد التعرف على العناصر الأساسية للاردوينو وكذلك كتابة برنامج "Hello World!" حان الوقت للتعرف على لغة البرمجة.

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

ستكون الكثير من المعلومات الواردة هنا متوافقة مع أي دورة تدريبية لـ C/C++، مع الأخذ في الاعتبار الاختلافات في أنواع البيانات، بالإضافة إلى بعض الإرشادات المحددة المتعلقة ببرمجة منافذ الإدخال/الإخراج.

الأساسيات

بعض الأشياء الرسمية، أي تلك التي يعرفها الجميع، ولكن أحيانًا ينساها...

المواد: ABS + معدن + عدسات أكريليك. إضاءة خلفية LED...


في Arduino IDE، كما هو الحال في C/C++، يجب أن تكون على دراية بحالات الأحرف. الكلمات الرئيسية، مثل if، for يتم كتابتها دائمًا بأحرف صغيرة. تنتهي كل تعليمات بـ "؛". تخبر الفاصلة المنقوطة المترجم بالجزء الذي يجب تفسيره كتعليمات.

تُستخدم الأقواس (..) للإشارة إلى كتل البرنامج. نحن نستخدمها لتقييد الهيئات الوظيفية (انظر أدناه)، والحلقات، والعبارات الشرطية.

من الممارسات الجيدة إضافة تعليقات إلى محتوى البرنامج، مما يجعل الكود سهل الفهم. تبدأ تعليقات السطر الواحد بـ // (شرطة مائلة مزدوجة). التعليقات متعددة الأسطر تبدأ بـ /* وتنتهي ب */

إذا أردنا تضمين أي مكتبة في برنامجنا، نستخدم أمر التضمين. فيما يلي أمثلة على ربط المكتبات:

#يشمل // المكتبة القياسية #include "svoya_biblioteka.h" // المكتبة في دليل المشروع

وظائف في اردوينو

الوظيفة (الروتين الفرعي) هي جزء منفصل من البرنامج الذي ينفذ عمليات معينة. تُستخدم الوظائف لتبسيط البرنامج الرئيسي وتحسين إمكانية قراءة التعليمات البرمجية. من المفيد استخدام الوظائف حيث يمكننا استخدامها بسهولة في العديد من مشاريعنا.

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

إعلان الوظيفة

يبدو مخطط إعلان الوظيفة كما يلي:

اكتب function_name(parameter) ( // تعليمات التنفيذ (نص الوظيفة) return (/* قيمة الإرجاع*/); )

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

بعد التنفيذ، ستقوم الدالة بإرجاع قيمة النوع المعلن. إذا كانت الدالة لا تقبل أي قيمة إرجاع، فسيكون نوع البيانات "فارغًا".

function_nameيسمح بتحديدها بشكل فريد. من أجل استدعاء (تشغيل) دالة، نعطيها اسمًا.

المعلمة- معلمة استدعاء الوظيفة. المعلمات ليست مطلوبة، لكنها غالبًا ما تكون مفيدة. إذا كتبنا دالة لا تحتوي على وسائط، فإننا نترك الأقواس فارغة.

داخل الأقواس "(...)" هو النص الفعلي للوظيفة أو التعليمات التي نريد تنفيذها. سنقدم وصفًا لتعليمات محددة في مقالة منفصلة.

تنتهي جميع وظائف إرجاع القيمة ببيان إرجاع متبوعًا بالقيمة المرجعة. فقط الوظائف المعلنة بمؤشر فارغ ("باطل") لا تحتوي على عبارة إرجاع. عليك أن تعرف أن بيان الإرجاع ينهي الوظيفة بغض النظر عن الموقع.

فيما يلي بعض الأمثلة على إعلانات الوظائف.

الفراغ f1 () ( // جسم الوظيفة) —————————————— int ناقص () ( // جسم الوظيفة العودة (0)؛ ) ——————————— ——— int plus(int a, int b) (return (a+b);)

كما ترون في الأمثلة، يمكن أن يستغرق إعلان الدالة أشكال مختلفةاعتمادا على احتياجاتك.

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

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

استدعاء وظيفة

نكتب جميع الوظائف في ملف/برنامج واحد. هناك، بالطبع، حل أكثر أناقة، لكننا سنحاول وصفه في المرة القادمة.

بمجرد أن نعلن عن دالة، يمكننا استخدامها في دوال أخرى بالاسم المناسب وأي معلمات مطلوبة. فيما يلي أمثلة لاستدعاء الوظائف التي قدمناها أعلاه:

F1(); زائد(2,2); ص=زائد(1.5);

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

إذا تم الإعلان عن الدالة f1() بدون معلمات، فلا يمكن تحديد أي معلمات عند استدعائها، أي. سيكون استدعاء f1(0) غير صحيح.

تتطلب الدالة plus(int a, int b) معلمتين بالضبط، لذا فإن الاتصال بمعلمة واحدة أو ثلاث غير ممكن.

سيؤدي استدعاء y=plus(1,5) إلى تنفيذ الدالة "plus" مع المعلمتين "1" و"5" وتخزين القيمة المرجعة في المتغير "y".

وظائف الإعداد () والحلقة ().

من خلال معرفة إعلان الوظيفة واستدعاءها، يمكننا الانتقال إلى وظائف نظام الاردوينو: يثبت()و حلقة(). مطلوب Arduino IDE للإعلان عن هاتين الوظيفتين.

setup() هي وظيفة يتم استدعاؤها تلقائيًا عند تشغيل الطاقة أو الضغط على زر RESET.

كما يوحي اسمه، يتم استخدامه لتعيين القيم الأولية للمتغيرات، وإعلانات مدخلات ومخرجات النظام، والتي يتم تحديدها عادةً في المعلمات الأولية. نظرًا لخصوصيتها، لا تُرجع هذه الوظيفة قيمة ولا يتم استدعاؤها باستخدام المعلمات. إعلان وظيفة الإعداد () الصحيح أدناه:

إعداد الفراغ () (// نص الوظيفة - تهيئة النظام)

Loop () هي دالة يتم استدعاؤها في حلقة لا نهائية. هذه الوظيفة أيضًا لا تُرجع قيمة ولا يتم استدعاؤها باستخدام المعلمات. يظهر إعلان وظيفة حلقة () الصحيح أدناه:

حلقة فارغة () (// نص الوظيفة - رمز البرنامج)

كما ترى، فإن تعريف الدالة ()loop مطابق لتعريف الدالة ()setup. يكمن الاختلاف في أداء هذه الوظائف بواسطة المتحكم الدقيق.

سنقوم الآن بتحليل الكود الكاذب التالي:

إعداد الفراغ () ( on_led1 ()؛ // تشغيل led1 off_led1 ()؛ // إيقاف تشغيل led1) حلقة باطلة () ( on_led2 ()؛ // تشغيل led2 off_led2 ()؛ // إيقاف تشغيل led2)

هناك تعليمتان في الدالة setup(): الأولى تقوم بتشغيل led1 المتصل باللوحة (على سبيل المثال، الدبوس 13) والثانية تقوم بإيقاف تشغيل led1.

تحتوي وظيفة الحلقة () على تعليمات متطابقة لتشغيل وإيقاف تشغيل LED2 المتصل باللوحة (على سبيل المثال، الدبوس 12).

نتيجة لتشغيل البرنامج، سوف يومض led1 مرة واحدة، بينما سوف يضيء led2 وينطفئ طالما أن Arduino قيد التشغيل.

سيؤدي الضغط على زر RESET إلى وميض led1 مرة أخرى ووميض led2 بشكل مستمر مرة أخرى.

دعونا نلخص:

  • وظائف الإعداد () والحلقة () هي وظائف النظاموالتي يجب تحديدها في كل مشروع. حتى في الحالة التي لا نكتب فيها أي كود في إحداهما، لا يزال يتعين علينا الإعلان عن هاتين الوظيفتين؛
  • يتم تنفيذ وظيفة الإعداد () مرة واحدة، ويتم تنفيذ حلقة () بشكل مستمر؛
  • نقوم بإنشاء وظائفنا الخاصة في ملف واحد؛
  • يمكننا استدعاء وظائفنا من كل من setup() وloop() ومن وظائف أخرى؛
  • يمكن استدعاء وظائفنا باستخدام المعلمات وإرجاع قيمة؛
  • يجب إجراء استدعاء دالة وفقًا لإعلانها.

سوف تحتاج

  • - لوحة اردوينو UNO،
  • - كابل يو اس بي(يو إس بي أ - يو إس بي ب)،
  • - الكمبيوتر الشخصي،
  • - قاد،
  • - المقاوم 220 أوم،
  • - زوج من الأسلاك 5-10 سم،
  • - إن وجدت - اللوح.

تعليمات

قم بتنزيل بيئة تطوير Arduino لنظام التشغيل الخاص بك (يدعم Windows وMac OS X وLinux) على الصفحة http://arduino.cc/en/Main/Software، يمكنك تثبيته، يمكنك ذلك. يحتوي الملف الذي تم تنزيله أيضًا على برامج تشغيل للوحات Arduino.

تثبيت برنامج التشغيل. دعونا نفكر في خيار نظام التشغيل Windows. للقيام بذلك، انتظر حتى نظام التشغيلسيطالبك بتثبيت برنامج التشغيل. انخفاض. اضغط على Win + Pause، وقم بتشغيل "إدارة الأجهزة". ابحث عن قسم "المنافذ (COM وLPT)". سترى منفذًا يسمى "Arduino UNO (COMxx)". انقر بزر الماوس الأيمن عليه واختر "تحديث برنامج التشغيل". بعد ذلك، حدد موقع برنامج التشغيل الذي قمت بتنزيله للتو.

تحتوي بيئة التطوير بالفعل على العديد من الأمثلة لدراسة تشغيل اللوحة. افتح مثال "Blink": ملف > أمثلة > 01.Basics > Blink.

قم بتوجيه بيئة التطوير الخاصة بك إلى اللوحة الخاصة بك. للقيام بذلك، في قائمة الأدوات > اللوحة، حدد "Arduino UNO".

حدد المنفذ الذي تم تخصيص لوحة Arduino له. لمعرفة المنفذ الذي تتصل به اللوحة، قم بتشغيل "إدارة الأجهزة" وابحث عن قسم المنافذ (COM & LPT). سيتم الإشارة إلى المنفذ بين قوسين بعد اسم اللوحة. إذا لم تكن اللوحة مدرجة في القائمة، فجربها من جهاز الكمبيوتر الخاص بك، وبعد الانتظار بضع ثوانٍ، قم بتوصيلها مرة أخرى.

افصل اللوحة عن الكمبيوتر. قم بتجميع الدائرة كما هو موضح في الشكل. يرجى ملاحظة أنه يجب توصيل الساق القصيرة من LED بمنفذ GND، والساق الطويلة من خلال المقاوم إلى المنفذ الرقمي 13 في لوحة Arduino. يعد استخدام لوح التجارب أكثر ملاءمة، ولكن إذا لم يكن لديك واحد، فيمكنك توصيل الأسلاك عن طريق لفها معًا.
ملاحظة هامة! يحتوي الطرف الرقمي 13 بالفعل على مقاوم خاص به على اللوحة. لذلك، عند توصيل مؤشر LED باللوحة، ليس من الضروري استخدام مقاوم خارجي. عند توصيل LED بأي من أطراف Arduino الأخرى، يعد استخدام المقاوم الذي يحد من التيار أمرًا إلزاميًا!

الآن يمكنك تحميل البرنامج في ذاكرة اللوحة. قم بتوصيل اللوحة بالكمبيوتر، وانتظر بضع ثوانٍ حتى يتم تهيئة اللوحة. انقر فوق الزر "تحميل" وسيتم كتابة الرسم الخاص بك على ذاكرة لوحة Arduino. البرمجة باستخدام Arduino بديهية للغاية وليست صعبة على الإطلاق. انظر إلى الصورة - هناك شروحات صغيرة في التعليقات على البرنامج. وهذا يكفي لبدء تجربتك الأولى.

مقدمة

Freeduino/اردوينو قابل للبرمجة في لغة خاصةالبرمجة - تعتمد على C/C++، وتسمح لك باستخدام أي من وظائفها. بالمعنى الدقيق للكلمة، لا توجد لغة Arduino منفصلة، ​​تمامًا كما لا يوجد مترجم Arduino - يتم تحويل البرامج المكتوبة (مع الحد الأدنى من التغييرات) إلى برنامج في C/C++، ثم يتم تجميعها بواسطة مترجم AVR-GCC. لذلك في الواقع، يتم استخدامه المتخصصة ل المتحكمات الدقيقة AVRخيار C/C++.

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

أوافق، من المريح جدًا بدء العمل باستخدام منفذ تسلسلي بسرعة 9600 بت في الثانية، وإجراء مكالمة في سطر واحد:

Serial.begin(9600);

وعند استخدام C/C++ "المجرد"، سيتعين عليك التعامل مع الوثائق الخاصة بوحدة التحكم الدقيقة واستدعاء شيء مثل هذا:

UBRR0H = ((F_CPU / 16 + 9600 / 2) / 9600 - 1) >> 8;
UBRR0L = ((F_CPU / 16 + 9600 / 2) / 9600 - 1)؛
الهيئة الفرعية للتنفيذ (UCSR0B، RXEN0)؛
الهيئة الفرعية للتنفيذ (UCSR0B، TXEN0)؛
الهيئة الفرعية للتنفيذ(UCSR0B, RXCIE0);

فيما يلي نظرة عامة مختصرة على الوظائف والميزات الرئيسية لبرمجة Arduino. إذا لم تكن على دراية ببناء جملة لغات C/C++، فنوصيك بالرجوع إلى أي مؤلفات حول هذه المشكلة أو مصادر الإنترنت.

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

وثائق أكثر اكتمالا (في إنجليزي) معروض على الموقع الرسمي للمشروع - http://www.arduino.cc. يوجد أيضًا منتدى وروابط لمكتبات إضافية وأوصافها.

قياسًا على الوصف الموجود على الموقع الرسمي لمشروع Arduino، يشير "المنفذ" إلى جهة اتصال متحكم متصل بموصل تحت الرقم المقابل. بالإضافة إلى ذلك، يوجد منفذ اتصال تسلسلي (منفذ COM).

هيكل البرنامج

في برنامجك يجب أن تعلن عن وظيفتين رئيسيتين: setup() وloop().

يتم استدعاء وظيفة setup() مرة واحدة، بعد كل عملية تشغيل أو إعادة ضبط للوحة Freeduino. استخدمه لتهيئة المتغيرات، وتعيين أوضاع تشغيل المنافذ الرقمية، وما إلى ذلك.

تقوم الدالة ()loop بتنفيذ الأوامر الموضحة في نصها بشكل تسلسلي مرارًا وتكرارًا. أولئك. بعد اكتمال الوظيفة، سيتم استدعاؤها مرة أخرى.

دعونا نلقي نظرة على مثال بسيط:

إعداد باطل () // الإعدادات الأولية
{
beginSerial(9600); // ضبط سرعة المنفذ التسلسلي على 9600 بت في الثانية
pinMode(3, INPUT); // ضبط المنفذ الثالث لإدخال البيانات
}

// يتحقق البرنامج من المنفذ الثالث لوجود إشارة عليه ويرسل الرد إليه
// منظر رسالة نصيةإلى المنفذ التسلسلي للكمبيوتر
حلقة باطلة () // نص البرنامج
{
if (digitalRead(3) == HIGH) // شرط لاستقصاء المنفذ الثالث
serialWrite("H"); // إرسال رسالة على شكل حرف "H" إلى منفذ COM
آخر
serialWrite("L"); // أرسل رسالة على شكل حرف "L" إلى منفذ COM
تأخير (1000)؛ // تأخير 1 ثانية.
}

pinMode(port, mode);

وصف:

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

حدود:

المنفذ - رقم المنفذ الذي تريد ضبط وضعه (قيمة عددية من 0 إلى 13).

الوضع - إما الإدخال (الإدخال) أو الإخراج (الإخراج).

pinMode(13, OUTPUT); // سيكون الدبوس الثالث عشر هو الإخراج
pinMode(12, INPUT); // والثاني عشر هو الإدخال

ملحوظة:

يمكن استخدام المدخلات التناظرية كمدخلات/مخرجات رقمية عن طريق الوصول إليها باستخدام الأرقام من 14 (المدخل التناظري 0) إلى 19 (المدخل التناظري 5)

الكتابة الرقمية (المنفذ، القيمة)؛

وصف:

يضبط مستوى الجهد على مرتفع (عالي) أو منخفض (منخفض) على المنفذ المحدد.

حدود:

المنفذ: رقم المنفذ

القيمة: عالية أو منخفضة

الكتابة الرقمية (13، عالية)؛ // اضبط الدبوس 13 على الحالة "المرتفعة".

القيمة = القراءة الرقمية (المنفذ)؛

وصف:

يقرأ القيمة على المنفذ المحدد

حدود:

المنفذ: رقم المنفذ الذي تم استطلاعه

قيمة الإرجاع: تُرجع القيمة الحالية على المنفذ (مرتفع أو منخفض) من النوع int

كثافة العمليات فال؛
فال = قراءة رقمية(12); // استطلاع للدبوس الثاني عشر

ملحوظة:

إذا لم يكن هناك أي شيء متصل بمنفذ القراءة، فقد تقوم الدالة digitalRead() بإرجاع قيم عالية أو منخفضة بشكل غير منتظم.

إدخال / إخراج الإشارة التناظرية

القيمة = التناظرية القراءة (المنفذ)؛

وصف:

يقرأ قيمة من المنفذ التناظري المحدد. يحتوي Freeduino على 6 قنوات، ومحول تناظري إلى رقمي 10 بت لكل منها. وهذا يعني أن جهد الدخل من 0 إلى 5 فولت يتم تحويله إلى قيمة عددية من 0 إلى 1023. دقة القراءة هي: قيم 5 فولت/1024 = 0.004883 فولت/القيمة (4.883 مللي فولت). يستغرق الأمر حوالي 100 نانو ثانية (0.0001 درجة مئوية) لقراءة قيمة إدخال تناظرية، وبالتالي فإن الحد الأقصى لمعدل القراءة يبلغ حوالي 10000 مرة في الثانية.

حدود:

قيمة الإرجاع: إرجاع رقم صحيح في النطاق من 0 إلى 1023 للقراءة من المنفذ المحدد.

كثافة العمليات فال؛
فال = التناظرية(0); // اقرأ القيمة عند الإدخال التناظري رقم 0

ملحوظة:

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

AnalogWrite(port, value);

وصف:

إخراج قيمة تناظرية إلى المنفذ. تعمل هذه الوظيفة على: 3، 5، 6، 9، 10، و11 منافذ Freeduino الرقمية.

يمكن استخدامه لتغيير سطوع LED، والتحكم في المحرك، وما إلى ذلك. بعد استدعاء وظيفة الكتابة التناظرية، يبدأ المنفذ المقابل في العمل في وضع تعديل عرض نبضة الجهد حتى يكون هناك استدعاء آخر لوظيفة الكتابة التناظرية (أو وظائف القراءة الرقمية / الكتابة الرقمية على نفس المنفذ).

حدود:

المنفذ: عدد المدخلات التناظرية التي يتم استقصاؤها

القيمة: عدد صحيح بين 0 و255. القيمة 0 تولد 0 فولت على المنفذ المحدد؛ قيمة 255 تولد +5 فولت على المنفذ المحدد. بالنسبة للقيم التي تتراوح بين 0 و255، يبدأ المنفذ بالتناوب بسرعة بين مستويات الجهد 0 و+5 فولت - كلما ارتفعت القيمة، كلما قام المنفذ بإنشاء المستوى العالي (5 فولت) في كثير من الأحيان.

AnalogWrite(9, 128); // اضبط الطرف 9 على قيمة تعادل 2.5V

ملحوظة:

ليست هناك حاجة للاتصال بـ pinMode لضبط المنفذ لإخراج الإشارات قبل الاتصال بـanalogWrite.

تردد توليد الإشارة حوالي 490 هرتز.

الوقت = ملي ()؛

وصف:

إرجاع عدد المللي ثانية منذ تنفيذ Freeduino البرنامج الحالي. سوف يفيض العداد ويعاد ضبطه بعد حوالي 9 ساعات.

قيمة الإرجاع: تُرجع قيمة طويلة غير موقعة

وقت طويل غير موقع؛ // إعلان متغير زمني من النوع غير الموقع طويل
الوقت = ملي ()؛ // نقل عدد المللي ثانية

تأخير(time_ms);

وصف:

إيقاف البرنامج مؤقتًا لعدد محدد من المللي ثانية.

حدود:

time_ms - وقت تأخير البرنامج بالمللي ثانية

تأخير (1000)؛ // توقف مؤقتًا لمدة ثانية واحدة

تأخير ميكروثانية

تأخير ميكروثانية(time_μs);

وصف:

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

حدود:

time_μs – وقت تأخير البرنامج بالميكروثانية

تأخير ميكروثانية(500); // توقف مؤقتًا لمدة 500 ميكروثانية

PulseIn(port, value);

وصف:

يقرأ النبض (مرتفع أو منخفض) من منفذ رقمي ويعيد مدة النبض بالميكروثانية.

على سبيل المثال، إذا تم تعيين معلمة القيمة على HIGH عند استدعاء الوظيفة، فإن PulseIn() ينتظر وصول إشارة عالية إلى المنفذ. ومن لحظة وصولها، يبدأ العد التنازلي حتى استقبال مستوى إشارة منخفض في الميناء. تقوم الدالة بإرجاع طول النبضة ( مستوى عال) في ميكروثانية. يعمل بنبضات من 10 ميكروثانية إلى 3 دقائق. لاحظ أن هذه الوظيفة لن تقوم بإرجاع نتيجة حتى يتم اكتشاف النبض.

حدود:

المنفذ: رقم المنفذ الذي نقرأ منه النبض

القيمة: نوع النبض مرتفع أو منخفض

قيمة الإرجاع: تُرجع مدة النبضة بالميكروثانية (اكتب int)

مدة كثافة العمليات؛ // إعلان متغير المدة من النوع int
المدة = نبض (دبوس، عالية)؛ // قياس مدة النبض

نقل البيانات التسلسلية

يحتوي Freeduino على وحدة تحكم مدمجة لنقل البيانات التسلسلية، والتي يمكن استخدامها للتواصل بين أجهزة Freeduino/Arduino وللاتصال بالكمبيوتر. على جهاز الكمبيوتر، يتم تمثيل الاتصال المقابل بواسطة منفذ USB COM.

يتم الاتصال عبر المنافذ الرقمية 0 و1، وبالتالي لا يمكنك استخدامها للإدخال/الإخراج الرقمي إذا كنت تستخدم وظائف تسلسلية.

Serial.begin(baud_rate);

وصف:

يضبط معدل نقل معلومات منفذ COM بالبت في الثانية لنقل البيانات التسلسلية. للتواصل مع جهاز كمبيوتر، استخدم إحدى هذه السرعات القياسية: 300، 1200، 2400، 4800، 9600، 14400، 19200، 28800، 38400، 57600، أو 115200. يمكنك أيضًا تحديد سرعات أخرى عند الاتصال بوحدة تحكم دقيقة أخرى عن طريق المنافذ 0 و 1.

حدود:

baud_rate: معدل تدفق البيانات بالبت في الثانية.

Serial.begin(9600); // اضبط السرعة على 9600 بت في الثانية

المسلسل متاح

العد = Serial.available()؛

وصف:

تنتهي وحدات البايت المستلمة عبر المنفذ التسلسلي في المخزن المؤقت لوحدة التحكم الدقيقة، حيث يمكن لبرنامجك قراءتها. ترجع الدالة عدد البايتات المتراكمة في المخزن المؤقت. يمكن للمخزن المؤقت التسلسلي تخزين ما يصل إلى 128 بايت.

قيمة الإرجاع:

تُرجع قيمة int - عدد البايتات المتاحة للقراءة في المخزن المؤقت التسلسلي، أو 0 إذا لم يكن هناك شيء متاح.

إذا (Serial.available() > 0) ( // إذا كانت هناك بيانات في المخزن المؤقت
// يجب أن يكون هناك استقبال للبيانات ومعالجتها هنا
}

شار = Serial.read();

وصف:

يقرأ البايت التالي من المخزن المؤقت للمنفذ التسلسلي.

قيمة الإرجاع:

البايت الأول المتاح للبيانات الواردة من المنفذ التسلسلي، أو -1 إذا لم تكن هناك بيانات واردة.

incomingByte = Serial.read(); // قراءة البايت

وصف:

مسح المخزن المؤقت لإدخال المنفذ التسلسلي. يتم فقدان البيانات الموجودة في المخزن المؤقت، وستكون الاستدعاءات الإضافية إلى Serial.read() أو Serial.available() منطقية للبيانات المستلمة بعد استدعاء Serial.flush().

Serial.flush(); // امسح المخزن المؤقت - ابدأ في تلقي البيانات "من الصفر"

وصف:

إخراج البيانات إلى المنفذ التسلسلي.

حدود:

تحتوي الوظيفة على عدة نماذج استدعاء اعتمادًا على نوع وتنسيق بيانات الإخراج.

يطبع Serial.print(b, DEC) سلسلة ASCII - التمثيل العشري لـ b.

كثافة العمليات ب = 79؛

Serial.print(b, HEX) يطبع سلسلة ASCII - التمثيل الست عشري للرقم b.

كثافة العمليات ب = 79؛

تقوم Serial.print(b, OCT) بطباعة سلسلة ASCII - التمثيل الثماني للرقم b.

كثافة العمليات ب = 79؛
Serial.print (ب، أكتوبر)؛ // سيتم إخراج السلسلة "117" إلى المنفذ

تقوم Serial.print(b, BIN) بطباعة سلسلة ASCII - التمثيل الثنائي للرقم b.

كثافة العمليات ب = 79؛
Serial.print(b, BIN); // سيتم إخراج السلسلة "1001111" إلى المنفذ

Serial.print(b, BYTE) يطبع البايت المنخفض لـ b.

كثافة العمليات ب = 79؛
Serial.print(b, BYTE); // سيعرض الرقم 79 (بايت واحد). في الشاشة
// من المنفذ التسلسلي نحصل على الرمز "O" - إنه
// الكود هو 79

Serial.print(str) إذا كانت str عبارة عن سلسلة أو صفيف أحرف، فسيتم إرسال str إلى بايت بايت منفذ COM.

بايت شار = (79، 80، 81)؛ // صفيف من 3 بايت بقيم 79،80،81
Serial.print("هنا بايتاتنا:"); // يُخرج السطر "هنا وحدات البايت الخاصة بنا:"
Serial.print(بايت); // إخراج 3 أحرف برموز 79،80،81 -
// هذه هي الأحرف "OPQ"

Serial.print(b) إذا كان b من النوع byte أو char، فسيقوم بطباعة الرقم b نفسه إلى المنفذ.

شار ب = 79؛
Serial.print (ب)؛ // سيتم إخراج الحرف "O" إلى المنفذ

Serial.print(b) إذا كان b من النوع عدد صحيح، فسيتم طباعة التمثيل العشري لـ b إلى المنفذ.

كثافة العمليات ب = 79؛
Serial.print (ب)؛ // سيتم إخراج السلسلة "79" إلى المنفذ

وصف:

الدالة Serial.println تشبه الدالة Serial.print، ولها نفس خيارات الاتصال. والفرق الوحيد هو أنه يتم إخراج حرفين إضافيين بعد البيانات - حرف إرجاع (ASCII 13، أو "\r") وحرف السطر الجديد (ASCII 10، أو "\n").

سيُخرج المثال 1 والمثال 2 نفس الشيء إلى المنفذ:

كثافة العمليات ب = 79؛
Serial.print (ب، ديسمبر)؛ // سيتم إخراج السلسلة "79" إلى المنفذ
Serial.print("\r\n"); // سيعرض الأحرف "\r\n" - تغذية السطر
Serial.print(b, HEX); // سيتم إخراج السلسلة "4F" إلى المنفذ
Serial.print("\r\n");// سوف يطبع الأحرف "\r\n" - تغذية السطر

كثافة العمليات ب = 79؛
Serial.println (ب، ديسمبر)؛ // سيتم إخراج السلسلة "79\r\n" إلى المنفذ
Serial.println(b, HEX); // سيتم إخراج السلسلة "4F\r\n" إلى المنفذ

في شاشة المنفذ التسلسلي نحصل عليه.