این بازی زمان واکنش زمان واکنش دو بازیکن را آزمایش می کند و سریع ترین بازیکن را به عنوان برنده اعلام می کند. برای این کار از وقفه های خارجی و وقفه های تغییر پین در atmega328p استفاده می کنم. به هر بازی چهار فرصت می دهد، زمان هر شانس خلاصه می شود و سپس بازیکنی که حداقل زمان را داشته باشد به عنوان برنده اعلام می شود.
برای هدف آزمایشی، من از تابع شبه تصادفی در آن استفاده خواهم کرد، فقط برای پیگیری.
این بازی دارای دقت 1ms و دقت در حدود +/- 4ms است.
همچنین مفهوم debouncing را نشان می دهد .
انگیزه اصلی این بازی نشان دادن زیبایی وقفه های خارجی در زمان نظرسنجی و نشان دادن چگونگی کاهش اثر منفی با استفاده از تغییرات نرم افزاری است.
اجزاء
1) آردوینو با Atmega328p
2) سیم های جامپر
3) تخته نان
4) دکمه های فشاری
5) مقاومت های 1k
6) LED
زمینه
پروژه من از بازی اول سریع ترین انگشت الهام گرفته شده است، که در آن دو بازیکن وجود دارد، و هر دو چهار شانس می گیرند و زمان واکنش هر چهار شانس خلاصه می شود، هر کسی که حداقل زمان واکنش را داشته باشد، برنده بازی است.
- بازی با صفحه نمایش LCD شروع می شود که عبارت "بازی زمان واکنش" و سپس "فشار دکمه برای شروع" را می خواند.
- با فشار دادن دکمه فشار، بازی در 3.5 ثانیه شروع می شود.
- سپس یکی از چهار LED روشن می شود که Player1 دکمه مربوط به آن LED را فشار می دهد، زمان برای آن ثبت می شود، اگر Player1 دکمه دیگری را فشار دهد که با آن LED خاص مطابقت ندارد، جریمه 1000 میلی ثانیه به همراه زمان ضبط شده اعمال می شود. .
- امتیاز بعد از هر نوبت روی LCD نمایش داده می شود و این کار چهار بار تکرار می شود.
- پس از آن Player2 شروع می شود و همان کار تکرار می شود.
- سپس امتیاز هر دو بازیکن با هم مقایسه می شود و سریعترین بازیکن برنده اعلام می شود.
- پس از حدود دو ثانیه، "Push Button to Play Again" روی LCD نمایش داده می شود.
ساخت و ساز
در حال آپلود کد در آردوینو
f = <source_code's_file_name>
h = avr-gcc -g -mmcu=atmega328p -Wall -Os $(h).c $(f).c -o $(f).elf
avr-objcopy -j .text - j .data -O ihex $(f).elf $(f).hex
sudo avrdude -F -V -c arduino -p m328p -P /dev/ttyUSB* -b 57600 -e -U flash:w:$( و) هگز
فقط این چهار دستور را به ترتیب در ترمینال خود تایپ کنید و به یاد داشته باشید که نام فایل کد منبع را در متغیر "f" و نام فایل هدر را در متغیر "h" قرار دهید. این دستورات فقط برای کاربران لینوکس هستند.
دستور اول نام فایل را در متغیر "f" ذخیره می کند، دستور دوم برای تبدیل کد منبع به فایل .elf استفاده می شود، فرمان سوم برای تبدیل آن فایل .elf به فایل .hex استفاده می شود که می تواند در atmega328p آپلود شود، فرمان چهارم استفاده می شود. برای آپلود آن فایل .hex.
همه فایل های کد منبع و کتابخانه ها به همراه سرصفحه ها در codes.zip وجود دارد. همه آنها را در یک پوشه قرار دهید و دستورات بالا را اجرا کنید.
وقفه های خارجی
وقفه های خارجی به دلیل ماهیت غیرقابل پیش بینی آن برای تعامل با دنیای فیزیکی بسیار مفید هستند.
دو راه برای سنجش داده ها از پین های مختلف وجود دارد، یکی نظرسنجی و دیگری با استفاده از وقفه. هر دو نظرسنجی و وقفه دارای مزایا و معایبی هستند.
در نظرسنجی وضعیت هر پین را به صورت متوالی بررسی می کنید: