علاوه بر عملگر های ریاضی مانند جمع ، تفریق و… در آردوینو توابعی برای انجام برخی از عملیات های ریاضی مانند به توان رساندن ، ریشه دوم و… وجود دارد . امکان پیاده سازی هر کدام از این توابع با استفاده از دستورات شرطی و عملگر های ریاضی وجود دارد اما شناخت و استفاده از از توابع ریاضی می تواند در وقت شما صرفه جویی کند . همچنین سرعت اجرای برنامه را بیشتر می کند . در این آموزش به شرح هر کدام از این توابع خواهیم پرداخت .
()abs
اولین تابع ()abs می باشد . این تابع قدر مطلق ورودی را برمیگرداند . در واقع با وارد کردن هر عدد منفی به این تابع مقدار مثبت آن باز گردانده می شود . همچنین اگر ورودی تابع یک عدد مثبت باشد همان عدد باز گردانده می شود .
int y=abs(-45); Serial.println(y); y=abs(65); Serial.println(y); y=abs(0); Serial.println(y); \\\\\\\\\\\\\\\\\\\\\\\\\خروجی کد بالا 45 65 0
()constrain
تابع بعدی ()constrain می باشد . این تابع سه ورودی دارد که اگر x کوچکتر از y باشد مقدار برگشتی آن y و اگر x از z بزرگتر باشد مقدار برگشتی آن z خواهید بود . در صورتی که x عددی بین y و z باشد تابع همان مقدار x را بر می گرداند . از این تابع می توانید برای برش یا محدود کردن مقدار یک پارامتر استفاده کنید .
constrain(x,y,z);
()map
این تابع پنج پارامتر ورودی دارد که بازه تغییرات یک پارامتر رو با یک بازه تعیین شده تطابق می دهد . به طور مثال مقدار خوانده شده از ADC یک عدد بین 0 تا 1024 چراکه دقت ADC آردوینو 10 بیتی می باشد . حال اگر بخواهید مقدار به دست آمده از ADC را در بازه 0 تا 100 قرار دهید می توانید از تابع ()map استفاده کنید . در این تابع یک مقدار ماکسیمم با مینمم بازه دلخواه را به یک بازه دیگر تطابق می دهید .
map(val,min,max,val_min,val_max);
val متغییر مورد نظر است که می خواهید مقدار آن را به بازه دیگری ببرید .
min و max مینممو ماکسیمم بازه مورد نظر است که می خواهید تغییرات val را به این بازه ببرید .
val_min و val_max نیز مقدار مینمم و ماکسیمم بازه تغییرات val است .
int y=analogRead(A0); int t=map(y,0,100,0,1024); Serial.println(t);
در مثل فوق به طور مثال اگر y برابر 1024 باشد مقدار t برابر 100 خواهد شد . یا به طور مثال اگر y برابر 20 باشد مقدار t تقریبان 2 خواهد بود .
()max
این تابع دو مقدار مختلف را گرفته و مقدار بزرگ تر را بر می گرداند .
int x=10; int y=50; int z; z=max(x,y); Serial.println(z); ///////////////////////////// 50
()min
این تابع همانند تابع ()max است با این تفاوت که مقدار کمتر را بر می گرداند .
int x=10; int y=50; int z; z=min(x,y); Serial.println(z); ///////////////////////////// 10
()pow
این تابع یک عدد را به توان عدد دیگری می رساند .
int x=2; int y=3; int z; z=pow(x,y); Serial.println(z); ///////////////////////////// 8
()sqrt
این تابع جذر یک عدد را بر می گرداند .
int x=16; int y; y=sqrt(16); Serial.println(y); \\\\\\\\\\\\\\\\\\\\\\\\ 4