Permainan Refleks Arduino: 3 Langkah

Permainan Refleks Arduino: 3 Langkah

Isi kandungan:

Anonim

Kami mencipta permainan berasaskan Arduino kecil yang membolehkan anda mengukur refleks anda. Ringkasnya, sebaik sahaja anda melihat lampu LED dihidupkan, anda perlu menekan butang. Arduino mengukur masa tindak balas anda dan mencetaknya pada paparan LCD. Ia juga menjejaki skor terbaik setakat ini (sudah tentu, ia ditetapkan semula setiap kali Arduino diset semula).

Semua perkakasan yang diperlukan telah dimasukkan ke dalam Arduino Uno kit yang saya beli dari eBay untuk kira-kira 20 €.

Perkakasan yang digunakan:

  • Arduino Uno, atau yang serupa
  • Paparan aksara 16x2 LCD
  • Potentiometer untuk mengawal kontras
  • Tekan butang
  • Diod LED
  • 220 ohm perintang
  • Wayar melompat

Bekalan:

Langkah 1: Perkakasan

Menyambung paparan watak LCD kepada Arduino diterangkan dengan baik di tempat lain, saya menggunakan tutorial ini, antara lain:

http: //learn.adafruit.com/character-lcds/wiring-a …

Pendek kata, data mengarahkan LCD <-> Arduino adalah seperti berikut:

  • RS <-> D7
  • EN <-> D8
  • DB4 <-> D9
  • DB5 <-> D10
  • DB6 <-> D11
  • DB7 <-> D12

Butang tekan terus disambungkan ke Arduino (satu pin ke Ground, yang lain ke D3), menggunakan perintang pull-up dalaman (oleh itu menggunakan mod INPUT_PULLUP untuk pin 3).

Lampu LED disambungkan kepada Arduino pin D2 melalui perintang 220 ohm.

Langkah 2: Perisian

Perisian ini mudah, ia hanya menggunakan perpustakaan LiquidCrystal.

Arduino memilih jeda rawak antara 1 dan 3 saat dan menghidupkan LED apabila jeda telah berlalu.

Pengguna perlu menekan butang secepat mungkin, dan Arduino mengukur masa. Ia kemudiannya memaparkan masa menggunakan paparan LCD, dan mengemas kini skor tinggi jika diperlukan. Kemudian LED dimatikan dan satu lagi jeda bermula.

#include / / mulakan pustaka dengan menghubungkan mana-mana pin antaramuka LCD yang diperlukan // dengan nombor pin Arduino yang disambungkan kepada const int rs = 7, en = 8, d4 = 9, d5 = 10, d6 = 11, d7 = 12; const int buttonPin = 3; const int ledPin = 2; LiquidCrystal lcd (rs, en, d4, d5, d6, d7); bool waitingForLed = true; permulaan lama tidak ditandatangani; unsigned long hiScore = 10000; tidak lama berturut-turut; void setup () {pinMode (ledPin, OUTPUT); pinMode (buttonPin, INPUT_PULLUP); // setkan lajur dan baris LCD: lcd.begin (16, 2); onTime = millis () + rawak (1000, 3000); } void processResult (diffTime lama tidak ditandatangani) {lcd.setCursor (0, 0); lcd.print (diffTime); lcd.print (""); jika (diffTime <hiScore) {hiScore = diffTime; lcd.print (""); lcd.setCursor (0, 1); lcd.print ("Hi mark:"); lcd.print (hiScore); lcd.print (""); }} void loop () {int buttonValue = digitalRead (buttonPin); jika (buttonValue == LOW) {if (waitingForLed) {// "menghukum" pemain untuk menekan butang sebelum LED di // effectivelly mencegah klik cepat pada Time + = 1000; } else {digitalWrite (ledPin, LOW); unsigned long nowTime = millis (); tidak lama diffTime = nowTime - startTime; prosesResult (diffTime); onTime = millis () + rawak (1000, 3000); waitingForLed = true; } kelewatan (100); } else {if (waitingForLed && (millis ()> onTime)) {startTime = millis (); digitalWrite (ledPin, TINGGI); waitingForLed = false; }}}

Langkah 3: Kerja Masa Depan

Saya akan cuba untuk melaksanakan semula permainan menggunakan paparan 4-segmen 4 digit dan menggunakan Arduino Pro Mini, kerana faktor bentuk, dan pek di kandang sendiri.