در این آزمایش میخواهیم نحوه ساخت یک مدار تشخیص واکنش را با استفاده از بورد Raspberry Pi به شما آموزش دهیم.
قطعاتی که به آنها نیاز دارید
قطعات مورد نیاز
جهت ساخت مدار تشخیص واکنش با Raspberry Pi شامل دو عدد دکمه فشاری و یک LED لمسی می باشد که طبق شکل زیر سیم کشی میکنیم.

کد های مورد نیاز جهت ساخت ابزار تشخیص واکنش در Raspberry Pi
جهت نگارش برنامه مورد نظر در پایتون، ابتدا کتابخانه های زیر را ایمپورت می نماییم:
from gpiozero import LED, Button from time import sleep
از آنجا که خروجی بر روی LED ظاهر می شود، متغیر و شماره پین مربوطه به صورت زیر تعریف می شود:
led = LED(4)
دستورات زیر LED را روشن و پس از وقفه 5 ثانیه ای آن را خاموش می نماید.
led.on() sleep(5) led.off()
با ذخیره دستورات و اجرای آنها عملکرد LED را بررسی می نماییم.
هدف از این مدار تعیین فردی است که زودتر دکمه را می فشارد. اگر طول مدت روشن بودن LED به صورت تصادفی باشد، جالب تر خواهد بود. بدین منظور از تابع uniform استفاده می شود که یک عدد تصادفی بین دو عدد را بر می گرداند. بنابراین دستور sleep(5) به sleep(uniform(5, 10)) تغییر می نماید.
در ادامه میخواهیم زمان فشرده شدن دکمه و اینکه چه کسی زودتر دکمه را فشرده است مشخص نماییم. برای این منظور دو دستور زیر پس از تعریف متغیر LED اضافه می شود:
right_button = Button(15) left_button = Button(14)
کد برنامه به صورت زیر خواهد بود:
from gpiozero import LED, Button from time import sleep from random import uniform led = LED(4) right_button = Button(15) left_button = Button(14) led.on() sleep(uniform(5, 10)) led.off()
در انتهای کد تابعی که با فشردن دکمه اجرا خواهد شد اضافه می شود که نشان می دهد که کدام پین دکمه فعال شده است.
def pressed(button): print(str(button.pin.number) + ' won the game')
در انتها با فشردن دکمه تابع فراخوانی خواهد شد. با فشردن right_button می توانید رشته right و با فشردن left_button رشته left را به تابع pressed ارسال کنید.
کد نهایی برنامه به صورت زیر خواهد بود:
from gpiozero import LED, Button from time import sleep from random import uniform led = LED(4) right_button = Button(15) left_button = Button(14) led.on() sleep(uniform(5, 10)) led.off() def pressed(button): print(str(button.pin.number) + ' won the game') exit() right_button.when_pressed = pressed left_button.when_pressed = pressed
به جای اعلام شماره پین دکمه ای که زودتر فشرده شده است، می توان با استفاده از تابع input نام افراد را دریافت و با تغییر تابع pressed به صورت زیر، نام فرد پیروز را نمایش داد:
from gpiozero import LED, Button from time import sleep from random import uniform from sys import exit led = LED(4) right_button = Button(15) left_button = Button(14) left_name = input('left player name is ') right_name = input('right player name is ') led.on() sleep(uniform(5, 10)) led.off() def pressed(button): if button.pin.number == 14: print(left_name + ' won the game') else: print(right_name + ' won the game') exit() right_button.when_pressed = pressed left_button.when_pressed = pressed