علاوه بر عملگر های ریاضی مانند جمع ، تفریق و… در آردوینو توابعی برای انجام برخی از عملیات های ریاضی مانند به توان رساندن ، ریشه دوم و… وجود دارد . امکان پیاده سازی هر کدام از این توابع با استفاده از دستورات شرطی و عملگر های ریاضی وجود دارد اما شناخت و استفاده از از توابع ریاضی می تواند در وقت شما صرفه جویی کند . همچنین سرعت اجرای برنامه را بیشتر می کند . در این آموزش به شرح هر کدام از این توابع خواهیم پرداخت .

()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

 

Tags:
About Author: USER_4