استفاده از تابع ریاضی در کدنویسی میکروکنترلرها سرعت روند اجرای پروژهها را افزایش میدهد. یکی از این توابع ریاضی map است که در میکروپایتون هم میتوان از آن به راحتی استفاده کرد. تا به حال چند آموزش مقدماتی و مهم برنامه نویسی میکروپایتون با برد رزبری پای پیکو را منتشر کردهایم. همچنین چندین پروژه جذاب با این برد را هم پیاده سازی کردهایم. در ادامهی اهمیت یادگیری زبان میکروپایتون به بررسی تابع مپ Map میپردازیم. در ادامه آموزش تابع Map میکروپایتون با مرجع تخصصی میکروپایتون به زبان فارسی، دیجی اسپارک همراه باشید.
عملکرد تابع map میکروپایتون
تابع ریاضی map همانند علمکرد نگاشت در مبحث هندسه است. به کمک تابع map ورودی روی خروجی بسته به مقداری که تعریف میکنیم، نگاشت داده میشود و چندین خط کدنویسی را به سادگی کاهش میدهد. تابع map یکی از ابزارهای کاربردی و قدرتمند در برنامهنویسی است که امکان اعمال یک تابع به هر یک از عناصر یک مجموعه یا دنباله را میدهد. این تابع معمولا در زبانهای برنامهنویسی مختلفی وجود دارد. تابع map با استفاده از یک تابع که به عنوان ورودی به آن داده میشود، این تابع را بر روی هر یک از عناصر ورودی اجرا میکند و نتیجهی به دست آمده از هر اجرا را در یک مجموعه جدید ذخیره میکند. این مجموعه نتیجه نهایی است که محتوای آن بر اساس اعمال تابع به عناصر اولیه تشکیل میشود. استفاده از تابع map مزایای زیر را به همراه دارد.
- کد کمحجمتر و خواناتر: با استفاده از map نیاز به نوشتن حلقههای تکراری برای اعمال تابع به هر عنصر از مجموعه را ندارید و کد خود را سادهتر و قابل فهمتر میکنید.
- کد مقیاسپذیر: تابع map امکان اعمال تابع به مجموعههای بزرگتر را فراهم میکند، بدون اینکه نیاز به تغییرات زیادی در کد داشته باشید.
- عدم تغییر مجموعه اصلی: استفاده از map باعث نمیشود مجموعه اصلی تغییر کند؛ بلکه یک مجموعه جدید از نتایج به دست میآید.
الگوهای نوشتاری map برای میکروپایتون در ادامه لیست شده است.
تست برنامه map توسط پیکو
برای تست تابع ریاضی map یک برنامه مینویسیم. به این صورت که به یک ورودی ADC و یک خروجی نیاز داریم. برای اجرای map حتما بایستی در برنامه تابع map معرفی شود. روش کار به این صورت است که یک ولوم متغیر به عنوان ورودی ADC در برنامه تعریف میکنیم. یک خروجی ال ای دی هم در نظر گرفته شده است. توسط ماژول machine فراخوانی میکنیم. در پیکو پایه ADC_AVDD از SMPS 3.3 ولت با استفاده از فیلتر R-C تغذیه میشود. ADC جریان زیادی در مدار مصرف میکند تا جایی که در صورت غیرفعال بودن حسگر دما تا حدود ۱۵۰ میلی آمپر جریان کشیده و به همین دلیل جریان ماسفت برابر ۱۵۰μA*200 = ~30mV خواهد بود. با استفاده از تغییر مقاومت بین پایه VREF و پایه ۳٫۳ ولت میتواند تا حدودی ماسفت و نویز ایجاد شده را کاهش دهد. برای استفاده از پایه های ADC کافیست از پین های GP26-GP27 و GP28 استفاده کنید. کلاس ADC یک رابط برای تبدیل آنالوگ به دیجیتال فراهم میکند که ولتاژ پیوسته ای ایجاد کرده که میتوان ولتاژ را به یک مقدار از هم گسستته تبدیل کرد. روش فراخوانی کلاس به صورت زیر است. توسط دستور اول یک آبجکت ADC ساخته شده که به یک پایه نسبت داده میشود. سپس در دستور دوم مقدار خام آنالوگ از ورودی خوانده شده و این عدد دریافتی بین بازه ی ۰ تا ۶۵۵۳۵ خواهد بود.
from machine import ADC, Pin from utime import sleep pot = ADC(26) led = Pin(25, Pin.OUT)
return b1 + (s – a1) * (b2 – b1) / (a2 – a1)
سپس شرط نویسی را آغاز میکنیم. دیتا از پایه ورودی ADC خوانده شده و سپس وارد تابع map میشود.
raw = pot.read_u16() delay = map(raw, 0, 65535, 0, 1)
برای نمایش داده از print استفاده میکنیم.
print('Raw: {} '.format(raw), 'Delay {:.1f}s'.format(delay))
سپس فانکشن خروجی ال ای دی را به برای برنامه فعال میکنیم.
led.value(1) sleep(delay) led.value(0) sleep(delay) </pre>
کد کامل اعمال تابع map ریاضی در میکروپایتون به صورت زیر است.
from machine import ADC, Pin from utime import sleep pot = ADC(26) led = Pin(25, Pin.OUT) def map(s, a1, a2, b1, b2): return b1 + (s - a1) * (b2 - b1) / (a2 - a1) while True: raw = pot.read_u16() delay = map(raw, 0, 65535, 0, 1) print('Raw: {} '.format(raw), 'Delay {:.1f}s'.format(delay)) led.value(1) sleep(delay) led.value(0) sleep(delay)
عملکرد برنامه به این صورت است که توسط ولوم سرعت چشمک زدن خروجی ال ای دی را کنترل میکنیم. با چرخاندن شافت ولوم ال ای دی با delay 0.0 تا delay 1.0 ثانیه به صورت چشمک زن تغییر میکند.
اتصالات تابع Map میکروپایتون
برای پروژه تابع Map میکروپایتون از ولوم و ال ای دی استفاده میکنیم.
- پایه وسط ولوم متغیر را به پایه GP26 پیکو اتصال دهید.
- یکی از پایه های کناری را به ۳v3 اتصال دهید.
- پایه دیگری را به GND اتصال دهید.
- پایه کاتد ال ای دی را به یکی از پایه های GP اتصال دهید.
- پایه آند را به یکی از پایه های GND اتصال دهید.
وسایل مورد نیاز
چنانچه در مراحل راه اندازی برد رزبری پای پیکو Pico و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.