مقدمة في لغة برمجة الأردوينو

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

كيف يمكنك كتابة برامج للوحة Arduino الخاصة بك؟

يدعم Arduino ، في الأصل ، لغة نسميها لغة برمجة Arduino ، أو لغة Arduino.

هذه اللغة مبنية علىالأسلاكمنصة التطوير ، والتي بدورها تقوم علىمعالجة، وهو ما إذا لم تكن معتادًا عليهp5.jsعلى أساس. إنه تاريخ طويل من المشاريع المبنية على مشاريع أخرى ، بطريقة مفتوحة المصدر للغاية. يعتمد Arduino IDE على IDE للمعالجة و IDE السلكي الذي يبني فوقه.

عندما نعمل مع Arduino ، فإننا نستخدم Arduino IDE (بيئة التطوير المتكاملة) ، وهو برنامج متاح لجميع منصات سطح المكتب الرئيسية (macOS و Linux و Windows) ، والذي يمنحنا شيئين: محرر برمجة مع دعم مكتبات متكامل ، و طريقة لترجمة وتحميل برامج Arduino الخاصة بنا بسهولة على لوحة متصلة بالكمبيوتر.

لغة برمجة Arduino هي أساسًا إطار عمل مبني على قمة C ++. يمكنك القول إنها ليست لغة برمجة حقيقية بالمصطلح التقليدي ، لكنني أعتقد أن هذا يساعد في تجنب الارتباك للمبتدئين.

برنامج مكتوب بلغة برمجة Arduino يسمىرسم. عادة ما يتم حفظ الرسم بامتداد.inoالتمديد (من Arduino).

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

واحد يسمىsetup()، والآخر يسمىloop(). الأول يسمى مرة واحدة ، عند بدء تشغيل البرنامج ، يتم استدعاء الثاني بشكل متكرر أثناء تشغيل البرنامج.

ليس لدينا ملفmain()تعمل كما اعتدت على C / C ++ كنقطة دخول للبرنامج. بمجرد تجميع الرسم الخاص بك ، سيتأكد IDE من أن النتيجة النهائية هي برنامج C ++ صحيح وسيضيف بشكل أساسي الغراء المفقود عن طريق معالجته مسبقًا.

كل شيء آخر هو كود C ++ عادي ، وبما أن C ++ عبارة عن مجموعة شاملة من C ، فإن أي C صالح هو أيضًا كود Arduino صالح.

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

جزء من لغة برمجة Arduino هو المكتبات المدمجة التي تسمح لك بالتكامل بسهولة مع الوظائف التي توفرها لوحة Arduino.

سيتضمن برنامج Arduino الأول الخاص بك بالتأكيد تشغيل مصباح LED ثم إيقاف تشغيله. للقيام بذلك ، سوف تستخدمpinMode()وdelay()وdigitalWrite()مع بعض الثوابت مثلHIGHوLOWوOUTPUT.

مثل هذا ، مشروع Arduino الأساسي الأول ("Hello، World!"):

#define LED_PIN 13

void setup() {
    // Configure pin 13 to be a digital output
    pinMode(LED_PIN, OUTPUT);
}

