در یادگیری آردوینو یکی از بخش های کاربردی برای محاسبه فرمول های ریاضی در ورودی و خروجی ها استفاده از توابع ریاضی است. در ادامه چندین تابع ریاضی مهم و کاربردی در برنامه نویسی آردوینو را با هم بررسی خواهیم کرد. توابع ریاضی در برنامه نویسی آردوینو و سایر زبانهای برنامهنویسی مورد استفاده قرار میگیرند زیرا محاسبات ریاضی برای بسیاری از برنامهها ضروری است. با استفاده از توابع ریاضی، میتوانید اعداد را در انواع مختلف محاسبه کنید، اعداد را به صورت صحیح گرد کنید، بزرگترین و کوچکترین اعداد را پیدا کنید، جذر و لگاریتم را محاسبه کنید و بسیاری دیگر از عملیاتهای ریاضی را انجام دهید. استفاده از توابع ریاضی در برنامه نویسی آردوینو کد نویسی را سادهتر و کمتر زمانبر میکند و به برنامه شما کمک میکند تا بهتر و با دقت بیشتری عمل کند.با مرجع تخصصی آردوینو به زیان فارسی، دیجی اسپارک همراه باشید.
- abs(x) : بازگرداندن مقدار مطلق از x
- sqrt(x) : بازگرداندن ریشه مربع از x
- pow(x, y) : بازگرداندن x به توان y
- exp(x) : بازگرداندن e به توان x
- log(x) : بازگرداندن لگاریتم طبیعی از x
- log10(x) : بازگرداندن لگاریتم اعشاری از x
- sin(x) : بازگرداندن سینوس x (به رادیان)
- cos(x) : بازگرداندن کسینوس x (به رادیان)
- tan(x) : بازگرداندن تانژانت x (به رادیان)
- asin(x) : بازگرداندن آرک سینوس x (به رادیان)
- acos(x) : بازگرداندن آرک کسینوس x (به رادیان)
- atan(x) : بازگرداندن آرک تانژانت x (به رادیان)
- atan2(y, x) : بازگرداندن آرک تانژانت y/x (به رادیان)
- ceil(x) : بازگرداندن کوچکترین عدد صحیح بزرگتر مساوی با x
- floor(x) : بازگرداندن بزرگترین عدد صحیح کوچکتر مساوی با x
- round(x) : بازگرداندن عدد نزدیکتر به x
- min(x, y) : بازگرداندن کوچکترین مقدار بین x و y
- max(x, y) : بازگرداندن بزرگترین مقدار بین x و y
- random() : بازگرداندن یک عدد تصادفی بین ۰ و RAND_MAX
- random(min, max) : بازگرداندن یک عدد تصادفی بین min و max
- map(x, in_min, in_max, out_min, out_max) : بازگرداندن x با مقیاس برای محدوده جدید out_min تا out_max
تابع ریاضی ()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() یک تابع ریاضی است که برای تبدیل مقادیر از یک محدوده به محدوده دیگر استفاده میشود. این تابع به شما این امکان را میدهد که مقادیر را از یک دامنهی ورودی (به عنوان ورودی) به یک دامنهی خروجی (به عنوان خروجی) تبدیل کنید.
- int map(int value, int fromLow, int fromHigh, int toLow, int toHigh);
در این تعریف، پارامتر value به مقداری بین fromLow و fromHigh تبدیل میشود و مقدار حاصل، مقداری بین toLow و toHigh خواهد بود. به عنوان مثال، فرض کنید میخواهید مقدار یک متغیر از بازه مقادیر ۰ تا ۱۰۲۳ را به بازه مقادیر ۰ تا ۲۵۵ تبدیل کنید. با استفاده از تابع map، میتوانید به صورت زیر عمل کنید.
- int value = analogRead(A0); // خواندن مقدار سنسور
- int mappedValue = map(value, 0, 1023, 0, 255); // تبدیل مقدار به بازه ۰ تا ۲۵۵
در این مثال، مقدار خوانده شده از سنسور در متغیر value ذخیره شده است و سپس با استفاده از تابع map به بازه ۰ تا ۲۵۵ تبدیل میشود و در متغیر mappedValue ذخیره میشود. تعریف تابع map در آردوینو به صورت زیر است.
map(value, fromLow, fromHigh, toLow, toHigh)
- From low: حد پایین رنج فعلی
- From high: حد بالا رنج فعلی
- To low: حد پایین رنج جدید
- To high: حد بالا رنج جدید
در ادامه یک نمونه کد با دستور map در آردوینو نوشته شده است. از یک ولوم پتانسیومتر و یک سرو موتور برای تست تابع 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() برای یافتن بزرگترین عدد بین دو مقدار استفاده کنید. این تابع به شکل زیر عمل میکند:
- max(value1, value2)
value1 و value2: دو عدد که باید بزرگترین عدد بین آنها یافته شود و تابع max() مقدار بزرگترین عدد بین value1 و value2 را برمیگرداند.
int num1 = 20;
int num2 = 35;
int maximum = max(num1, num2); // بزرگترین عدد بین num1 و num2 را برمیگرداند
در این مثال، تابع max() مقدار بزرگترین عدد بین num1 (که برابر با ۲۰ است) و num2 (که برابر با ۳۵ است) را برمیگرداند و مقدار آن را در maximum ذخیره میکند. در این صورت، maximum برابر با ۳۵ خواهد بود.
max(x, y) به ترتیب x و y دو عدد هستند که از هر نوع داده ای میتواند باشد
sensVal = max(sensVal, 20);
تابع ریاضی ()min
برای محاسبه ی مینیمم بین دو عدد از تابع ریاضی min استفاده میکنیم. در آردوینو، شما میتوانید از تابع min() برای یافتن کمترین عدد بین دو مقدار استفاده کنید. این تابع به شکل زیر عمل میکند:
min(value1, value2)
min(x, y) به ترتیب x , y دو عدد با هر نوع داده اس هستند.
sensVal = min(sensVal, 100);
تابع ریاضی ()constrain
برای محدود کردن یک عدد در یک رنج از تابع ریاضی constrain() استفاده میشود. تابع constrain() در آردوینو به شما اجازه میدهد مقداری را در یک محدوده معین نگه دارید. این تابع بسیار مفید است زمانی که شما میخواهید مطمئن شوید که یک مقدار حتما در محدودهای خاص باشد. سینتکس تابع constrain() به صورت زیر است:
constrain(value, minVal, maxVal)
constrain(x, a, b) X = مقداری که قرار است محدود شود A= حد پایین رنج B= جد بالا رنج
value: مقداری که میخواهید در محدودهی minVal تا maxVal نگه دارید.
minVal: حد پایین محدوده مورد نظر.
maxVal: حد بالای محدوده مورد نظر.
تابع constrain() مقدار value را به گونهای تغییر میدهد که حتما در محدودهی minVal تا maxVal قرار بگیرد.
int inputValue = 25;
int minVal = 0;
int maxVal = 50;
- int constrainedValue = constrain(inputValue, minVal, maxVal); // مقدار ورودی را در محدوده ۰ تا ۵۰ نگه میدارد
در این مثال، تابع constrain() مقدار inputValue (که برابر با ۲۵ است) را در محدودهی minVal تا maxVal (یعنی ۰ تا ۵۰) نگه میدارد و مقدار نهایی را در constrainedValue ذخیره میکند. در این صورت، constrainedValue برابر با ۲۵ خواهد بود، چرا که inputValue در محدوده مشخص شده قرار دارد. اگر inputValue کمتر از minVal باشد، مقدار constrainedValue به minVal تنظیم میشود، و اگر inputValue بیشتر از maxVal باشد، مقدار constrainedValue به maxVal تنظیم میشود.
تابع ریاضی ()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
سلام
هر تابع از برنامه نویسی بین {} است. بر روی یکی از } موس را نگه دارید تا پایان دستور را در برنامه نمایش دهد. در صورتیکه هر تابع با آکولاد باز شده و بسته نشود، این ارور را دریافت میکند. حتی پس از کامپایل هم در ارورها خطی که نیاز به } دارد را نمایش میدهد.
خیلی ممنون.
مشکلم بر طرف شد
سپاس از همراهی شما
من برنامه تشخیص اعداد اول رو می خواستم
با سلام
کاربر گرامی امکان ارسال کد متفرقه در کامنت ها فراهم نیست.
سپاس از همراهی شما
سلام من به کمک تابع millis یک داده که زمان هست رو دریافت میکنم
حالا میخوام در لحظه مقدار این داده رو اندازه گیری کنم.
مثلا بگم اگر ۲۰ تا اضافه شد فلان کار رو بکن، توجه داشته باشید که این داده ثابت نیست و هر لحظه در حال افزایشه.
با سلام
یک متغیر برای ذخیره آخرین مقدار ثبتشده زمان (lastMillis) ایجاد کنید.
سپس در هر لحظه مقدار فعلی millis() را با مقدار قبلی مقایسه کنید.
اگر اختلاف دو مقدار بیشتر یا مساوی ۲۰ میلیثانیه بود، عملیاتی که نیاز دارید را انجام دهید و مقدار millis() فعلی را در lastMillis ذخیره کنید.
مپ map رو خیلی جدی بگیرید خیلی کاربردیه مرسی از توضیحات شما
با سلام
بله فرمول های ریاضی در حل مسائل بسیار کاربردی و جذاب است و تعدادهای خط های برنامه را هم کاهش میدهد.
برای راه اندازی سرو موتور map خیلی کاربرد داره
با سلام
از ایتکه تجربه خود را با دیگران به اشتراک میگذارید، صمیمانه سپاسگزاریم.
توضیحات کامل برای شروع
خسته نباشید
سلام
سپاس از همراهی شما کاربر گرامی
آیا در log در کدنویسی تا به حال استفاده کرده اید؟
با سلام
خیر این مورد توسط بنده تست نشده است.
استفاده از ریاضی خیلی دقت در کد رو افزایش میده
حتما تست کنید.
با سلام
کاربر گرامی از اینکه تجربه ی خود را با دیگر کاربران به اشتراک میگذارید، صمیمانه سپاسگزاریم.
با سلام
برای شافت سرو موتور استفاده از map خیلی دقیق میشه حتما تست کنید.
با سلام
کاربر گرامی سپاس از همراهی شما
از اینکه تجربه ی خود را با دیگر کاربران به اشتراک میگذارید، صمیمانه سپاسگزاریم.
واقعا ترکیب ریاضی و کد نویسی سخت تر میشه اما خیلی شیرین تر میشه
مرسی از شما برای انتشار این آموزش های خوب
با سلام
کاربر گرامی سپاس از همراهی شما
امیدوارم آموزش مفید واقع شده باشد.
با سلام
برای تغییر سرعت موتور از map هم میتوان استفاده کرد؟
با سلام
بله میتوانید سرعت را در تابع map بین بازه ۰ تا ۲۵۵ تغییر دهید.
سلام برای استفاده از map حتما باید از آنالوگ ها استفاده کرده؟
با سلام
خیر این مورد بسته به تغییرات در کد برنامه دارد. اگر بخواهید یک بازه بر روی بازه دیگر نگاشت شود از map استفاده میکتیم.
سلام
آیا میشه چندین map در برنامه برای هر خروجی تعریف کرد که مستقل از هم باشن
با سلام
بله محدودیتی برای نوشتن map وجود ندارد.
از توابع دیگه به جز map هیجوقت استفاده نکردم
با سلام
برای تمرین همین آموزش را مطالعه کنید تا در صورت نیاز بتوانید از آن استفاده کنید.
سلام آیا map تاثیری روی دقت اندازه گیری داره؟
با سلام
قطعا انتخاب بازه ی دقیق تغییر اعداد تاثیر در بهینه شدن داده ی دریافتی خواهد داشت.
سلام
در چه مواقعی استفاده از لگاریتم نیاز هست؟
در برنامهنویسی آردوینو، تابع ریاضی لگاریتم (logarithm) ممکن است در موارد زیر استفاده شود:
محاسبات پیچیده: وقتی که نیاز به انجام عملیاتهای پیچیده ریاضی داشته باشید، از جمله محاسبه لگاریتم اعداد، ممکن است از تابع لگاریتم در آردوینو استفاده کنید. به طور معمول، آردوینو دارای تابعهای log() (لگاریتم طبیعی) و log10() (لگاریتم عدد ۱۰) است که میتوانید از آنها برای محاسبه لگاریتم اعداد استفاده کنید.
پردازش سیگنال: در برخی از برنامههای آردوینو که به پردازش سیگنالها مرتبط هستند، ممکن است نیاز به استفاده از لگاریتم برای محاسبه مقیاسهای صوتی، قدرت سیگنال و غیره داشته باشید.
الگوریتمهای پیچیده: در برخی از الگوریتمهای پیچیده و محاسبات عددی، ممکن است از لگاریتم برای حل مسائل خاص استفاده کنید. به عنوان مثال، در الگوریتمهای بهینهسازی، تابع هدف ممکن است شامل لگاریتم باشد.
به هر حال، استفاده از تابع لگاریتم در برنامههای آردوینو باید با دقت و به میزان لازم صورت گیرد، زیرا محاسبات ریاضی پیچیده میتوانند منابع پردازشی آردوینو را بیش از حد بارگیری کنند.