شِفر (کود) جستجو

درس ۱۴/۳۱-۵: مثال ۲ تابع map() در آردوینو

درس ۱۴/۳۱-۵: مثال ۲ تابع map() در آردوینو

این آموزش نحوه استفاده از تابع map() آردوینو را برای کنترل روشنایی یک LED با استفاده از مقدار درصد (۰ تا ۱۰۰٪) به جای محدوده خام ۰ تا ۲۵۵ مورد نیاز analogWrite() نشان می‌دهد. این یک تکنیک اساسی است که شِفر (کود) شما را ساده‌تر و بسیار شهودی‌تر می‌کند، زیرا می‌توانید بر حسب درصد فکر کنید نه مقادیر دلخواه بایت.

ماشین سان‌فاندر مونتاژ شده

این مهارت برای هر پروژه‌ای که نیاز به مقیاس‌بندی خوانش سنسورها یا سیگنال‌های کنترلی دارید ضروری است. به عنوان مثال، می‌توانید از آن برای موارد زیر استفاده کنید:

  • کنترل روشنایی یک LED یا سرعت یک موتور بر اساس خوانش پتانسیومتر.
  • تبدیل خروجی حساس(حس کننده) دما (مثلاً ۰ تا ۱۰۲۳) به محدوده سلسیوس یا فارنهایت.
  • نگاشت ورودی آنالوگ جوی‌استیک برای کنترل موقعیت یک سروو موتور.
  • ایجاد یک رابط کاربری ساده که در آن از مقدار درصد برای تنظیم سطح توان یک دستگاه استفاده می‌شود.

در پایان این درس، قادر خواهید بود شِفر (کود) تمیزتر و قابل نگهداری‌تری بنویسید که خواندن و تنظیم آن آسان‌تر باشد.

سخت‌افزار/قطعات

این پروژه از مجموعه حداقلی از قطعات استفاده می‌کند و برای مبتدیان عالی است. شما نیاز دارید:

  • یک برد آردوینو (مثلاً Uno).
  • یک LED.
  • یک مقاومت ۲۲۰ اهمی.
  • سیم‌های جامپر.
  • یک بردبورد (اختیاری اما توصیه می‌شود).

راهنمای سیم‌کشی

سیم‌کشی این پروژه بسیار ساده است، همانطور که در ویدیو نشان داده شده است (در ویدیو در دقیقه ۲۰:۴۷). LED به پایه ۳ آردوینو از طریق یک مقاومت محدودکننده جریان ۲۲۰ اهمی متصل می‌شود.

آند (پایه بلندتر) LED را از طریق مقاومت به پایه ۳ وصل کنید. کاتد (پایه کوتاه‌تر) LED را به پایه زمین (GND) روی آردوینو متصل کنید.

توضیح شِفر (کود)

این مثال بر یک تابع تعریف‌شده توسط کاربر تمرکز دارد که کنترل روشنایی LED را ساده می‌کند. شِفر (کود) حول یک تابع سفارشی به نام pwmValue() ساخته شده است که کلید شهودی‌سازی شِفر (کود) است.

بیایید بخش‌های قابل تنظیم شِفر (کود) را بررسی کنیم:

int LEDpin = 3; //تعریف پایه برای LED

این خط پایه آردوینو را که LED به آن متصل است تعریف می‌کند. می‌توانید عدد 3 را به هر پایه دیگری که قابلیت PWM روی برد آردوینو شما دارد تغییر دهید.

هسته پروژه تابع سفارشی pwmValue() است. این تابع یک مقدار درصد را به عنوان ورودی می‌گیرد و آن را به محدوده ۰ تا ۲۵۵ که توسط 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 را برمی‌گرداند که معادل ۶۰٪ از ۲۵۵ است. تابع همچنین شامل یک بررسی ایمنی است تا اطمینان حاصل شود درصد ورودی بین ۰ و ۱۰۰ است و در صورت خارج بودن از این محدوده، مقدار ۰ را برمی‌گرداند.

در تابع setup()، می‌توانید نحوه استفاده از این را ببینید:

int b=5;//روشنایی ۶۰٪
Serial.println( pwmValue(b)   );//چاپ آن در نمایشگر مسلسل
analogWrite(LEDpin, pwmValue(b));// روشن کردن LED با روشنایی ۶۰٪

در اینجا، متغیر b روی درصد روشنایی مورد نظر شما تنظیم شده است. سپس تابع pwmValue(b) هم برای چاپ مقدار نگاشت‌شده در نمایشگر مسلسل و هم برای تنظیم روشنایی LED استفاده می‌شود. برای تغییر روشنایی LED، فقط باید مقدار b را تغییر دهید. تابع map() تمام محاسبات لازم را برای شما انجام می‌دهد.

پروژه زنده/نمایش

در ویدیو، ارائه‌دهنده پروژه را با تغییر مقدار متغیر b و آپلود شِفر (کود) روی آردوینو نشان می‌دهد. وقتی b روی 60 تنظیم شود، شِفر (کود) آن را به 153 نگاشت می‌کند و LED با روشنایی ۶۰٪ روشن می‌شود. تغییر b به 90 آن را به 229 نگاشت می‌کند و LED به طور محسوسی روشن‌تر می‌شود. تنظیم آن روی 100 به 255 نگاشت می‌شود که حداکثر روشنایی است. نمایش به وضوح نشان می‌دهد که چگونه تابع map() به شما امکان می‌دهد LED را با استفاده از یک مقدار درصد شهودی کنترل کنید، در حالی که نمایشگر مسلسل مقدار دقیق ۰ تا ۲۵۵ ارسال‌شده به پایه را تأیید می‌کند (در ویدیو در دقیقه ۲۱:۲۹).

پروژه‌های مرتبط از این ویدیو

فصل‌ها

  • [۰۰:۰۰] مقدمه‌ای بر توابع Millis و map
  • [۰۱:۱۹] Millis چیست و چرا از آن استفاده کنیم
  • [۰۵:۴۶] استفاده از Millis با یک رویداد برای انجام اقدام
  • [۰۸:۳۵] مثال ۲ Millis با یک دکمه فشاری
  • [۱۲:۱۴] مثال ۳ Millis بررسی دو بار فشار دادن دکمه
  • [۱۷:۲۰] مقدمه‌ای بر تابع map()
  • [۱۹:۴۷] مثال شِفر (کود) برای نگاشت درصد به روشنایی LED
  • [۲۰:۴۷] نمایش زنده تابع map()
  • [۲۲:۴۱] ایجاد یک تابع سفارشی برای مدیریت نگاشت

تصاویر

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
 

مواردی که ممکن است به آن‌ها نیاز داشته باشید

فایل‌ها📁

راهنمای کاربر