تحلیل کتابخانه

تحلیل و بررسی کتابخانه math.h

math-h-arduino-library
نوشته شده توسط معین صابری

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

 


الزامات و نکات فنی کتابخانه math.h


کتابخانه math.h یکی از کتابخانه های پایه ای در پلتفرم آردوینو به شمار می رود. این کتابخانه درون هسته نرم افزاری پلتفرم آردوینو قرار گرفته است. از این کتابخانه می توان در تمام بردهای مورد پشتیبانی این پلتفرم استفاده نمود. به عبارت دیگر این کتابخانه مستقل از معماری پردازنده بوده و بر روی تمامی بردهای مبتنی بر تراشه AVR نظیر اردوینو UNO و یا XTENSA نظیر پردازنده های سری ESP، قابلیت اجرا را دارد. با توجه به اینکه کتابخانه درون هسته نرم افزاری آردوینو قرار دارد، بنابراین نیازی به نصب ندارد. با توجه به موارد ذکر شده، در قسمت بعدی توابع کتابخانه را مورد بررسی قرار می دهیم.

 


توابع کلیدی و کاربردی کتابخانه


پس از بررسی الزامات فنی کتابخانه، نوبت به تحلیل و بررسی توابع کلیدی می رسد. جدول زیر شرح این توابع را به همراه ورودی و توضیحات لازم، ارائه می دهد.

شرح ورودی تابع
به کمک این تابع می توان قدر مطالق عدد قرار گرفته در ورودی را محاسبه نمود. این عدد از نوع اعشار و با دقت مضاعف است. ورودی از نوع اعشاری دقت مضاعف double fabs(double __x)
به کمک این تابع می توان باقی مانده تقسیم دو عدد قرار گرفته در ورودی را در خروجی تابع مشاهده نمود. ورودی های تابع اعشاری و از نوع دقت مضاعف هستند. ورودی ها از نوع دقت مضاعف اعشار double fmod(double __x, double __y)
این تابع در ورودی نخست خود یک عدد اعشاری دریافت می کند. سپس قسمت صحیح آن را در ورودی دم و قسمت اعشاری آن را در خروجی قرار می دهد.

توجه: در صورت عدم وجود قسمت اعشاری، تابع اجرا نمی شود.

ورودی اول عدد اعشاری

ورودی دوم یک اشاره گر جهت ذخیره خروجی

double modf(double __x, double *__iptr)
این تابع سینوس  ورودی را محاسبه کرده و در خروجی قرار می دهد. خروجی بر حسب رادیان محاسبه خواهد شد. ورودی از نوع اعشاری دقت مضاعف double sin(double __x)
به کمک این تابع جذر مقدار قرار گرفته در ورودی محاسبه خواهد شد. جذر محاسبه شده در خروجی قرار می گیرد.

توجه: ورودی نباید منفی باشد.

ورودی از نوع اعشاری دقت مضاعف double sqrt(double __x)
این تابع تانژانت مقدار قرار گرفته در ورودی را محاسبه کرده و در خروجی قرار می دهد. محاسبه بر حسب رادیان خواهد بود. ورودی از نوع اعشاری دقت مضاعف double tan(double __x)
این تابع مقدار سینوس هیپربولیک ورودی را محاسبه و در خروجی قرار می دهد. ورودی از نوع اعشاری دقت مضاعف double sinh(double __x)
این تابع مقدار تانژانت هیپربولیک ورودی را محاسبه و در خروجی قرار می دهد. ورودی از نوع اعشاری دقت مضاعف double tanh(double __x)
این تابع مقدار آرک سینوس ورودی را محاسبه و در خروجی قرار می دهد. ورودی از نوع اعشاری دقت مضاعف double asin(double __x)
این تابع مقدار آرک تانژانت ورودی را محاسبه و در خروجی قرار می دهد. ورودی از نوع اعشاری دقت مضاعف double atan(double __x)
این تابع لگاریتم طبیعی مقدار قرار گرفته ورودی را محاسبه و در خروجی قرار می دهد. ورودی از نوع اعشاری دقت مضاعف double log(double __x)
این تابع لگاریتم مبنای ۱۰ مقدار قرار گرفته ورودی را محاسبه و در خروجی قرار می دهد. ورودی از نوع اعشاری دقت مضاعف double log10(double __x)
این تابع ورودی اول را به توان ورودی دوم رسانده و نتیجه در خروجی قرار می دهد. ورودی ها از نوع اعشاری دقت مضاعف double pow(double __x, double __y)
این تابع دو ورودی را مقایسه کرده و مقدار بزرگتر را در خروجی قرار می دهد. ورودی ها از نوع اعشاری دقت مضاعف fmax (double __x, double __y)
این تابع دو ورودی را مقایسه کرده و مقدار کوچکتر را در خروجی قرار می دهد. ورودی ها از نوع اعشاری دقت مضاعف double fmin (double __x, double __y)

 

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

 


اجرای یک نمونه برنامه


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

int num1, num2;
void setup() {
  Serial.begin(115200);  //باودریت سریال
  delay(500);
  Serial.print("ENTER NUMBER 1:");  //دریافت عدد شماره یک
  while(Serial.available()==0);  //انتظار برای دریافت عدد
  num1=Serial.readString().toInt();  //تبدیل رشته به عدد صحیح
  //********************************************
  Serial.print("ENTER NUMBER 2:");  //دریافت عدد دوم
  while(Serial.available()==0);  //انتظار برای دریافت عدد دوم
  num2=Serial.readString().toInt();  //تبدیل رشته به عدد صححی
  num1=fmax(num1,num2);  //محاسبه بیشینه اعداد دریافت شده
  Serial.print(sqrt(num1));   //محاسبه جذر و نمایش در سریال مانیتور
  delay(500);
  

}

void loop() {
  // put your main code here, to run repeatedly:

}

 


لوازم مورد نیاز


لینک خرید انواع برد آردوینو، کلیک کنید

لینک خرید انواع برد ESP، کلیک کنید

 


جمع بندی


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

 

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

 

درباره نویسنده

معین صابری

کارشناسی ارشد رشته معماری سیستم های کامپیوتری

مالي که ز تو کس نستاند، علم است
حرزي که تو را به حق رساند، علم است
جز علم طلب مکن تو اندر عالم
چيزي که تو را ز غم رهاند، علم است
(شیخ بهایی)

تبادل نظر و رفع عیب با ثبت دیدگاه