آردوینو آموزش آردوینو پروژه های آردوینو

آموزش راه‌اندازی کیپد keypad آردوینو با کتابخانه کیپد – بخش دوم

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

در پروژه های DIY کنترل درب به صورت اتوماتیک بسیار پرطرفدار است. در این خصوص روش های متفاوتی برای طراحی سیستم درب باز کن وجود دارد. یکی از این روش ها استفاده از کیپدهای ماتریسی است. کیپد ها دارای دو نوع فلت و معمولی و با ابعاد و کلیدهای متفاوتی هستند. در این آموزش به معرفی کیپد و نحوه‌ی استفاده از آن خواهیم پرداخت. .در جلسه دوم از آموزش کیپد keypad قصد داریم به کتابخانه‌ای بسیار مفید و کاربردی بپردازیم که به به کمک آن می‌توانید کیپد خود را به صورت حرفه‌ای راه اندازی کنید. به وسیله‌ی کتابخانه کیپد Keypad قادر خواهید بود انواع کیپد‌ها از قبیل کیپدهای قدیمی در تلفن‌ها و سایر لوازم الکترونیکی یا کیپدهای ۳*۴ یا ۴*۴ و  … را راه اندازی نمایید. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسیدیجی اسپارک همراه باشید

 


تحلیل کتابخانه کیپد Keypad


ویژگی کتابخانه کیپد Keypad

  • درکتابخانه کیپد Keypad از حلقه‌های مسدود کننده استفاده نشده است و این بدان معناست که می‌توانید دکمه‌ای را تا هر زمانی که دوست داشتید نگه دارید و آردوینو به پردازش خود ادامه می‌دهد و از ادامه‌ی کار نمی‌ایستد.
  • در این کتابخانه از delay استفاده نشده است و بدین معنی است که باعث به وجود آمدن تاخیر در برنامه نمی‌شود.
  • این کتابخانه قابلیت تشخیص فشرده شدن چند دکمه همزمان را دارد

 

فراخوانی دستورات کیپد Keypad

برای شروع کار ابتدا باید تعداد سطر و ستون‌های کتابخانه را در یک متغیر در برنامه ذخیره کنیم. برای مثال در کد زیر ما تعداد ۴ سطر و ۴ ستون را درون متغیری در برنامه ذخیره می‌کنیم :

سپس باید  در یک آرایه‌ی دو بعدی نقشه‌ی کیپد Keypad را ذخیره کنیم مانند عملیات زیر :

 

اکنون باید در دو آرایه مجزا شماره پین‌های آردوینو که به سطر و ستون keypad متصل شده است را در برنامه وارد کنیم.برای مثال ما پین‌های شماره ۲ , ۳ , ۴ , ۵ آردوینو را به سطر کیپد و پین های شماره ۶ , ۷ , ۸ , ۹ را به ستون کیپد متصل کرده ایم.

هم اکنون نوبت به ساخت یک آبجکت از کلاس keypad.h می‌رسد و باید مقدار سازنده‌های آن را وارد کنیم :

 

 


توابع کتابخانه Keypad 


 

 تایع Waitforkey

این تابع منتظر می‌ماند تا کلیدی فشرده شود و مقداری دریافت نماید. این تابع باعث متوقف شدن  کد‎های دیگر برنامه (به جز وقفه‌ها) می‌شود، یعنی اگر بعد از این تابع برنامه روشن و خاموش شدن یک LED را قرار دهید ، LED تا زمانی که دکمه‌ای از کیپد فشرده نشود ،خاموش و روشن نمی‌شود. برای مثال در برنامه زیر عبارت “digispark”  بعد از هر بار فشرده شدن یک دکمه از keypad بر روی سریال مانیتور نمایش داده می‌شود.

 

تابع ()getKey

کاراکتر مربوط به کلید فشرده را برمی‌گرداند. این تابع بر خلاف تابع فوق در صورتی که کلید فشرده نشود باعث مسدود شدن برنامه نمی‌شود. مثال :

 

تابع ()getkeys

