در این پست از سایت اِمیک، راه اندازی سون سگمنت با استفاده از اردوینو اموزش داده خواهد شد. ما در این پروژه یک سون سگمنت تکی را با برد اردوینو یونو راه اندازی می کنیم ، البته شما به راحتی می توانید سون سگمنت های دو تایی و بیشتر را هم با تغیرات جزئی در این پروژه راه اندازی کنید.
قبلا اموزش راه اندازی Seven Segment را با استفاده از میکروکنترلر AVR اموزش داده بودم که در آنجا بطور کامل در مورد سون سگمنت ها توضیح داده شد، این پست را می توانید در اینجا مشاهده کنید.
پین های سون سگمنت تکی به صورت زیر است :
همانطور که در تصویر بالا می بینید, سون سگمنت تکی دارای 10 پین (5 پین در هر طرف) می باشد که پین وسط از هر طرف پین مشترک هست و با توجه به اینکه سون سگمنت از نوع اند مشترک است یا کاتد مشترک باید به مثبت یا منفی متصل شود. به ترتیب قرارگیری پین ها که از a تا g نام گذاری شده اند و نقطه که با DP مشخص شده است, دقت کنید. زمانی که می خواهید سون سگمنت را به برد اردوینو متصل کنید می توانید با توجه به تصویر بالا پین های سون سگمنت را تشخیص دهید.
شماتیک پروژه راه اندازی سون سگمنت با آردوینو :
در تصویر بالا یک پروژه ساده با سون سگمنت را مشاهده می کنید که به صورت یک شمارنده عمل می کند, یعنی که اعداد 0 تا 9 به ترتیب و با فاصله زمانی یک ثانیه روی سون سگمنت نمایش داده می شوند و زمانی که به عدد 9 رسیدیم دوباره سون سگمنت 0 شده و از اول این روند ادامه پیدا می کند. تنها نکته شماتیک بالا نحوه اتصال سون سگمنت به برد اردوینو است که با توجه به پین هایی از برد اردوینو که در برنامه برای اتصال به سون سگمنت مشخص کرده ایم, به هم متصل می شوند. ما در برنامه که در ادامه قرار داده شده مشخص کرده ایم که پین های 0 تا 6 برد اردوینو به ترتیب به پین های a تا g سون سگمنت متصل شوند .
برنامه :
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 |
/////////// WWW.EMIC.IR /////////// byte seg[10][7] = { //در زیر ما یک ارایه تعریف کرده ایم که شامل معادل باینری اعداد 0 تا 9 برای سون سگمنت کاتد مشترک است// { 1, 1, 1, 1, 1, 1, 0 }, // = 0 { 0, 1, 1, 0, 0, 0, 0 }, // = 1 { 1, 1, 0, 1, 1, 0, 1 }, // = 2 { 1, 1, 1, 1, 0, 0, 1 }, // = 3 { 0, 1, 1, 0, 0, 1, 1 }, // = 4 { 1, 0, 1, 1, 0, 1, 1 }, // = 5 { 1, 0, 1, 1, 1, 1, 1 }, // = 6 { 1, 1, 1, 0, 0, 0, 0 }, // = 7 { 1, 1, 1, 1, 1, 1, 1 }, // = 8 { 1, 1, 1, 0, 0, 1, 1 } // = 9 }; void setup() { //از خط 17 تا 23 ما پین هایی از برد اردوینو که قرار است به سون سگمنت متصل شوند را خروجی کرده ایم// pinMode(0, OUTPUT); pinMode(1, OUTPUT); pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); } //از خط 27 تا 34 ما یک تابع تعریف کرده ایم که با فراخوانی ان عدد مورد نظر را روی سون سگمنت نمایش می دهد// void sevenseg(int n ) { for (int a = 0; a < 7; a++) { digitalWrite(a, seg[n][a]); } } void loop() { //به پایان می رسد for از 9 بیشتر شد حلقه i نوشته ایم که از 0 شروع شده و هر ثانیه یکی اضافه می شود و زمانی که for در زیر ما یک حلقه// for (int i = 0; i < 10; i++) { sevenseg(i); //روی سون سگمنت نمایش دهد for را در هر تکرار حلقه i تابعی که در بالا تعریف کرده ایم را فراخوانی می کنیم تا مقدار// delay(1000); } } |
توجه کنید که ارایه ای که در ابتدای برنامه تعریف شده برای سون سگمنت کاتد مشترک است و در صورتی که سون سگمنت شما اند مشترک است فقط کافی است که یک ها را به صفر و صفرها را به یک تبدیل کنید, یعنی به صورت زیر شود:
1 2 3 4 5 6 7 8 9 10 11 12 |
byte seg[10][7] = { { 0, 0, 0, 0, 0, 0, 1 }, // = 0 { 1, 0, 0, 1, 1, 1, 1 }, // = 1 { 0, 0, 1, 0, 0, 1, 0 }, // = 2 { 0, 0, 0, 0, 1, 1, 0 }, // = 3 { 1, 0, 0, 1, 1, 0, 0 }, // = 4 { 0, 1, 0, 0, 1, 0, 0 }, // = 5 { 0, 1, 0, 0, 0, 0, 0 }, // = 6 { 0, 0, 0, 1, 1, 1, 1 }, // = 7 { 0, 0, 0, 0, 0, 0, 0 }, // = 8 { 0, 0, 0, 1, 1, 0, 0 } // = 9 }; |
توضیح عملکرد تابع sevenseg :
همانطور که در خط 27 برنامه مشاهده می کنید ما برای نمایش اعداد روی سون سگمنت یک تابع تعریف کرده ایم که بهتر است عملکرد این تابع را با یک مثال توضیح بدهم. فرض کنید که ما می خواهیم عدد 2 را بر روی سون سگمنت نمایش بدهیم, بنابراین ما باید در برنامه تابع sevenseg را به صورت زیر فراخوانی کنیم:
1 2 3 4 5 |
void loop() { sevenseg(2); } |
بنابراین با توجه فراخوانی تابع به صورت بالا مقدار n درون تابع sevenseg برابر 2 می شود و در ادامه ی اجرای تابع sevenseg وارد حلقه for می شویم, درون حلقه for از دستور digitalWrite استفاده شده است. در تکرار اول حلقه for مقدار a=0 است بنابراین دستور digitalWrite به صورت زیر می شود
1 |
digitalWrite(0 , seg[2][0] ); |
مقدار [seg[2][0 یعنی ارایه ای که در سطر دوم و ستون 0 قرار دارد(در ارایه ای که برای کاتد مشترک تعریف شده) 1 است در نتیجه پین صفر اردوینو که متصل به پین a از سون سگمنت است 1 می شود.
در اجرای دوم حلقه for مقدار a=1 شده بنابراین دستور digitalWrite به صورت زیر می شود
1 |
digitalWrite(1 , seg[2][1] ); |
مقدار [seg[2][1 یعنی ارایه ای که در سطر دوم و ستون 1 قرار دارد 0 است در نتیجه پین یک اردوینو که متصل به پین b از سون سگمنت است 0 می شود. و این روند ادامه دارد تا مقدار a از 6 بیشتر شود که حلقه for تمام می شود. نتیجه همه ی اتفاق های بالا باعث می شود عدد 2 روی سون سگمنت نمایش داده شود
اگر سوالی داشتید می تونید در قسمت نظرات مطرح کنید. اگر با برنامه نویسی اردوینو اشنا نیستید مطالب زیر را مطالعه کنید :
- برای اشنایی با دستورات مهم برنامه نویسی اردوینو اینجا کلیک کنید
- برای اشنایی با نحوه پروگرام کردن برد اردوینو (ریختن برنامه روی برد) اینجا کلیک کنید
کلیپ تست عملی پروژه :
پسورد فایل زیپ : www.emic.ir
نظر یادتون نره…
جالب بود ممنونم از شما
بد نبود خوب بود
سلام عرض ادب خدمت دوست گرامی تشکر میکنم از خدمات و توضیحات کامل تون
ایا میشه با یک اردینو چهار ردیف ۷ سگمنت سه شماره ای رو کنترول کرد
سلام عالی بود دمتون گرم.
یک سوال داشتم چطوری کاری کنیم که برعکس شمارش کنه؟