جلسه دهم: شمارش تعداد دفعات فشرده شدن کلید
در این پروژه از مبحث از آموزش آردوینو قصد داریم تا شما را بیشتر با نحوه کار با متغیرها در برنامه نویسی بردهای آردوینو آشنا کنیم. در این جلسه از آموزش برنامه نویسی بردهای آردوینو می خواهیم برنامه بنویسیم که تعداد دفعات فشرده شدن یک کلید را شمارش کند و زمانیکه کلید، تعداد 4 بار فشرده شد لامپ LED موجود بر روی برد Arduino که به پایه شماره 13 آردوینو متصل است تغییر وضعیت دهید، یعنی اینکه اگر لامپ ال.ای.دی روشن است خاموش شود و اگر خاموش است روشن شود.
لیست قطعات مورد نیاز
برد آردوینو Arduino UNO R3 مدل DIP | 1 عدد |
تک سوئیچ 2 پایه DIP سایز 6x6x5 میلیمتر | 1 عدد |
ولوم 10kΩ | 1 عدد |
برد بورد (پروجکت برد) مدل GL | 1 عدد |
سیم جامپر برد بوردی مدل دو سر نری (سری 40تایی) | 1 عدد |
نقشه شماتیک پروژه
ابتدا مطابق تصویر زیر و نقشه شماتیک یک کلید را به آردوینو متصل کنید. برای این منظور کافی است ابتدا یک پایه کلید را توسط یک تکه سیم به مثبت منبع تغذیه با همان پایه VCC در آردوینو متصل کنید. سپس پایه دوم کلید را با یک تکه سیم به پین دیجیتال شماره 2 آردوینو متصل کنید. پس از اتصال کلید به آردوینو نوبت اتصال مقاومت 10 کیلو اهم می رسد برای این منظور کافی است یک پایه مقاومت را به ولتاژ منفی منبع تغذیه یا پین GND در آردوینو متصل کنید و بعد از آن پایه بعدی مقاومت را به وسیله یک تکه سیم به پین دیجیتال شماره 2 آردوینو متصل کنید.
شرح عملکرد پروژه
با توجه کردن به نقشه شماتیک متوجه خواهید شد پین دیجیتال شماره 2 آردوینو به صورت همزمان هم به یکسر مقاومت 10 کیلو اهمی و هم به یکسر کلید متصل شده است. زمانیکه کلید فشرده نشده و به طور ساده تر می توان گفت زمانی که کلید باز است، پایه دیجیتال شماره 2 آردوینو توسط مقاومت 10 کیلو اهمی به منفی منبع تغذیه متصل شده و یک ولتاژ منفی بسیار کوچک بر روی آن ایجاد می کند (در دیجیتال منظور از ولتاژ منفی یا منفی منبع تغذیه منطق 0 است). و بلعکس زمانیکه کلید فشرده شده باشد با به طور ساده تر کلید بسته باشد. پایه دیجیتال شماره 2 آردوینو توسط کلید به صورت مستقیم به مثبت منبع تغذیه متصل می شود و یک ولتاژ مثبت نزدیک به 5 ولت بر روی آن ایجاد می کند (در دیجیتال منظور از ولتاژ مثبت منطق 1 است).
در این مثال در حقیقت ما در مبحث دیجیتال با استفاده از کلید، حالت 1 را ایجاد می کنیم و با استفاده از مقاومت 10 کیلو اهمی حالت 0 را ایجاد می کنیم. چون در مدار این پروژه یکسر مقاومت به منفی منبع تغذیه متصل شده، آنرا مقاومت پائین کشنده می نامیم، این به این معنا است که تا زمانیکه کلید فشرده نشده است مقاومت 10 کیلو اهمی باعث 0 یا LOW نگه داشتن پایه دیجیتال شماره 2 آردوینو می شود.
سورس کد برنامه در نرم افزار آردوینو
در برنامه نوشته شده، ابتدا وضعیت قبلی کلید با وضعیت جدید کلید که در هر بار تکرار شدن حلقه خوانده می شود مقایسه می شود، حال اگر مقدار متغیر وضعیت جدید کلید که تازه خوانده شده است با مقدار متغیر وضعیت قبلی کلید، متفاوت باشد، آنگاه محتوای متغیر وضعیت قبلی کلید بروز می شود و محتوای متغیر وضعیت جدید کلید در آن ریخته می شود و بعد از آن به متغیری که جهت شمارش تعداد دفعات کلید در برنامه تعیریف شده است یک واحد اضافه می شود.
در انتهای برنامه توسط یک دستور شرطی دیگر، مقدار متغیری که جهت شمارش کلید تعریف شده است بر عدد 4 تقسیم می شود و در صورت اینکه باقیمانده تقسیم برابر با صفر بود وضعیت پایه شماره 13 برد آردوینو معکوس می شود. به این ترتیب اگر کلید 4 بار فشرده شود پایه شماره 13 برد آردوینو که به صورت مشترک به لامپ LED تعبیه شده بر روی برد آردوینو متصل است، اگر روشن باشد خاموش می شود و اگر خاموش باشد روشن می شود.
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 |
const int buttonPin = 2; const int ledPin = 13; int buttonPushCounter = 0; int buttonState = 0; int lastButtonState = 0; void setup() { pinMode(buttonPin, INPUT); pinMode(ledPin, OUTPUT); Serial.begin(9600); } void loop() { buttonState = digitalRead(buttonPin); if (buttonState != lastButtonState) { if (buttonState == HIGH) { buttonPushCounter++; Serial.println("on"); Serial.print("number of button pushes: "); Serial.println(buttonPushCounter); } else { Serial.println("off"); } delay(50); } lastButtonState = buttonState; if (buttonPushCounter % 4 == 0) { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } } |
میشه به جای استفاده از مقاومت از دستور input-pullup استفاده کنیم؟
سلام دوست عزیز
در مثال آموزشی فوق مقاومت به صورت Pull Down به برد آردوینو متصل شده است، اما شما می توانید با برداشتن مقاومت از مدار و اتصال کلید به پلاریته منفی تغذیه مدار، در برنامه ورودی را به صورت Pull Up تعریف کنید اما باید زیر برنامه موجود در وضعیت کلید ها را نیز با یکدیگر جابجا کنید.
ممنون از پروژه های عالی
وسایت خوبتون
سلام ارزش وجودی مقاومت در مدار چیه اصلا چرا در مسیر کلید مقاومت باید باشه
ایا وجود مقاومت باعث کاهش خطای شمارش میشه ؟
با سلام و احترام
بله، وجود مقاومت های بالا کشنده و یا پایین کشنده در مدار باعث کاهش اثرات نویز مدار و در نتیجه افزایش دقت در عملکرد مدار می شود.