كود البحث

الدرس 14/31-5: مثال 2 على دالة map() في برمجة الأردوينو

الدرس 14/31-5: مثال 2 على دالة map() في برمجة الأردوينو

يشرح هذا البرنامج التعليمي كيفية استخدام دالة map() في الأردوينو للتحكم في سطوع مصباح LED باستخدام قيمة النسبة المئوية (0–100%) بدلاً من النطاق الخام 0–255 المطلوب بواسطة analogWrite(). هذه تقنية أساسية تبسط الكود الخاص بك وتجعله أكثر بديهية، حيث يمكنك التفكير بالنسب المئوية بدلاً من القيم البايتية العشوائية.

سيارة Sunfounder مجمعة

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

  • التحكم في سطوع مصباح LED أو سرعة محرك بناءً على قراءة مقياس الجهد.
  • تحويل مخرجات مستشعر درجة الحرارة (مثل 0–1023) إلى نطاق مئوي أو فهرنهايتي.
  • ربط الإدخال التناظري لعصا التحكم للتحكم في موضع محرك سيرفو.
  • إنشاء واجهة مستخدم بسيطة حيث تُستخدم قيمة النسبة المئوية لضبط مستوى طاقة الجهاز.

بنهاية هذا الدرس، ستكون قادرًا على كتابة كود أنظف وأكثر قابلية للصيانة وأسهل في القراءة والتعديل.

المكونات/الأجهزة

يستخدم هذا المشروع مجموعة بسيطة من المكونات، مما يجعله مثاليًا للمبتدئين. ستحتاج إلى:

  • لوحة أردوينو (مثل Uno).
  • مصباح LED.
  • مقاوم 220 أوم.
  • أسلاك توصيل.
  • لوحة تجارب (اختيارية لكن موصى بها).

دليل التوصيل

التوصيل في هذا المشروع بسيط جدًا، كما هو موضح في الفيديو (في الفيديو عند 20:47). يتم توصيل مصباح LED بالدبوس 3 من الأردوينو عبر مقاوم محدد للتيار بقيمة 220 أوم.

قم بتوصيل الأنود (الطرف الأطول) لمصباح LED بالدبوس 3 عبر المقاوم. قم بتوصيل الكاثود (الطرف الأقصر) لمصباح LED بالأرضي (GND) في الأردوينو.

شرح الكود

يركز هذا المثال على دالة معرفة من قبل المستخدم تبسط التحكم في سطوع مصباح LED. تم بناء الكود حول دالة مخصصة تسمى pwmValue()، وهي المفتاح لجعل الكود بديهيًا.

دعنا نقسم الأجزاء القابلة للتكوين في الكود:

int LEDpin = 3; //تحديد الدبوس لمصباح LED

يحدد هذا السطر دبوس الأردوينو الذي يتصل به مصباح LED. يمكنك تغيير الرقم 3 إلى أي دبوس آخر يدعم PWM على لوحة الأردوينو الخاصة بك.

جوهر المشروع هو الدالة المخصصة pwmValue(). تأخذ هذه الدالة قيمة النسبة المئوية كمدخل وتحولها إلى النطاق 0–255 المستخدم بواسطة analogWrite(). هنا تقوم دالة map() بسحرها.

int pwmValue(int percent)
{
  if(percent >=0 && percent <=100)
  {
    return map(percent, 0,100,  0,255);
  }else
  {
    return 0;
  }
}

لاستخدام هذه الدالة، ببساطة قم باستدعائها مع النسبة المئوية للسطوع المطلوبة. ستعيد الدالة القيمة الصحيحة لـ analogWrite(). على سبيل المثال، pwmValue(60) سيعيد 153، وهو ما يعادل 60% من 255. تتضمن الدالة أيضًا فحص أمان لضمان أن النسبة المئوية للإدخال بين 0 و100، وتعيد 0 إذا كانت خارج هذا النطاق.

في دالة setup()، يمكنك رؤية كيفية استخدام هذا:

int b=5;//سطوع 60%
Serial.println( pwmValue(b)   );//طباعته على الشاشة التسلسلية
analogWrite(LEDpin, pwmValue(b));// تشغيل مصباح LED بسطوع 60%

هنا، يتم تعيين المتغير b إلى النسبة المئوية للسطوع المطلوبة. ثم يتم استخدام الدالة pwmValue(b) لطباعة القيمة المحولة على الشاشة التسلسلية ولضبط سطوع مصباح LED. لتغيير سطوع مصباح LED، تحتاج فقط إلى تعديل قيمة b. تتولى دالة map() جميع الحسابات اللازمة نيابة عنك.

المشروع/العرض الحي

في الفيديو، يعرض المقدم المشروع عن طريق تغيير قيمة المتغير b ورفع الكود إلى الأردوينو. عندما يتم تعيين b إلى 60، يقوم الكود بتحويله إلى 153 ويضيء مصباح LED بسطوع 60%. تغيير b إلى 90 يحوله إلى 229، مما يجعل مصباح LED أكثر سطوعًا بشكل ملحوظ. تعيينه إلى 100 يحوله إلى 255، وهو أقصى سطوع. يوضح العرض بوضوح كيف تسمح لك دالة map() بالتحكم في مصباح LED باستخدام قيمة النسبة المئوية البديهية، بينما تؤكد الشاشة التسلسلية القيمة الدقيقة 0–255 التي يتم إرسالها إلى الدبوس (في الفيديو عند 21:29).

مشاريع ذات صلة من هذا الفيديو

الفصول

  • [00:00] مقدمة إلى دوال Millis و map
  • [01:19] ما هو Millis ولماذا استخدامه
  • [05:46] استخدام Millis مع حدث لاتخاذ إجراء
  • [08:35] مثال 2 لـ Millis مع زر ضغط
  • [12:14] مثال 3 لـ Millis للتحقق من ضغطتين على الزر
  • [17:20] مقدمة إلى دالة map()
  • [19:47] مثال كود لتحويل النسبة المئوية إلى سطوع مصباح LED
  • [20:47] عرض حي لدالة map()
  • [22:41] إنشاء دالة مخصصة للتعامل مع التحويل

الصور

Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
920-Lesson 14/31-5: Arduino coding map() example 2
اللغة: C++
/*
Lesson 14/31-5: Arduino coding map( ) example-2
Get this code and watch video Download and resource page https://robojax.com/RJT597
YouTube video https://www.youtube.com/watch?v=lqgzQohNiIM
 
  
 * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been download from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */
int LEDpin = 3; //defind pin for LED
                   
 
 void setup() {
    Serial.begin(9600);//initialzie serial monitor with 9600 baud
    pinMode(LEDpin, OUTPUT);//set pin as output
    int b=5;//60% brightness

    Serial.println( pwmValue(b)   );//print it on serial monitor
    analogWrite(LEDpin, pwmValue(b));// turn the LED on with 60% brightness   
 }

 void loop() {

 
 }

/*
 * pwmValue(int percent)
 * @param precent is value between 0 to 100
 * @return it returns the mapped value from 0 to 255
 * written by Ahmad Shamshiri on Dec 9, 2022
 * 
 */
 int pwmValue(int percent)
 {
  if(percent >=0 && percent <=100)
  {
    return map(percent, 0,100,  0,255);
  }else
  {
    return 0;
  }
 } //pwmValue end
 

الموارد والمراجع

ملفات📁

دليل المستخدم