این تابع اگر دکمه‌ای فعال شد مقدار true و در غیر این صورت مقدار false را برمی‌گرداند.برای مثال در کد زیر هرگاه وضعیت یک کلید از کیپد تغییر کند پیغام keypad active.. بر روی سریال مانیتور نمایش داده می‌شود.

 

تابع (addEventListener(KetpadEvent

به وسیله‌ی این تابع یک event کیپد به برنامه اضافه می‌شود. طریقه استفاده از این دستور به شرح زیر می‌باشد :

ابتدا باید یک تابع با نام دلخواه بعد از loop برنامه می‌نویسیم مانند زیر:

در مرحله بعد باید در setup برنامه به وسیله دستور addEventListener ، تابعی که در بالا نوشتیم به برنامه معرفی کنیم :

 

تابع فوق دارای یک سری تابع وابسته به خود می‌باشد که به شرح آن ها می‌پردازیم :

 

تایع ()KeyState getState

این تابع وضعیت دکمه مورد نظر را مشخص می‌کند و دارای چهار حالت IDLE , PRESSED , RELEASED و HOLD می‌باشد.توجه داشته باشید که از  این تابع زمانی می‌توان استفاده نمود که از تابع addEventListener استفاده شده باشد. مثال :

 

مهمان گرامی، جهت دسترسی به کدهای این پروژه، اسپارکر شوید.

 

تابع ()KeyStateChanged

این تابع نیز همانند تابع فوق زمانی می‌توان از آن استفاده نمود که از تابع addEventListener نیز در برنامه استفاده شده باشد. در صورت تغییر وضعیت کلید مقدار true و در غیر  این صورت مقدار false را بر‌می‌گرداند. مثال :

 

 

دسترسی به هر دکمه از keypad

توسط توابعی که در بالا معرفی شد نمی‌توان به وضعیت تک تک دکمه‎های کیپد Keypad دسترسی پیدا کرد. برای انجام این کار باید از دستورات زیر استفاده نمود.

به وسیله دستور فوق می‌توانید به وضعیت IDLE , PRESSED , HOLD , یا RELEASED دکمه i ام کیپد دسترسی پیدا کنید. مثال :

در این مثال اگر دستمان را بر روی دکمه دوم کیپد نگاه داریم پیغام  key 2  HOLD بر روی سریال مانیتور نمایش داده می‌شود.

 

تابع kpd.key[i].stateChanged

این تابع در صورت تغییر وضعیت دکمه i ام مقدار  true  و در غیر این‌صورت مقدار false را برمی‌گرداند. در مثال زیر در صورت تغییر وضعیت کلید دوم کیپد مقدار stateChanged را بر روی سریال مانیتور نمایش می‌دهد.

 

 

تایع (setHoldTime(unsigned int time

این تابع مقدار زمان ( بر حسب میلی ثانیه) برای اینکه وضعیت HOLD در دو تابع زیر به وجود آید ، را تعیین می‌کند(الزامی به استفاده از این تابع در برنامه نمی‌باشد زیرا دارای مقدار پیش فرض می‌باشد ).

 

تابع (setDebounceTime(unsigned int time

این تابع زمان مورد نیاز برای عملیات Debouncing را بر حسب میلی‌‌ثانیه مشخص می‌کند.  برای آموش دیبانسینگ (Debouncing) می‌توانید به لینک‌های زیر مراجعه نمایید.

آموزش Debouncing یا نویزگیری کلید آردوینو بخش اول

آموزش دی بانسینگ کلید در آردوینو بخش دوم

 

در مثال زیر می‌توانید پروژه‌ای ساده با استفاده از کتابخانه کیپد Keypad را مشاهده کنید:

 

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

برد آردوینو Arduino

کیپد ماتریسی Keypad

 

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

 

 


پروژه و دریافت بن ارسال رایگان


برای دریافت بن خرید از دانشجو کیت، کاربران بایستی با استفاده از وسایل این آموزش، پروژه را اجرا کرده و یا حتی مدار جدیدی تعریف کنید. سپس از اجرای کار فیلم گرفته و در شبکه‌های اجتماعی از جمله آپارات و اینستگرام، با هشتگ‌های دیجی_اسپارک   دانشجوکیت    digispark    daneshjookit منتشر کنند. سپس از طریق بخش نظرات در ادامه همین آموزش، جهت دریافت بن خرید ارسال رایگان به ارزش ۱۰۳۰۰ تومان از دانشجو کیت، لینک را زیر همین پست ارسال کنید.

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

 

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

علیرضا قربانی

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

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

۱۹ دیدگاه

  • با سلام،
    من میخواهم اداپتوری بسازم که یک یا چند وسیله USB رو به اون متصل کنم و سپس اداپتور از طریق بلوتوث اطلاعات رو به کامپیوتر یا تبلت ارسال کنه.
    برای مثال، کیبورد و ماوس usb رو تبدیل به بلوتوث کنه.
    من در الکترونیک و کامپیوتر و برنامه نویسی مبتدی هستم و تا کنون با برد های آردوینو کار نکردم، ممکنه خواهش کنم راهنمایی بفرمایید.
    با تشکر
    محمودی

  • سلام ی سوال داشتم….
    میخوام یک حلقه بنویسم که تا زمانی که یک کلید فشرده نشده ادامه داشته باشه… چطوری باید بنویسم؟

  • سلام میشه برنامه تایپ حروف رو هم بزارید من الان ۶۵روزه دارم کار میکنم ولی نتونستم بنویسم خییلی ممنون از اموزش های عالی تون

  • سلام اقای قربانی : یک برنامه دارم که برای دریافت ورودی از کلیدهای یک طرفه استفاده می کنه میخوام از کی پد برای ورودی استفاده کنم چیکار کنم . من برنامه نویسی آردینو رو یاد ندارم برنامه رو میفرستم به اضافه کیپد رو میشه برام تغییرات بدید.

    • درود برشما
      ضمن تشکر از توجه شما، متاسفانه چنین امکانی وجود ندارد. شما باید ابتدا برنامه نویسی را تا حدودی بلد باشید و برای رفع عیب از این طریق اقدام کنید. نه که در اوج سادگی تقاضای ارسال برنامه از طرف نویسنده‌های سایت را داشته باشید. دقت داشته باشید که دیجی اسپارک برای ارتقاء سطح سواد شما کاربران ایجاد شده است، نه برای راحتی کاربران
      شاد و پیروز باشید.

  • سلام مهندس
    من یه کد می خوام بنویسم که یک ورودی عددی از ما دریافت کنه و بعد ثبت ورودی به تعداد آن از ما ورودی در یافت کنه.
    ممنون میشم راه نماییم کنید

    • با سلام
      از توجه شما ممنونم، در حال حاضر نویسندگان دیجی اسپارک، امکان انجام چنین پروژه‌هایی را ندارند و شما میتوانید برای رفع عیب کدهایی که نوشته‌اید به این صفحه مراجعه کنید.

  • سلام. عملکرد کیپد باید اینطوری باشه که هر بار که فشار میدیم, یک عملی انجام بده. چطور میشه تعریف کرد که یک عدد ۵ یا ۶ رقمی بخونه.

  • با سلام
    ممنون بابت آموزش خوبتان من یک مشکلی دارم در نوشتن اعداد ۲ رقمی با keypad
    با برنامه زیر هر کلید به تنهایی کار می کند در حالی که من به بیشتر از این اعداد نیاز دارم ممنون می شوم جهت افزایش تعدا پین ها کمک کنید
    این برنامه در حلقه loop اردینو قرار دارد
    char key = keypad.getKey();
    //char key = kpd.getKey();

    if (key) // Check for a valid key.
    {
    switch (key)
    {
    case ‘1’:
    Serial.println(key);
    break;
    case ‘2’:
    Serial.println(key);
    break;
    case ‘3’:
    Serial.println(key);
    break;
    case ‘4’:
    Serial.println(key);
    break;
    case ‘5’:
    Serial.println(key);
    break;
    case ‘6’:
    Serial.println(key);
    break;
    case ‘7’:
    Serial.println(key);
    break;
    case ‘8’:
    Serial.println(key);
    break;
    case ‘9’:
    Serial.println(key);
    break;
    case ‘*’:
    Serial.println(key);
    break;
    case ‘#’:
    Serial.println(key);
    break;
    case ‘0’:
    Serial.println(key);
    break;
    }
    }