Isi kandungan:

Pasang dan Mainkan Butang Arcade: 7 Langkah (dengan Gambar)
Pasang dan Mainkan Butang Arcade: 7 Langkah (dengan Gambar)

Video: Pasang dan Mainkan Butang Arcade: 7 Langkah (dengan Gambar)

Video: Pasang dan Mainkan Butang Arcade: 7 Langkah (dengan Gambar)
Video: Mengenal Fightcade, Aplikasi Main Game Arcade Secara Online 2024, November
Anonim
Pasang dan Mainkan Butang Arcade
Pasang dan Mainkan Butang Arcade

Saya baru-baru ini mula menggunakan Arduino untuk membuat projek saya. Sebagai pereka, saya suka membuat antara muka khusus untuk permainan / projek interaktif saya.

Satu masalah yang saya hadapi ialah dengan menggunakan komunikasi bersiri agak rumit dan terdedah kepada masalah dan pepijat dan saya mahukan penyelesaian yang cepat dan mudah untuk membolehkan saya menggunakan butang luaran untuk mengawal permainan saya.

Oleh kerana saya mahukan peranti plug and play yang dapat anda gunakan dengan serta-merta dengan komputer mana pun, saya membeli Arduino Leonardo. Ia hampir sama dengan Uno, tetapi dengan beberapa perbezaan. Perbezaan utama yang akan saya manfaatkan untuk projek ini adalah kemampuannya bertindak sebagai PENYEMBUHAN. HID, atau peranti antara muka manusia adalah protokol USB yang membolehkan komputer anda mengenali dan menerima input dari papan kekunci dan tetikus komputer tanpa perlu memasang pemacu tersuai untuk setiap peranti.

nota: anda juga dapat menggunakan Uno, jika anda mengemas kini firmware, seperti yang ditunjukkan di sini.

Langkah 1: Bahan

Untuk projek ini, anda memerlukan:

1x mikrokontroler berkemampuan HID (ada beberapa seperti mikro Arduino, Due & leonardo, saya akan menggunakan Arduino Leonardo)

1x kabel USB ke arduino (untuk Leonardo itu USB mikro)

Butang 3x Arcade (saya beli ini)

1x papan roti tanpa pateri

Perintang 3x 10k ohm

Perintang 3x 220 ohm

Wayar pelompat

Anda tentu saja dapat menambahkan lebih banyak butang, atau menyolder semuanya ke papan roti untuk menjadikan semuanya lebih kekal.

Langkah 2: Prototaip

Prototaip
Prototaip
Prototaip
Prototaip
Prototaip
Prototaip

Oleh itu, sebelum saya membeli butang arked yang ingin saya gunakan, saya mengujinya dengan butang tekan standard. Kabelkan butang dengan cara standard, saya percaya saya menggunakan perintang 10K ohm.

Pengaturcaraan, berkat Leonardo, cukup mudah. Anda mesti memasukkan pustaka Papan Kekunci. Saya menggunakan contoh standard Arduino "Mesej papan kekunci" sebagai asas kod saya.

Sekarang persoalannya ialah bagaimana anda mahu butang anda berfungsi. Anda pada asasnya mempunyai dua pilihan, menekan butang tunggal dan aliran huruf berterusan jika ditolak. Itu sangat bergantung pada projek anda apa yang anda mahukan.

Sekiranya anda mahu satu kejadian berlaku sekiranya kekunci ditekan, seperti lompat atau suis hidup / mati maka anda akan memilih kaedah tekan tunggal. Dengan kaedah ini anda melihat keadaan butang, adakah naik atau turun? Kemudian anda membandingkannya dengan keadaan sebelumnya, apakah sudah naik atau turun? Sekiranya keadaan butang sebelumnya sama dengan keadaan butang semasa tidak ada yang berlaku. Tetapi jika keadaan butang berubah, seperti pada anda menekan atau lepaskan butang sesuatu berlaku. Dalam kod saya, ia hanya menaip huruf ketika butang ditekan, bukan ketika dilepaskan tetapi anda boleh mengubahnya.