void loop() { // Turn on the LED digitalWrite(LED_PIN, HIGH); // Wait 1 second (1000 milliseconds) delay(1000); // Turn off the LED digitalWrite(LED_PIN, LOW); // Wait 1 second delay(1000); }

هذا كله جزء من لغة برمجة Arduino ، أو من الأفضل أن نسميهاجناحأومكتبة.

دعم لغة أخرى

كتذكير ، أود أن أشير إلى أنك لست مقيدًا باستخدام هذه اللغة و IDE لبرمجة Arduino. توجد المشاريع ، من بين أمور أخرى ، للسماح لك بتشغيل كود Node.js عليها باستخدام امتدادجوني فايفمشروع ، باستخدام كود Pythonجرسيوانتقل إلى رمزجوبوت، لكن لغة برمجة Arduino هي بالتأكيد اللغة التي سترى معظم البرامج التعليمية بناءً عليها ، نظرًا لأنها الطريقة الأصلية والمتعارف عليها للعمل مع هذه الأجهزة.

الثوابت المضمنة في لغة برمجة الأردوينو

يضع Arduino ثابتين يمكننا استخدامهما

HIGHيعادل مستوى عالٍ من الجهد ، والذي يمكن أن يختلف اعتمادًا على الأجهزة (> 2 فولت على لوحات 3.3 فولت مثل Arduino Nano ،> 3 فولت على لوحات 5 فولت مثل Arduino Uno)LOWيساوي مستوى منخفض من الجهد. مرة أخرى ، تعتمد القيمة الدقيقة على اللوحة المستخدمة

ثم لدينا 3 ثوابت يمكننا استخدامها معpinMode()وظيفة:

  • INPUTيضبط الدبوس كدبوس إدخال
  • OUTPUTيضبط الدبوس كدبوس إخراج
  • INPUT_PULLUPيضبط الدبوس كمقاوم سحب داخلي

الثابت الآخر الذي لدينا هوLED_BUILTIN، والذي يشير إلى رقم الدبوس الموجود على اللوحة ، والذي عادةً ما يعادل الرقم13.

بالإضافة إلى ذلك ، لدينا ثوابت C / C ++trueوfalse.

ثوابت الرياضيات في اردوينو

  • M_PIثابت باي (3.14159265358979323846)
  • M_Eالثابت ه
  • M_LN10 the natural logarithm of the number 10.
  • M_LN2 the natural logarithm of the number 2.
  • M_LOG10E the logarithm of the e to base 10.
  • M_LOG2E the logarithm of the e to base 2.
  • M_SQRT2 the square root of 2.
  • NANثابت NAN (ليس رقمًا).

وظائف لغة برمجة Arduino المدمجة

في هذا القسم ، سأشير إلى الوظائف المضمنة التي توفرها لغة برمجة Arduino.

دورة حياة البرنامج

  • setup()يتم استدعاء هذه الوظيفة مرة واحدة ، عندما يبدأ البرنامج ، وعندما يتم إيقاف تشغيل Arduino وإعادة تشغيله.
  • loop()يتم استدعاء هذه الوظيفة بشكل متكرر أثناء تشغيل برنامج Arduino.

التعامل مع الإدخال / الإخراج

تساعد الوظائف التالية في التعامل مع المدخلات والمخرجات من جهاز Arduino الخاص بك.

إدخال / إخراج رقمي

  • digitalRead()يقرأ القيمة من دبوس رقمي. يقبل رقم التعريف الشخصي كمعامل ، ويعيدHIGHأوLOWمستمر.
  • digitalWrite()يكتب أHIGHأوLOWالقيمة إلى دبوس الإخراج الرقمي. يمكنك تمرير الرقم السري وHIGHأوLOWكمعلمات.
  • pinMode()يعيّن دبوسًا ليكون إدخالًا أو إخراجًا. يمكنك تمرير الرقم السري وINPUTأوOUTPUTالقيمة كمعلمات.
  • pulseIn()يقرأ نبضة رقمية منLOWإلىHIGHثم إلىLOWمرة أخرى أو منHIGHإلىLOWو لHIGHمرة أخرى على دبوس. سيتم حظر البرنامج حتى يتم اكتشاف النبض. أنت تحدد رقم التعريف الشخصي ونوع النبض الذي تريد اكتشافه (LHL أو HLH). يمكنك تحديد مهلة اختيارية للتوقف عن انتظار هذا النبض.
  • pulseInLong()هو نفسpulseIn()، باستثناء أنه يتم تنفيذه بشكل مختلف ولا يمكن استخدامه إذا تم إيقاف تشغيل المقاطعات. عادةً ما يتم إيقاف المقاطعات للحصول على نتيجة أكثر دقة.
  • shiftIn()يقرأ بايت من البيانات بت واحد في كل مرة من دبوس.
  • shiftOut()يكتب بايت من البيانات بت واحد في كل مرة إلى دبوس.
  • tone()يرسل موجة مربعة على دبوس ، تستخدم للصفارات / مكبرات الصوت لتشغيل النغمات. يمكنك تحديد الدبوس والتردد. يعمل على كل من الدبابيس الرقمية والتناظرية.
  • noTone()توقفtone()ولدت موجة على دبوس.

I / O التناظرية

  • analogRead()يقرأ القيمة من دبوس تمثيلي.
  • analogReference()يكوّن القيمة المستخدمة لنطاق الإدخال العلوي في الإدخال التناظري ، افتراضيًا 5 فولت في لوحات 5 فولت و 3.3 فولت في لوحات 3.3 فولت.
  • analogWrite()يكتب قيمة تناظرية إلى دبوس
  • analogReadResolution()يتيح لك تغيير دقة البت التناظرية الافتراضية لـanalogRead()، افتراضيًا 10 بت. يعمل فقط على أجهزة محددة (Arduino Due و Zero و MKR)
  • analogWriteResolution()يتيح لك تغيير دقة البت التناظرية الافتراضية لـanalogWrite()، افتراضيًا 10 بت. يعمل فقط على أجهزة محددة (Arduino Due و Zero و MKR)

وظائف الوقت

  • delay()يوقف البرنامج مؤقتًا لعدد من المللي ثانية المحدد كمعامل
  • delayMicroseconds()يوقف البرنامج مؤقتًا لعدد ميكروثانية محدد كمعامل
  • micros()عدد الميكروثانية منذ بدء البرنامج. يُعاد التعيين بعد 70 دقيقة تقريبًا بسبب تجاوز السعة
  • millis()عدد المللي ثانية منذ بدء البرنامج. يعاد التعيين بعد حوالي 50 يومًا بسبب تجاوز السعة

وظائف الرياضيات

  • abs()القيمة المطلقة للرقم
  • constrain()يقيد الرقم ليكون ضمن النطاقانظر الاستخدام
  • map()يعيد تعيين رقم من نطاق إلى آخر ،انظر الاستخدام
  • max()أقصى رقمين
  • min()الحد الأدنى من رقمين
  • pow()قيمة عدد مرفوع إلى أس
  • sq()مربع الرقم
  • sqrt()الجذر التربيعي لرقم
  • cos()جيب تمام الزاوية
  • sin()جيب الزاوية
  • tan()ظل الزاوية

ملحوظة: هناك المزيد من الوظائف الرياضية المضمنة إذا كنت بحاجة إليها ،موثقة هنا.

العمل مع الأحرف الأبجدية الرقمية

  • isAlpha()يتحقق مما إذا كان الحرف ألفا (حرفًا)
  • isAlphaNumeric()يتحقق مما إذا كان الحرف أبجديًا رقميًا (حرف أو رقم)
  • isAscii()يتحقق مما إذا كان الحرف هو حرف ASCII
  • isControl()يتحقق مما إذا كان الحرف هو ملفشخصية التحكم
  • isDigit()يتحقق مما إذا كان الحرف عبارة عن رقم
  • isGraph()يتحقق مما إذا كان الحرف هو حرف ASCII قابل للطباعة ، ويحتوي على محتوى (ليس مسافة ، على سبيل المثال)
  • isHexadecimalDigit()يتحقق مما إذا كان الحرف رقمًا سداسيًا عشريًا (AF 0-9)
  • isLowerCase()للتحقق مما إذا كان الحرف حرفًا صغيرًا
  • isPrintable()يتحقق مما إذا كان الحرف هو حرف ASCII قابل للطباعة
  • isPunct()للتحقق مما إذا كان الحرف عبارة عن علامة ترقيم (فاصلة ، أو فاصلة منقوطة ، أو علامة تعجب ، إلخ)
  • isSpace()يتحقق مما إذا كان الحرف عبارة عن مسافة ، نموذج موجز\f، خط جديد\n، إرجاع\r، مساحة أفقية\t، أو علامة تبويب عمودية\v.
  • isUpperCase()للتحقق مما إذا كان الحرف حرفًا كبيرًا
  • isWhitespace()للتحقق مما إذا كان الحرف هو حرف مسافة أم علامة تبويب أفقية\t

توليد أعداد عشوائية

  • random()توليد رقم شبه عشوائي
  • randomSeed()تهيئة مولد الأرقام العشوائية الزائفة برقم أولي تعسفي

في Arduino ، كما هو الحال في معظم اللغات ، من المستحيل الحصول على أرقام عشوائية حقًا ، والتسلسل هو نفسه دائمًا ، لذلك يمكنك زرعه مع الوقت الحالي أو (في حالة Arduino) يمكنكقراءة المدخلات من منفذ تناظري.

العمل مع وحدات البت والبايت

  • bit()يحسب قيمة بت (0 = 1 ، 1 = 2 ، 2 = 4 ، 3 = 8 ...)
  • bitClear()امسح (يحدد إلى 0) بت من متغير رقمي. يقبل رقمًا ، ويقبل رقم البت الذي يبدأ من اليمين
  • bitRead()اقرأ القليل من الرقم. يقبل رقمًا ، ويقبل رقم البت الذي يبدأ من اليمين
  • bitSet()يضبط على 1 بت من رقم. يقبل رقمًا ، ويقبل رقم البت الذي يبدأ من اليمين
  • bitWrite()اكتب 1 أو 0 إلى بت معين من رقم يقبل رقمًا ورقم البت الذي يبدأ من اليمين والقيمة المراد كتابتها (0 أو 1)
  • highByte()الحصول على بايت عالي الترتيب (أقصى اليسار) لمتغير كلمة (يحتوي على 2 بايت)
  • lowByte()الحصول على بايت منخفض الترتيب (أقصى اليمين) لمتغير كلمة (يحتوي على 2 بايت)

المقاطعات

  • noInterrupts()يعطل المقاطعات
  • interrupts()يعيد تمكين المقاطعات بعد أن يتم تعطيلها
  • attachInterrupt()السماح لدبوس الإدخال الرقمي بأن يكون مقاطعة. لوحات مختلفة لها دبابيس مختلفة مسموح بها ،تحقق من المستندات الرسمية.
  • detachInterrupt()تعطيل المقاطعة التي تم تمكينها باستخدامattachInterrupt()

المزيد من دروس الإلكترونيات: