در یادگیری آردوینو یکی از بخش های کاربردی برای محاسبه فرمول های ریاضی در ورودی و خروجی ها استفاده از توابع ریاضی است. در ادامه چندین تابع ریاضی مهم و کاربردی در برنامه نویسی آردوینو را با هم بررسی خواهیم کرد. با مرجع تخصصی آردوینو به زیان فارسی، دیجی اسپارک همراه باشید.
تابع ریاضی ()abs
از تابع abs برای محاسبه ی قدرمطلق اعداد صحیح استفاده میشود. همانند دستورات ریاضی اگر آرگومان تابع عدد منفی باشد، در خروجی باز هم مثبت خواهد شد. همچنین اگر عد صفر یا مثبت باشد، در خروجی به ترتیب همان صفر و مثبت است.
روش فراخوانی
abs(x) X میتواند یک عدد صحیح باشد
if x = 500 then |500| = 300, or abs(500) == 500 if x = -500 then |-500| = 300, or abs(-500) == 500
x = abs(-5); Result x is 5.
int a = -5; x = abs(a); Result x is 5.
تابع ریاضی ()map
توسط تابع map یک مقدار دلخواه از یک بازه به بازه دیگر نگاشت میشود. از این تابع برای اعمال زاویه به سرو موتور استفاده شده است. فرمول تایع map به صورت زیر است.
map(value, fromLow, fromHigh, toLow, toHigh)
- From low: حد پایین رنج فعلی
- From high: حد بالا رنج فعلی
- To low: حد پایین رنج جدید
- To high: حد بالا رنج جدید
نمونه کد آردوینو map
/* Map an analog value to 8 bits (0 to 255) */ void setup() {} void loop() { int val = analogRead(0); val = map(val, 0, 1023, 0, 255); analogWrite(9, val); }
در این کد مقادیز دخیره شده در متغیر val نگاشت map شده است. مقادیر دریافتی از ورودی آنالوگ بین بازه ۰ تا ۱۰۲۳ است که برای تبدیل به داده ی دیجیتال به عدد ۰ تا ۲۵۵ نگاشت شده است.
int led=9; int hold=10; void setup() { Serial.begin(9600);} void loop(){ int value=analogRead(A5); value=map(value,0,1023,0,255); if(A5 > hold) { analogWrite(led, value); Serial.println(value); delay(10); }}
تابع ریاضی ()max
برای محاسبه ی ماکزیمم بین دو عدد از تابع ریاضی max استفاده میکنیم.
max(x, y) به ترتیب x و y دو عدد هستند که از هر نوع داده ای میتواند باشد
sensVal = max(sensVal, 20);
تابع ریاضی ()min
برای محاسبه ی مینیمم بین دو عدد از تابع ریاضی min استفاده میکنیم.
min(x, y) به ترتیب x , y دو عدد با هر نوع داده اس هستند.
sensVal = min(sensVal, 100);
تابع ریاضی ()constrain
برای محدود کردن یک عدد در یک رنج از تابع ریاضی constrain() استفاده میشود.
constrain(x, a, b) X = مقداری که قرار است محدود شود A= حد پایین رنج B= جد بالا رنج
تابع ریاضی ()asin
تابع asin برای محاسبه آرک سینوس اعداد استفاده میشود.
double asin (double arg)
تابع ریاضی ()acos
تابع acos برای محاسبه ی آرک کسینوس اعداد استفاده میشود.
double acos (double arg)
تابع ریاضی ()pow
تابع pow توان های یک مبنا را محاسبه میکند. حاصل این تابع عبارت base به توان exp است. اگر مبنا صفر باشد و یا توان منفی یا صفر باشد، تابع عمل نمیکند. اگر مبنا منفی باشد و توان exp از نوع صحیح نباشد، نتیجه ای ندارد.
double pow (double base , double exp )
نمونه کد آردوینو pow
#include <math.h> float Value = 8.85 * pow(10,-12); void setup() { Serial.begin(9600); } void loop() { Serial.println(Value,19); }
تابع ریاضی ()sq
تابع ریاضی sq مریع یک عدد را محاسبه میکند یعنی تعداد ضرب شده در خودش که به صورت زیر در برنامه تعریف میشود.
sq(x) مقدار x یک عدد است که هر نوع داده ای میتواند باشد
int input = Serial.parseInt(); // keep other operations outside the sq function int inputSquared = sq(input);
تابع ریاضی ()sqrt
تابع ریاضی sqrt جذر یک عدد مثبت را محاسبه میکند.
double sqrt (double num)
تابع ریاضی ()atan
تابع atan برای محاسبه آرک تانژانت یک عدد به کار میرود.
double atan (double arg)
تابع ریاضی ()cos
تابع cos برای محاسبه ی کسینوس یک زاویه بر حسب رادیان استفاده میشود.
double cos (double arg)
تابع ریاضی ()sin
تابع cos برای محاسبه ی سینوس یک زاویه بر حسب رادیان استفاده میشود.
double sin (double arg)
تابع ریاضی ()exp
تابع exp برای محاسبه ی توانی از e استفاده میشود.
double exp(double arg)
تابع ریاضی ()log
تابع log لگاریتم طبیعی یک عدد مثبت را محاسبه میکند.
double log (double num)
جمع بندی لیدی پای
تمام تلاشم را کرده ام تا کاربردی ترین توابع ریاضی وابسته به کدنویسی آردوینو در یک پست به صورت جامع آموزش دهم. کاربردی ترین تابع ریاضی در حال حاضر map است که برای سهولت در کدنویسی استفاده میشود. از کتابخانه ی math.h برای فراخوانی توابع ریاضی میتوانید استفاده کنید که به صورت پیش فرض در لیست کتابخانه ها قرار دارد. با نصب کتایخانه روش استفاده بسیار ساده است.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
سلام من تو برنامه نویسی آردوینو به این ارور برخوردم و هرکاری میکنم برطرف نمیشه. لطفا راهنمایی کنید
expected ‘}’ at end of input
سلام
هر تابع از برنامه نویسی بین {} است. بر روی یکی از } موس را نگه دارید تا پایان دستور را در برنامه نمایش دهد. در صورتیکه هر تابع با آکولاد باز شده و بسته نشود، این ارور را دریافت میکند. حتی پس از کامپایل هم در ارورها خطی که نیاز به } دارد را نمایش میدهد.
خیلی ممنون.
مشکلم بر طرف شد
سپاس از همراهی شما
من برنامه تشخیص اعداد اول رو می خواستم
با سلام
کاربر گرامی امکان ارسال کد متفرقه در کامنت ها فراهم نیست.
سپاس از همراهی شما
مپ map رو خیلی جدی بگیرید خیلی کاربردیه مرسی از توضیحات شما
با سلام
بله فرمول های ریاضی در حل مسائل بسیار کاربردی و جذاب است و تعدادهای خط های برنامه را هم کاهش میدهد.
برای راه اندازی سرو موتور map خیلی کاربرد داره
با سلام
از ایتکه تجربه خود را با دیگران به اشتراک میگذارید، صمیمانه سپاسگزاریم.
توضیحات کامل برای شروع
خسته نباشید
سلام
سپاس از همراهی شما کاربر گرامی
آیا در log در کدنویسی تا به حال استفاده کرده اید؟
با سلام
خیر این مورد توسط بنده تست نشده است.
استفاده از ریاضی خیلی دقت در کد رو افزایش میده
حتما تست کنید.
با سلام
کاربر گرامی از اینکه تجربه ی خود را با دیگر کاربران به اشتراک میگذارید، صمیمانه سپاسگزاریم.
با سلام
برای شافت سرو موتور استفاده از map خیلی دقیق میشه حتما تست کنید.
با سلام
کاربر گرامی سپاس از همراهی شما
از اینکه تجربه ی خود را با دیگر کاربران به اشتراک میگذارید، صمیمانه سپاسگزاریم.
واقعا ترکیب ریاضی و کد نویسی سخت تر میشه اما خیلی شیرین تر میشه
مرسی از شما برای انتشار این آموزش های خوب
با سلام
کاربر گرامی سپاس از همراهی شما
امیدوارم آموزش مفید واقع شده باشد.
با سلام
برای تغییر سرعت موتور از map هم میتوان استفاده کرد؟
با سلام
بله میتوانید سرعت را در تابع map بین بازه ۰ تا ۲۵۵ تغییر دهید.
سلام برای استفاده از map حتما باید از آنالوگ ها استفاده کرده؟
با سلام
خیر این مورد بسته به تغییرات در کد برنامه دارد. اگر بخواهید یک بازه بر روی بازه دیگر نگاشت شود از map استفاده میکتیم.
سلام
آیا میشه چندین map در برنامه برای هر خروجی تعریف کرد که مستقل از هم باشن
با سلام
بله محدودیتی برای نوشتن map وجود ندارد.
از توابع دیگه به جز map هیجوقت استفاده نکردم
با سلام
برای تمرین همین آموزش را مطالعه کنید تا در صورت نیاز بتوانید از آن استفاده کنید.
سلام آیا map تاثیری روی دقت اندازه گیری داره؟
با سلام
قطعا انتخاب بازه ی دقیق تغییر اعداد تاثیر در بهینه شدن داده ی دریافتی خواهد داشت.