#masuk "Keyboard.h"

butang const intLeft = A0; // pin input untuk butang tekan

butang const intRight = A1; butang const intUp = A2;

int sebelumnyaButtonStateLeft = TINGGI; // untuk memeriksa keadaan pushButton

int sebelumnyaButtonStateRight = TINGGI; int sebelumnyaButtonStateUp = TINGGI;

batal persediaan () {

// jadikan pin pushButton sebagai input: pinMode (buttonLeft, INPUT); pinMode (buttonRight, INPUT); pinMode (buttonUp, INPUT); // memulakan kawalan ke atas papan kekunci: Keyboard.begin (); }

gelung kosong () {

// baca butang tekan: int buttonStateLeft = digitalRead (buttonLeft); // jika keadaan butang telah berubah, jika ((buttonStateLeft! = sebelumnyaButtonStateLeft) // dan kini ditekan: && (buttonStateLeft == TINGGI)) {// taipkan mesej Keyboard.print ("a"); } // simpan keadaan butang semasa untuk perbandingan lain kali: sebelumnyaButtonStateLeft = buttonStateLeft;

// baca butang tekan:

int buttonStateRight = digitalRead (buttonRight); // jika keadaan butang telah berubah, jika ((buttonStateRight! = sebelumnyaButtonStateRight) // dan kini ditekan: && (buttonStateRight == TINGGI)) {// taipkan mesej Keyboard.print ("w"); } // simpan keadaan butang semasa untuk perbandingan lain kali: sebelumnyaButtonStateRight = buttonStateRight;

// baca butang tekan:

int buttonStateUp = digitalRead (buttonUp); // jika keadaan butang telah berubah, jika ((buttonStateUp! = sebelumnyaButtonStateUp) // dan kini ditekan: && (buttonStateUp == TINGGI)) {// taipkan mesej Keyboard.print ("d"); } // simpan keadaan butang semasa untuk perbandingan lain kali: sebelumnyaButtonStateUp = buttonStateUp; }

Sekiranya anda menginginkan sesuatu terus berlaku selagi butang ditekan, seperti yang anda mahukan untuk pergerakan kiri atau kanan, biarkan saja menulis surat tanpa memeriksa keadaan butang sebelumnya. Ingatlah untuk menambahkan sedikit kelewatan untuk mengelakkannya menjadi gila dan untuk mengatasi sebarang lonjakan yang mungkin ada pada butang anda. Terdapat cara yang lebih elegan untuk menyelesaikan masalah ini, tetapi ini mudah dan cepat.

#masuk "Keyboard.h"

butang const intLeft = A0; // pin input untuk butang tekan

butang const intRight = A1; butang const intUp = A2;

batal persediaan () {

// jadikan pin pushButton sebagai input: pinMode (buttonLeft, INPUT); pinMode (buttonRight, INPUT); pinMode (buttonUp, INPUT); // memulakan kawalan ke atas papan kekunci: Keyboard.begin (); }

gelung kosong () {

// baca butang tekan: int buttonStateLeft = digitalRead (buttonLeft); if (buttonStateLeft == TINGGI) // jika butang ditekan {// taipkan mesej Keyboard.print ("a"); kelewatan (50); // Kelewatan untuk bouncing & untuk membolehkan komputer mengejar}

// baca butang tekan:

int buttonStateRight = digitalRead (buttonRight); if (buttonStateRight == TINGGI) // jika butang ditekan {// taipkan mesej Keyboard.print ("w"); kelewatan (50); // Kelewatan untuk bouncing & untuk membolehkan komputer mengejar}

// baca butang tekan:

int buttonStateUp = digitalRead (buttonUp); if (buttonStateUp == TINGGI) // jika butang ditekan {// taipkan mesej Keyboard.print ("d"); kelewatan (50); // Kelewatan untuk bouncing & untuk membolehkan komputer mengejar}}

Anda sentiasa boleh menggunakan gabungan kedua-dua kaedah, bergantung pada yang paling sesuai dengan keperluan anda.

Langkah 3: Laser Memotong Kes

Laser Memotong Kes
Laser Memotong Kes

Untuk kes itu saya menggunakan mdf 3 mm, dengan sisipan Plexiglas 2mm. Saya menambah sisipan kerana saya ingin menambahkan beberapa LED di bahagian dalam casing pada peringkat kemudian agar lebih bagus dan bercahaya.

Saya memasukkan dimensi saya untuk membuat dan memuat turun fail svg. Saya membukanya di Illustrator dan menambahkan lubang di mana saya mahukannya. Sekiranya anda tidak mempunyai Illustrator, anda boleh menggunakan Inkscape untuk langkah ini.

Anda tidak perlu menggunakan pemotong laser, kerana ini adalah kotak sederhana dengan beberapa lubang di dalamnya. Cukup mudah untuk membuatnya menggunakan alat kuasa yang lebih tradisional (atau bahkan alat tangan!) Saya sangat malas dan mempunyai akses ke pemotong laser.

Langkah 4: Mematikan Butang Arcade

Butang Arked Pematerian
Butang Arked Pematerian
Butang Arked Pematerian
Butang Arked Pematerian
Butang Arked Pematerian
Butang Arked Pematerian

Butang arked (atau sekurang-kurangnya milik saya) terdiri daripada tiga bahagian. Sarung plastik, pemegang LED (dengan LED di dalamnya) dan suis mikro. Suis mikro adalah bahagian butang sebenar butang dan itulah yang anda perlukan untuk menyambung ke Arduino anda. Terdapat tiga terminal (bit logam yang melekat, di mana anda akan memasang kabel anda) pada suis mikro. Yang di atas (atau bawah, apa yang anda mahukan) adalah tanah. Dua terminal lain adalah Normal Open (NO) dan Normal Closed (NC). TIDAK bermaksud bahawa jika suis ditekan, ia akan membuat sambungan. NC bermaksud bahawa jika butang ditekan, ia memutuskan sambungan. Kami akan menggunakan TIDAK untuk projek ini. Saya melabelkan tanah, TIDAK dan NC pada suis mikro saya dalam gambar.

Butang saya menyala jadi saya menyisipkan wayar ke pemegang LED. Pastikan untuk mewarnakan wayar anda supaya anda tahu sisi mana anoda dan katod mana (sisi positif dan negatif LED).

Saya memasang pin header pada wayar saya, agar mudah digunakan dengan papan roti tanpa pateri. Saya hanya menyisipkan wayar ke pin header dan meletakkan sedikit tiub pengecutan panas untuk menjadikannya lebih tahan.

Langkah 5: Susun Butang & Sambungkannya ke Papan Anda

Susun Butang & Sambungkannya ke Papan Anda
Susun Butang & Sambungkannya ke Papan Anda
Susun Butang & Sambungkannya ke Papan Anda
Susun Butang & Sambungkannya ke Papan Anda
Susun Butang & Sambungkannya ke Papan Anda
Susun Butang & Sambungkannya ke Papan Anda
Susun Butang & Sambungkannya ke Papan Anda
Susun Butang & Sambungkannya ke Papan Anda

Kini tiba masanya untuk menyusun butang arked dalam kes anda. Tanggalkan cincin pengunci dari selongsong plastik dan tempelkan melalui lubang dalam casing. Tali cincin pengunci di sebelah lain untuk menahan butang di tempatnya. Masukkan pemegang LED dan putar untuk menguncinya ke tempatnya. Bergerak pada suis mikro (terdapat sedikit lubang dan lubang kecil yang saling bersesuaian untuk menahannya).

Untuk menyambungkan suis ke papan keluarkan butang tekan yang mungkin telah anda tambahkan atau tidak. Sambungkan wayar yang mengarah dari tanah suis mikro ke tanah Arduino dan perintang (di mana kaki butang tekan). Sambungkan wayar yang mengarah dari NO suis mikro ke 5v Arduino.

Untuk wayar LED sambungkan wayar negatif ke tanah & positif melalui perintang 220OHM ke 5v. Sekiranya anda memasangnya seperti ini, mereka akan sentiasa aktif. Anda boleh menambahkannya dalam kod dan membuat mereka hidup dan mati segerak dengan butang jika anda mahu.

Langkah 6: Coding Hell

Jadi, sekarang anda telah melekatkan butang baru yang menarik kepada anda kod lama dan tiba-tiba ia tidak berfungsi seperti yang sepatutnya. Huruf muncul dua atau tiga sekaligus dan tidak berfungsi sebagaimana mestinya dengan permainan HTML5 sederhana. Selamat datang untuk melepaskan neraka.

Perkara pertama didahulukan. Kod yang kami tulis semasa membuat prototaip? ia berfungsi dengan baik dan sederhana, tetapi tidak elegan. Sekiranya anda ingin menambah lebih banyak butang, anda perlu menyalin & menampal coretan kod dan menukar semua nilai di dalamnya. Sekiranya anda melupakan salah satu daripadanya, anda memasuki neraka pembaikan pepijat. Kesan tema di sini? Pengekodan adalah neraka, tetapi penyelesaian masalah yang sangat menyeronokkan.

Kami mahukan kod pendek yang cantik. Oleh itu, kita akan menukar semua bilangan bulat individu menjadi tatasusunan. Dengan cara ini, jika anda ingin menambah lebih banyak butang, anda hanya perlu menukar jumlah butang, pin di mana ia berada & outputnya. Kami juga mengubah input utama menjadi ASCII kerana … ia berfungsi lebih baik?

Sekarang jika anda seperti saya, anda akan menulis cara mudah dan senang menggunakan butang dan ia tidak akan berfungsi seperti yang anda mahukan. Oleh itu, anda membuat versi baru (ingat anak-anak, cadangan tambahan!), Mencuba pelbagai perkara, menulis kod yang selalu lebih rumit yang masih tidak berfungsi dengan baik dan akhirnya kembali ke kod mudah yang anda tulis beberapa jam yang lalu DAN perhatikan ralat kecil yang serta-merta memperbaiki segalanya.

Izinkan saya meluangkan perjalanan anda, inilah kod kerja:

Penafian: teks ini ditulis setelah berjam-jam pengekodan & bug memperbaiki kod yang sangat mudah. Jangan abaikan tanda-tanda kekecewaan dan fokus pada kod kerja yang dipaparkan di bawah;)

#sertakan "Keyboard.h" #tentukan butangJumlah 3

int buttonPin = {

A0, A1, A2}; // Di mana butang? int asciiLetter = {97, 100, 119}; // Surat dalam ASCII, di sini: a, d, w int buttonState [buttonAmount]; // Adakah butang ditekan atau tidak?

batal persediaan () {

untuk (int i = 0; i <buttonAmount; i ++) {// kitar melalui array pinMode (buttonPin , INPUT); // tetapkan semua pin untuk dimasukkan}}

gelung kosong () {

untuk (int i = 0; i <buttonAmount; i ++) // kitar melalui array {buttonState = digitalRead (buttonPin ); // Apa yang dilakukan oleh butang? if (buttonState == TINGGI) {// Sekiranya butang ditekan Keyboard.press (asciiLetter ); // kirim surat yang sesuai} lain // jika butang tidak ditekan {Keyboard.release (asciiLetter ); // lepaskan surat itu}}

}

Langkah 7: Semuanya Berfungsi

Nikmati alat kawalan khas plug & play anda!

Sekiranya anda menyukai arahan ini, pertimbangkan untuk memilih saya dalam peraduan ini!

Disyorkan: