آموزش جامع کیپد آردوینو Arduino

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

برای شروع کار ابتدا کتابخانه‌ی keypad را از لینک زیر دانلود نمایید و  آن را در پوشه‌ی libraries موجود در پوشه‌ی نرم افزار کپی کنید.

دانلود کتابخانه keypad.h

ویژگی‌های این کتابخانه

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

 

شروع کار با کتابخانه

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

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

 

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

 

 

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

 

 

توابع

 

waitForKey()

 

این تابع منتظر می‌ماند تا کلیدی فشرده شود و مقداری دریافت نماید.

تذکر : این تابع باعث متوقف شدن  کد‎های دیگر برنامه (به جز وقفه‌ها) می‌شود یعنی اگر بعد از این تابع برنامه روشن و خاموش شدن یک LED را قرار دهید ، LED تا زمانی که دکمه‌ای از کیپد فشرده نشود ،خاموش و روشن نمی‌شود.

برای مثال در برنامه زیر عبارت “digispark”  بعد از هر بار فشرده شدن یک دکمه از keypad بر روی سریال مانیتور نمایش داده می‌شود.

 

 

getKey()

 

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

 

 

getKeys()

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

 

 


addEventListener(keypadEvent)

 

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

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

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

 

 

 

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

 

KeyState getState()

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

 

 

 

keyStateChanged()

 

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

 

 

 


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

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

 

keypad.key[i].kstate;

به وسیله دستور فوق می‌توانید به وضعیت 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)

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

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

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

 

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

 

در پست‌های بعدی keypad را با استفاده از ترکیب این کتابخانه و interrupt آموزش می‌دهیم.

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

11 دیدگاه ها

  1. زهرا می‌گه:

    سلام
    لایبرری بسیار جالی رو معرفی کردین
    ممنون از اینکه وقت میزارین

  2. bahman می‌گه:

    سلام
    چند تا پروژه دارم.
    شاید بتونیم با هم کار کنیم
    در مورد اونها لطفا با من تماس بکیرید

    ۰۹۱۲۱۷۶۹۰۱۲
    ممنونم

  3. fateme می‌گه:

    slm
    man mikhastam yek mashin hesab dorost konam mishe mano rahnamaee konin?

  4. حمید محمودی می‌گه:

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

  5. عنایتی می‌گه:

    تشکر از اطلاعات خوب و مفیدتون.

  6. امینی می‌گه:

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

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *