در این پست از سایت اِمیک, شما با راه اندازی کی پد یا صفحه کلید با استفاده از برد اردوینو UNO اشنا خواهید شد. در این پروژه ساده ما یک کی پد 3*4 را با اردوینو راه اندازی می کنیم و با فشار دادن هر کلید از کی پد مقدار ان بر روی یک LCD کاراکتری 2*16 نمایش داده می شود و همچنین امکان پاک کردن LCD با زدن یک دکمه وجود دارد. قبلا راه اندازی کی پد (keypad) را با استفاده از میکروکنترلر AVR اموزش داده بودیم که می تونید این پست را در اینجا مشاهده کنید, در این پست در مورد کی پد و ساختار ان کامل توضیح داده شده که میتونید مطالعه کنید.
در ابتدا لازم است شما کتابخانه کی پد را به نرم افزار اردوینو اضافه کنید, برای این منظور فایل زیر را دانلود کرده و از حالت Zip خارج کنید و پوشه keypad را به پوشهی libraries موجود در محل نصب برنامه اردوینو اضافه کنید .
نحوه استفاده از کتابخانه keypad :
برای استفاده از این کتابخانه ابتدا باید ان را به صورت زیر به ابتدای برنامه خود اضافه کنیم :
1 |
#include <Keypad.h> |
در ادمه باید تعداد سطر و ستون کی پد مورد نظرمان را به صورت زیر درون دو متغیر ذخیره کنیم (مثال زیر برای یک کی پد دارای 4 سطر و 3 ستون)
1 2 |
const byte ROWS = 4; const byte COLS = 3; |
در مرحله بعد باید حروف و اعداد کی پد را به صورت ماتریسی داخل یک ارایه قرار دهیم, نحوه تعریف ارایه دقیقا مشابه کی پد می باشد. (مثال زیر برای یک کی پد 3*4)
1 2 3 4 5 6 |
char keys[ROWS][COLS] = { {'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}, {'*', '0', '#'} }; |
در ادامه با ایجاد دو ارایه به صورت زیر نحوه اتصال سطرها و ستون های کی پد به پین های اردوینو را مشخص می کنیم. (در مثال زیر ما سطرهای کی پد را به پین های 0,1,2,3 و ستون های ان را به پین های 4,5,6 اردوینو متصل کرده ایم)
1 2 |
byte rowPins[ROWS] = {0, 1, 2, 3}; byte colPins[COLS] = {4, 5, 6}; |
در اخرین مرحله ما با توجه به مقادیری که در بالا وارد کردیم یک تابع ایجاد می کنیم و این تابع نقشه ی کی پد را برای اردوینو تعریف می کند. (این تابع مقدار دهی اولیه متغیرها را انجام می دهد)
1 |
Keypad kpd = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS); |
مهم ترین توابع کتابخانه keypad :
کتابخانه keypad دارای یکسری توابع هست که مهم ترین انها را در ادامه توضیح خواهم داد. در پروژه هایی که در اینده قرار خواهیم داد در صورتی که نیاز به تابعی دیگر از کتابخانه keypad بود در همان پروژه توضیح داده خواهد شد
تابع ()getKey :
این تابع کاراکتر کلید فشار داده شده را بر می گرداند. تابع getKey مانع اجرای برنامه نمی شود, یعنی کدهای بعد از ان هم در صورتی که مقداری دریافت نکند اجرا خواهند شد. برای استفاده از این تابع (و بقیه که در ادامه توضیح داده شده اند) , ابتدا باید متغیری از نوع char تعریف کرده و حاصل این تابع را درون ان بریزید و در هر کجای برنامه که نیاز داشتید استفاده کنید. در مثال زیر کاراکتر کلید فشار داده شده توسط تابع getKey دریافت شده و درون متغیر key ریخته می شود و در ادامه در صورتی که کلیدی فشار داده شود شرط if برقرار می شود و کاراکتر کلید فشار داده شده بر روی lcd نمایش داده می شود.
1 2 3 4 5 6 7 8 |
void loop() { char key = kpd.getKey(); if (key) { lcd.print(key); } } |
تابع ()getKeys :
این تابع در صورتی که کلیدی فشار داده شود true (یک منطقی) می شود و زمانی که کلیدی فشار داده نشده است مقدار false (صفر منطقی) را بر می گرداند. تابع getKeys مانع اجرای برنامه نمی شود, حتی زمانی که کلیدی را به صورت فشار داده شده نگه داریم بازهم کدهای بعد از ان اجرا می شوند.
تابع ()waitForKey :
این تابع منتظر می ماند تا کلیدی فشار داده شود و مقداری دریافت کند. این تابع باعث متوقف شدن برنامه (بجز وقفه ها) می شود و کدهایی که بعد از این تابع نوشته شده اند تا زمانی که مقداری دریافت نکند (کلیدی فشار داده نشود) اجرا نخواهند شد.
شماتیک پروژه راه اندازی کی پد (صفحه کلید) با آردوینو :
همانطور که در شماتیک بالا می بینید ما lcd کاراکتری و کی پد را با توجه به شماره پین هایی که در برنامه مشخص می کنیم به برد اردوینو یونو متصل کرده ایم. شما می توانید به دلخواه این پین ها را در برنامه تغییر دهید, ما در عمل از کی پد فلت 3*4 استفاده کردیم که کلیپ تست پروژه در انتهای مطلب قرار داده شده است. پین ها این کی پد به صورت زیر است :
نکته: برای تغذیه برد اردوینو از اداپتور استفاده کنید. ال سی دی کاراکتری در عمل دارای 16 پین هست که در شبیه سازی پین های 15 و 16 ان وجود ندارد شما در عمل پین 15 را به مثبت و 16 را به منفی تغذیه متصل کنید.
برنامه :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
#include <LiquidCrystal.h> //معرفی کتابخانه ال سی دی کاراکتری// #include <Keypad.h> //معرفی کتابخانه کی پد// LiquidCrystal lcd(13, 12, 11, 10, 9, 8, 7); //دستور روبرو مشخص می کند که کدام پین های اردوینو به ال سی دی متصل شوند// const byte ROWS = 4; //مشخص کردن تعداد سطر کی پد// const byte COLS = 3; //مشخص کردن تعداد ستون کی پد// //در زیر ما حروف و اعداد کی پد را به صورت ماتریسی داخل یک ارایه قرار داده ایم. نحوه تعریف ارایه دقیقا مشابه کی پد است// char keys[ROWS][COLS] = { {'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}, {'*', '0', '#'} }; //با تعریف دو ارایه به صورت زیر نحوه اتصال سطرها و ستون های کی پد به پین های اردوینو را مشخص می کنیم// byte rowPins[ROWS] = {0, 1, 2, 3}; byte colPins[COLS] = {4, 5, 6}; //تابع زیر نقشه کی پد را با توجه به مقادیر و ارایه هایی که در بالا تعریف کردیم برای اردوینو مشخص می کنند// Keypad kpd = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS); void setup() { lcd.begin(16, 2); //مشخص کردن اندازه ال سی دی// } void loop() { char key = kpd.getKey(); //میریزد key این تابع کاراکتر کلید فشار داده شده را درون متغیر// if (key) //می شویم if در صورتی که کلیدی فشار داده شود وارد شرط// { lcd.print(key); //نوشتن کاراکتر کلید فشار داده شده روی ال سی دی// if (key == '*') //شده و ال سی دی پاک می شود if در صورتی که کاراکتر * را فشار دهیم وارد شرط// { lcd.clear(); } } } |
توضیحات کامل برنامه نوشته شده و نیاز به توضیح دیگری نیست, اگر سوالی داشتید می تونید در قسمت نظرات مطرح کنید. اگر با برنامه نویسی اردوینو اشنا نیستید مطالب زیر را مطالعه کنید
- برای اشنایی با دستورات مهم برنامه نویسی اردوینو اینجا کلیک کنید
- برای اشنایی با دستورات مربوط به lcd کاراکتری اینجا کلیک کنید
- برای اشنایی با نحوه پروگرام کردن برد اردوینو (ریختن برنامه روی برد) اینجا کلیک کنید
کلیپ تست عملی پروژه :
پسورد فایل زیپ : www.emic.ir
نظر یادتون نره…
سلام.
چه جوری فقط از یک کلیدش استفاده کنم. یعنی مثل یک کلید تک کار کنه.
سلام, دوست عزیر گفتم که پست معرفی شده را مطالعه کنید. اگر به اتصالات کی پد دقت کنید به عنوان مثال برای کلید 1 کافیه از پایه های R1 و C1 استفاده کنید
ممنون دستتون درد نکنە. عالی بود.
سلام
من به یک کلید نیاز دارم اما فعلا فقط به یک کی پد 4در4دست رسی دارم. چه جوری از یک کلیدش فقط استفاده کنم?
سلام, پست “راه اندازی کی پد با میکروکنترلر AVR” را بررسی کنید. در اون پست نحوه اتصالات کی پد توضیح داده شده
سلام من دو روزه باهاتون اشنا شدم عمش بهتون سر می زنم بس که گلین پروژه هاتون خوبه و اینکه بدون قفل کردن و اینا می زارین ممنون
سلام, خواهش می کنم امیدوارم مطالب سایت براتون مفید باشه
سلام میشه راه اندازی سنسور فشار و نمایشش در ال سی دی کاراکتری رو توضیح بدین لطفاً
سلام, در صورت راه اندازی سنسور فشار حتما اموزش کامل ان قرار داده خواهد شد
سلام
پروژه مفیدی بود و اینکه میخواستم بگم که من دقیقا مثل شما بستم ولی مثلا عدد 7 رو که میزدم یه عدد دیگه ای رو نشون میداد میخواستم بدونم میدونید مشکل از کجاست؟؟
با تشکر.
سلام, بررسی کنید که پایه های سطر و ستون کی پد را بدرستی به اردوینو متصل کرده باشید