در این پست از سایت اِمیک, یک پروژه جالب و آموزشی به نام پروژه آردوینو چینش اعداد از بزرگ به کوچک قرار داده شده است. در این پروژه ما توسط یک کیپد تعدادی عدد وارد کرده و برد آردوینو این اعداد را از بزرگ به کوچک مرتب می کند و روی یک LCD کاراکتری نمایش می دهد. این پروژه با استفاده از برد آردوینو UNO انجام شده و در ادامه در مورد پروژه بیشتر توضیح خواهم داد. در زیر شماتیک این پروژه بسیار جالب و آموزنده را مشاهده می کنید:
قبلا نیز همین پروژه را با استفاده از میکروکنترلر AVR در سایت قرار داده بودم که برای مشاهده آن پست می توانید اینجا کلیک کنید.
همانطور که مشاهده می کنید, ما در این پروژه از برد آردوینو UNO استفاده کرده ایم. از یک LCD کاراکتری 2 در 16 نیز استفاده کرده ایم که این LCD به پایه های A0 تا A5 برد آردوینو متصل شده است. پتانسیومتر RV1 برای تنظیم کنتراست یا میزان روشنایی LCD کاراکتری استفاده شده است. همچنین از یک کیپد 3 در 4 نیز استفاده کرده ایم که این کیپد به پایه های 0 تا 6 برد آردوینو متصل شده است.
عملکرد پروژه به این صورت است که ما توسط کیپد می توانیم تا حداکثر 5 عدد تک رقمی (0 تا 9) را وارد کنیم. برد آردوینو این اعداد را از بزرگ به کوچک مرتب می کند و در نهایت روی LCD کاراکتری نمایش می دهد. اعدادی که وارد می کنیم در سطر اول LCD کاراکتری نمایش داده می شوند. پس از وارد کردن اعداد با فشار دادن کلید # از کیپد, اعداد وارد شده به ترتیب از بزرگ به کوچک در سطر دوم LCD نمایش داده می شوند. برای پاک کردن LCD و وارد کردن اعداد جدید می توانید کلید * از کیپد را فشار دهید.
تغذیه پروژه بالا را می توانید از خود برد آردوینو بگیرید, به این صورت که برد آردوینو را با استفاده از آداپتور راه اندازی کنید و از پایه های 5V و GND آردوینو برای تغذیه استفاده کنید.
برنامه آردوینو :
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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
//////// WWW.EMIC.IR //////// #include <LiquidCrystal.h> //فراخوانی کتابخانه ال سی دی کاراکتری// LiquidCrystal lcd(A5, A4, A3, A2, A1, A0); //تابع روبرو مشخص می کند که کدام پین های اردوینو به ال سی دی متصل شود// int key, c = 0, i = 9, a = 0, N[5]; //تعریف متغیر برای استفاده در برنامه// int key_pad(void) //در روبرو یک تابع تعرف شده است که با فراخوانی این تابع در برنامه اصلي کي پد اسکن مي شود و عدد کليد فشار داده شده را بر مي گرداند// { digitalWrite(0, 1); digitalWrite(1, 1); digitalWrite(2, 1); digitalWrite(3, 0); delay(1); if (!digitalRead(4)) return 1; if (!digitalRead(5)) return 2; if (!digitalRead(6)) return 3; digitalWrite(0, 1); digitalWrite(1, 1); digitalWrite(2, 0); digitalWrite(3, 1); if (!digitalRead(4)) return 4; if (!digitalRead(5)) return 5; if (!digitalRead(6)) return 6; digitalWrite(0, 1); digitalWrite(1, 0); digitalWrite(2, 1); digitalWrite(3, 1); if (!digitalRead(4)) return 7; if (!digitalRead(5)) return 8; if (!digitalRead(6)) return 9; digitalWrite(0, 0); digitalWrite(1, 1); digitalWrite(2, 1); digitalWrite(3, 1); if (!digitalRead(4)) return 10; if (!digitalRead(5)) return 0; if (!digitalRead(6)) return 11; return 12; } //اتمام تابع// void setup() { pinMode(0, OUTPUT); //پین های 0 تا 3 از برد اردوینو خروجی شده اند و پین های 4 تا 6 نیز ورودی شده اند. این پین ها به کی پد متصل می شوند// pinMode(1, OUTPUT); pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, INPUT_PULLUP); pinMode(5, INPUT_PULLUP); pinMode(6, INPUT_PULLUP); lcd.begin(16, 2); //دستور روبرو ال سی دی را پیکره بندی می کند// } void loop() { lcd.clear(); //پاک کردن ال سی دی// lcd.setCursor(2, 0); //رفتن به سطر 0 و ستون 2 از ال سي دي// lcd.print("WWW.EMIC.IR"); //روی ال سی دی WWW.EMIC.IR نوشتن عبارت// delay(2000); //ايجاد تاخير به مدت 2000 ميلي ثانيه يا 2 ثانيه// lcd.clear(); //پاک کردن ال سي دي کاراکتري// lcd.setCursor(0, 0); //رفتن به سطر 0 و ستون 0 از ال سي دي// while (1) { key = key_pad(); if ((key <= 9) & (key != 12) & (c <= 4) & (a == 0)) { //ذخيره مي کند و ان عدد را نيز روي ال سي دي نمايش مي دهد N روبرو و دستورات درون ان عدد فشار داده شده را در ارايه if شرط// N[c] = key; c++; lcd.print(key); delay(300); } if ((key == 11) & (key != 12) & (a == 0)) { //روبرو و دستورات درون ان با فشار دادن کليد # از کيپد اعداد وارد شده را به ترتيب از بزرگ به کوچک ميچيند و روي ال سي دي نمايش مي دهد if شرط// lcd.setCursor(0, 1); for (i = 9; i >= 0; i--) { if ((N[0] == i) | (N[1] == i) | (N[2] == i) | (N[3] == i) | (N[4] == i)) { lcd.print(i); } } a = 1; } if (key == 10) { //با فشار دادن کليد * از کيپد ال سي دي پاک مي شود و تمام متغيرها مقدار دهي اوليه مي شوند و دوباره مي توان اعداد جديد وارد کرد// lcd.clear(); key = 0; c = 0; i = 9; a = 0; N[0] = 0; N[1] = 0; N[2] = 0; N[3] = 0; N[4] = 0; } } } |
توضیحات قسمت های مهم برنامه نوشته شده, اگر سوالی داشتید می توانید در قسمت نظرات مطرح کنید. از انتهای مطلب نیز می توانید فایل های آردوینو و شبیه سازی پروتئوس برای این پروژه را دانلود کنید.
پسورد فایل زیپ : www.emic.ir
نظر یادتون نره…
با درود بر شما استاد عزیز. قصد دارم یک پروژه درب بازکن خانه با آردینو انو راه اندازی کنم. که در آن از ماژول اثر انگشت، کی پد 4 در 4 و نمایشگر نوکیا 5110 و رله استفاده شود. به طوری که در ابتدای روشن شدن از کاربر درخواست ثبت اثر انگشت ادمین و تعیین یک رمز چند رقمی کند. اثر انگشت ادمین و رمز اولیه برای این هست که کاربران دیگر برای ثبت اثر انشگت خود تنها با تایید اثر انگشت مستر بتوانند این اقدام را انجام دهند. متاسفانه تعداد پینهای دیجیتال روی برد آردینو کم است. آیا میتوان برای اجرای این پروژه پینهای آنالوگ را به پین دیجتال تبدیل کرد و اینکه چیه پیشنهادی دارید در این زمینه.