Isi kandungan:
- Langkah 1: Bahan
- Langkah 2: Prototaip
- Langkah 3: Laser Memotong Kes
- Langkah 4: Mematikan Butang Arcade
- Langkah 5: Susun Butang & Sambungkannya ke Papan Anda
- Langkah 6: Coding Hell
- Langkah 7: Semuanya Berfungsi
Video: Pasang dan Mainkan Butang Arcade: 7 Langkah (dengan Gambar)
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:11
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
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
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 (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
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:
Antaramuka Dua Kawat (DMX) Dengan Skrin dan Butang: 5 Langkah (dengan Gambar)
Antaramuka Dua Kawat (DMX) Dengan Skrin dan Butang: DMX adalah protokol yang digunakan untuk mengawal lekapan lampu tahap dan kesan khas. Setiap peranti mempunyai salurannya sendiri yang bertindak balas. Saluran ini dapat dipilih oleh suis DIP atau paparan dengan butang. Terdapat banyak cara untuk memilih
Mainkan CD Tanpa Pemain CD, Menggunakan AI dan YouTube: 10 Langkah (dengan Gambar)
Mainkan CD Tanpa Pemain CD, Menggunakan AI dan YouTube: Ingin memainkan CD anda tetapi tidak mempunyai pemain CD lagi? Tidak sempat merobek CD anda? Merobeknya tetapi fail tidak tersedia apabila diperlukan? Tidak ada masalah. Biarkan AI (kecerdasan buatan) mengenal pasti CD anda, dan YouTube memainkannya! Saya menulis aplikasi Android
MAINKAN IPOD RECHARGE MENGGUNAKAN BOOMBOX LAMA - Petunjuk dan Petua: 5 Langkah (dengan Gambar)
BERMAIN DAN MENINGKATKAN IPOD MENGGUNAKAN BOOMBOX LAMA - Petunjuk dan Petua: Pertimbangkan ini sebagai tambahan kepada mod boombox iPod yang lain. Saya mengakui saya meminjam dari Instructables yang lain. Untuk tidak mengambil instruksinya, berikut adalah " berteriak " kepada mereka yang memberi inspirasi kepada saya untuk menyelami mod saya sendiri. Terima kasih. Boleh diajar
Lembaran Susun Atur Papan Roti Solderless (pasang dan Mainkan Elektronik): 3 Langkah (dengan Gambar)
Lembaran Tata Letak Solderless Breadboard (plug and Play Electronics): Berikut adalah sistem yang menyeronokkan yang direka untuk menguruskan beberapa sakit kepala yang terlibat dalam papan roti. Ini adalah sekumpulan fail templat yang mudah dibuat dengan skala dengan komponen elektronik dunia nyata. Dengan menggunakan program melukis vektor, anda hanya menggerakkan c
Pasang Label Custom dalam Butang Tekan Happ: 6 Langkah
Pasang Label Tersuai dalam Tombol Tekan Happ: Oleh itu, anda mempunyai sendiri beberapa Tombol Tekan Happ seperti " Tombol Tekan Bercahaya Profil Rendah " terletak di sini: http: //www.happcontrols.com/pushbuttons/ilumn3.htmt Atas sebab apa pun anda tidak mendapat perkhidmatan percetakan tersuai mereka tetapi sekarang anda