تکمیل رابط کدهای مورس در آردوینو

Ratings
(0)

 

 تعریف رابط های کاربری مهم است اما تکمیل کردن آنها به همان اندازه مهم است. اکنون یک تب(tab) جدید ایجاد کنید و نام فایل را برابر با telegraph.cpp قرار دهید. اینجا همان مکانی است که باید توضیح دهیم که چرا بعنوان نام اسکچ، به جای Telegraph از TelegraphLibrary استفاده کرده ایم، حتی با اینکه Telegraph طبیعی تر به نظر می رسد. علتش این است که IDE آردوینو تمام اسکچ ها(که پسوند ino. دارند) را به یک فایل ++C تبدیل می کند(که پسوند cpp.) دارند. یعنی برای یک اسکچ به نام Telegraph.ino، آی دی ای(IDE) آردوینو یک فایل ++C به نام  Telegraph.cpp ایجاد می کند. در یک سیستم که به حروف بزرگ و کوچک حساس نیست، فایل مذکور با فایلی به نام telegraph.cpp تداخل می کند و منجر به برخی پیغام های خطای عجیب می شود.

حالا در تب جدیدی که ایجاد کردیم، کدهای زیر را وارد کنید:

#include <ctype.h>
#include <Arduino.h>
#include "telegraph.h"

const char* LETTERS[] = {
  ".-",   "-...", "-.-.", "-..",  ".",    // A-E
  "..-.", "--.",  "....", "..",   ".---", // F-J
  "-.-",  ".-..", "--",   "-.",   "---",  // K-O
  ".--.", "--.-", ".-.",  "...",  "-",    // P-T
  "..-",  "...-", ".--",  "-..-", "-.--", // U-Y
  "--.."                                  // Z
};

const char* DIGITS[] = {
  "-----", ".----", "..---", "...--", // 0-3
  "....-", ".....", "-....", "--...", // 4-7
  "---..", "----."                    // 8-9
};

 مانند اکثر برنامه های ++C، برنامه ی ما نیز ابتدا  برخی از کتابخانه ها(libraries) را ایمپورت می کند. چون که ما بعدا به تابع هایی مثل toupper نیاز داریم، فایل ctype.h را اینکلود(include) می کنیم. همچنین ما باید فایل telegraph.h را اینکلود کنیم تا دستورات کلاس ما و توابع مربوطه در دسترس باشند. اما فایل Arduino.h برای چه چیزی مناسب است؟ تاکنون ما در این مورد فکر نکرده بودیم که ثابت های HIGH و LOW یا OUTPUT از کجا آورده شده اند. این ثابت ها در چندین هدر(header) که به همراه IDE آردوینو می آمدند، تعریف می شدند، و ما می توانیم آنها را در پوشه ی زیر در IDE آردوینو پیدا کنیم:

hardware/arduino/cores/arduino

 نگاهی به فایل Arduino.h بیندازید(در نسخه های قدیمی آردوینو، نام این فایل WProgram.h است). این فایل حاوی ثابت های مذکوری است که ما قبلا از آنها بسیار استفاده کرده ایم.  این فایل همچنین ماکروهای کاربردی زیادی را تعریف می کند؛ همچنین اکثر توبع پایه ی آردوینو را تعریف می کند. وقتی که ما اسکچ های عادی را ویرایش می کنیم، نیازی نیست در مورد اینکلود کردن هیچ فایل هدر استانداردی نگرانی داشته باشیم؛ زیرا IDE آردوینو در پشت صحنه به طور اتوماتیک این کار را انجام می دهد. همین که ما پروژه های پیچیده تری ایجاد کنیم که حاوی کدهای حقیقی ++C باشد، باید همه چیز را خودمان مدیریت کنیم. یعنی ما باید صریحاً تمام کتابخانه هایی که نیاز داریم را ایمپورت کنیم، حتی برای چیزهای پایه ای مثل ثابت های آردوینو نیز باید همین کار را بکنیم.

پس از ایمپورت کردن تمام فایل های هدر ضروری، ما دو آرایه ی رشته ای(string arrays) به نام LETTERS و DIGITS را تعریف می کنیم. این آرایه ها حاوی کدهای مورس برای تمام حروف و اعداد هستند، و ما بعداً از آنها برای تبدیل متن های معمولی به کدهای مورس استفاده خواهیم کرد. قبل از انجام این کار، ما کانستراکتور(سازنده) را تعریف می کنیم که مسئول ایجاد و مقدار دهی اولیه ی(initializing) اشیاء جدید(آبجکت های new)  کلاس Telegraph است:

Telegraph::Telegraph(const int output_pin, const int dit_length) {
  _output_pin = output_pin;
  _dit_length = dit_length;
  _dah_length = dit_length * 3;
  pinMode(_output_pin, OUTPUT);
}

 کانستراکتور بالا دو آرگومان می پذیرد: اول، شماره ی پین ای که کد مورس باید به آن ارسال شود؛ و دوم، طول یک دیت( length of a dit)  برحسب میلی ثانیه. سپس کانستراکتور، این مقادیر را در متغیرهای نمونه ی(instance variables) مربوطه ذخیره می کند؛ و طول صحیح یک داه(length of a dah,) را محاسبه می کند و پین ارتباطی مورد نظر را به پین خروجی تبدیل می کند.

احتمالا شما متوجه شده اید که تمام متغیرهای نمونه ی خصوصی(private instance variables) با یک آندرلاین(underscore) شروع می شوند. من شخصاً این قرارداد را دوست دارم، اما ++C یا IDE آردوینو مجبور به اجرای این قرارداد نیستند.

 {module کمک نقدی به نویسنده}

  • بازدید: 534

نوشتن دیدگاه

لطفا نظرات خود را بیان کنید. به سوالات در سریع ترین زمان پاسخ داده خواهد شد.اما به نکات زیر توجه کنید:
1. سعی کنید نظرات شما مرتبط با مقاله ی مورد نظر باشد، در غیر این صورت پاسخ داده نخواهد شد.
2. سوالات خود را به صورت کوتاه بیان کنید و از پرسیدن چند سوال به طور همزمان خودداری کنید.
3. سوال خود را به طور واضح بیان کنید و از کلمات مبهم استفاده نکنید.

ارسال