Daftar Isi:
- Langkah 1: Bahan
- Langkah 2: Pembuatan prototipe
- Langkah 3: Laser Memotong Kasing
- Langkah 4: Menyolder Tombol Arcade
- Langkah 5: Tumpuk Tombol & Hubungkan ke Papan Anda
- Langkah 6: Mengkode Neraka
- Langkah 7: Semuanya Bekerja
Video: Plug and Play Arcade Buttons: 7 Langkah (dengan Gambar)
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:57
Saya baru-baru ini mulai menggunakan Arduino untuk membuat proyek saya. Sebagai seorang desainer, saya suka membuat antarmuka khusus untuk game/proyek interaktif saya.
Satu masalah yang saya temui dalam menggunakan komunikasi serial cukup rumit dan rentan terhadap masalah dan bug dan saya menginginkan solusi yang cepat dan mudah untuk memungkinkan saya menggunakan tombol eksternal untuk mengontrol permainan saya.
Karena saya menginginkan perangkat plug and play yang dapat Anda gunakan secara instan dengan komputer mana pun, saya membeli Arduino Leonardo. Ini hampir identik dengan Uno, tetapi dengan beberapa perbedaan. Perbedaan utama yang akan saya gunakan untuk keuntungan saya untuk proyek ini adalah kemampuannya untuk bertindak sebagai HID. HID, atau perangkat antarmuka manusia adalah protokol USB yang memungkinkan komputer Anda mengenali dan menerima input dari keyboard dan mouse komputer tanpa harus menginstal driver khusus untuk setiap perangkat.
catatan: Anda juga dapat menggunakan Uno, jika Anda memperbarui firmware, seperti yang ditunjukkan di sini.
Langkah 1: Bahan
Untuk proyek ini Anda akan membutuhkan:
1x mikrokontroler berkemampuan HID (ada beberapa seperti Arduino mikro, Due & leonardo, saya akan menggunakan Arduino Leonardo)
1x USB ke kabel arduino (untuk Leonardo itu USB mikro)
3x tombol Arcade (saya beli ini)
1x papan tempat memotong roti tanpa solder
Resistor 3x 10k ohm
3x220 ohm resistor
Kabel jumper
Anda tentu saja dapat menambahkan lebih banyak tombol, atau menyolder semuanya ke papan tempat memotong roti untuk membuatnya lebih permanen.
Langkah 2: Pembuatan prototipe
Jadi, sebelum saya membeli tombol arcade yang ingin saya gunakan, saya mengujinya dengan tombol tekan standar. Pasang tombol dengan cara standar, saya yakin saya menggunakan resistor 10K ohm.
Pemrogramannya, berkat Leonardo, cukup sederhana. Anda harus menyertakan perpustakaan Keyboard. Saya menggunakan contoh standar Arduino "Pesan keyboard" sebagai dasar untuk kode saya.
Sekarang pertanyaannya adalah bagaimana Anda ingin tombol Anda berfungsi. Anda pada dasarnya memiliki dua pilihan, penekanan tombol tunggal dan aliran huruf yang berkelanjutan jika ditekan. Itu benar-benar tergantung pada proyek Anda apa yang Anda inginkan.
Jika Anda ingin satu kejadian terjadi jika tombol ditekan, seperti lompat atau sakelar hidup/mati, maka Anda akan memilih metode tekan tunggal. Dengan metode ini Anda melihat keadaan tombol, apakah naik atau turun? Kemudian Anda bandingkan dengan keadaan sebelumnya, apakah sudah naik atau turun? Jika status tombol sebelumnya sama dengan status tombol saat ini, tidak ada yang terjadi. Tetapi jika status tombol berubah, seperti saat Anda menekan atau melepaskan tombol, sesuatu akan terjadi. Dalam kode saya itu hanya mengetik huruf ketika tombol ditekan, bukan saat dilepaskan tetapi Anda bisa mengubahnya.
#sertakan "Keyboard.h"
const int buttonLeft = A0; // masukan pin untuk tombol tekan
const int buttonKanan = A1; const int buttonUp = A2;
int sebelumnyaButtonStateLeft = TINGGI; // untuk memeriksa status tombol tekan
int sebelumnyaButtonStateRight = TINGGI; int sebelumnyaButtonStateUp = TINGGI;
batalkan pengaturan() {
// jadikan pin pushButton sebagai input: pinMode(buttonLeft, INPUT); pinMode(tombolKanan, INPUT); pinMode(buttonUp, INPUT); // menginisialisasi kontrol atas keyboard: Keyboard.begin(); }
lingkaran kosong() {
// baca tombol tekan: int buttonStateLeft = digitalRead(buttonLeft); // jika status tombol telah berubah, if ((buttonStateLeft != PreviousButtonStateLeft) // dan saat ini ditekan: && (buttonStateLeft == HIGH)) { // ketik pesan Keyboard.print("a"); } // simpan status tombol saat ini untuk perbandingan waktu berikutnya: beforeButtonStateLeft = buttonStateLeft;
// baca tombol tekan:
int buttonStateRight = digitalRead(buttonRight); // jika status tombol telah berubah, if ((buttonStateRight != PreviousButtonStateRight) // dan saat ini ditekan: && (buttonStateRight == HIGH)) { // ketik pesan Keyboard.print("w"); } // simpan status tombol saat ini untuk perbandingan waktu berikutnya: beforeButtonStateRight = buttonStateRight;
// baca tombol tekan:
int buttonStateUp = digitalRead(buttonUp); // jika status tombol telah berubah, if ((buttonStateUp != PreviousButtonStateUp) // dan saat ini ditekan: && (buttonStateUp == HIGH)) { // ketik pesan Keyboard.print("d"); } // simpan status tombol saat ini untuk perbandingan waktu berikutnya: beforeButtonStateUp = buttonStateUp; }
Jika Anda ingin sesuatu terus terjadi selama tombol ditekan, seperti yang Anda inginkan untuk gerakan kiri atau kanan Anda, biarkan saja menulis huruf tanpa memeriksa status tombol sebelumnya. Ingatlah untuk menambahkan penundaan kecil untuk mencegahnya menjadi gila dan untuk melawan pantulan apa pun yang mungkin dimiliki tombol Anda. Ada cara yang lebih elegan untuk memecahkan masalah ini, tetapi ini mudah dan cepat.
#sertakan "Keyboard.h"
const int buttonLeft = A0; // masukan pin untuk tombol tekan
const int buttonKanan = A1; const int buttonUp = A2;
batalkan pengaturan() {
// jadikan pin pushButton sebagai input: pinMode(buttonLeft, INPUT); pinMode(tombolKanan, INPUT); pinMode(buttonUp, INPUT); // inisialisasi kontrol atas keyboard: Keyboard.begin(); }
lingkaran kosong() {
// baca tombol tekan: int buttonStateLeft = digitalRead(buttonLeft); if (buttonStateLeft == HIGH) //jika tombol ditekan { // ketik pesan Keyboard.print("a"); penundaan (50); // Penundaan untuk bouncing & untuk membiarkan komputer Anda mengejar }
// baca tombol tekan:
int buttonStateRight = digitalRead(buttonRight); if (buttonStateRight == HIGH) //jika tombol ditekan { // ketik pesan Keyboard.print("w"); penundaan (50); // Penundaan untuk bouncing & untuk membiarkan komputer Anda mengejar }
// baca tombol tekan:
int buttonStateUp = digitalRead(buttonUp); if (buttonStateUp == HIGH) //jika tombol ditekan { // ketik pesan Keyboard.print("d"); penundaan (50); // Penundaan untuk bouncing & untuk membiarkan komputer Anda mengejar } }
Anda selalu dapat menggunakan campuran kedua metode, tergantung pada apa yang paling sesuai dengan kebutuhan Anda.
Langkah 3: Laser Memotong Kasing
Untuk casing saya menggunakan mdf 3 mm, dengan insert Plexiglas 2mm. Saya menambahkan sisipan karena saya ingin menambahkan beberapa LED di bagian dalam kasing pada tahap selanjutnya untuk membuatnya bagus dan berkilau.
Saya memasukkan dimensi saya ke pembuat dan mengunduh file svg. Saya membukanya di Illustrator dan menambahkan lubang di tempat yang saya inginkan. Jika Anda tidak memiliki Illustrator, Anda dapat menggunakan Inkscape untuk langkah ini.
Anda tidak perlu menggunakan pemotong laser tentunya, karena ini adalah kotak sederhana dengan beberapa lubang di dalamnya. Seharusnya cukup mudah untuk membuatnya menggunakan alat-alat listrik yang lebih tradisional (atau bahkan alat-alat tangan!) Saya hanya sangat malas dan memiliki akses ke pemotong laser.
Langkah 4: Menyolder Tombol Arcade
Tombol arcade (atau setidaknya milik saya) terdiri dari tiga bagian. Casing plastik, dudukan LED (dengan LED di dalamnya) dan sakelar mikro. Saklar mikro adalah bagian tombol sebenarnya dari tombol dan itulah yang Anda perlukan untuk terhubung ke Arduino Anda. Ada tiga terminal (mata logam yang menonjol, tempat Anda akan menyolder kabel) pada sakelar mikro. Yang di atas (atau bawah, apa yang Anda inginkan) adalah tanah. Dua terminal lainnya adalah Normal Open (NO) dan Normal Closed (NC). TIDAK berarti bahwa jika sakelar ditekan, itu membuat koneksi. NC berarti jika tombol ditekan maka sambungan terputus. Kami akan menggunakan NO untuk proyek ini. Saya memberi label ground, NO dan NC pada saklar mikro saya di gambar.
Tombol saya menyala jadi saya menyolder kabel ke dudukan LED. Pastikan untuk memberi kode warna pada kabel Anda sehingga Anda tahu sisi mana yang anoda dan mana katoda (sisi positif dan negatif LED).
Saya menyolder pin header ke kabel saya, untuk membuatnya mudah digunakan dengan papan tempat memotong roti tanpa solder. Saya baru saja menyolder kawat ke pin header dan memasang sedikit heat shrink tubing untuk membuatnya lebih tangguh.
Langkah 5: Tumpuk Tombol & Hubungkan ke Papan Anda
Sekarang saatnya untuk menumpuk tombol arcade Anda di kasing Anda. Lepaskan cincin pengunci dari casing plastik dan tempelkan melalui lubang di casing. Masukkan cincin pengunci di sisi lain untuk menahan tombol di tempatnya. Tempelkan dudukan LED dan putar untuk menguncinya di tempatnya. Goyangkan sakelar mikro (ada lubang dan lubang kecil yang sejajar satu sama lain untuk menahannya).
Untuk menghubungkan sakelar ke papan, lepaskan tombol tekan yang mungkin Anda tambahkan atau mungkin tidak. Hubungkan kabel yang mengarah dari ground sakelar mikro ke ground Arduino dan resistor (tempat kaki tombol tekan berada). Hubungkan kabel terkemuka dari NO sakelar mikro ke 5v Arduino.
Untuk kabel LED hubungkan kabel negatif ke ground & positif melalui resistor 220OHM ke 5v. Jika Anda memasangnya seperti ini, mereka akan selalu aktif. Anda dapat menambahkannya ke dalam kode dan mengaktifkan dan menonaktifkannya secara sinkron dengan tombol jika Anda mau.
Langkah 6: Mengkode Neraka
Jadi, sekarang Anda telah memasang tombol baru yang bagus ke kode lama Anda dan tiba-tiba itu tidak berfungsi sebagaimana mestinya lagi. Huruf muncul dua atau tiga sekaligus dan tidak berfungsi sebagaimana mestinya dengan game HTML5 sederhana. Selamat datang untuk mendebounce neraka.
Hal pertama yang pertama. Kode yang kami tulis selama pembuatan prototipe? itu berfungsi dengan baik dan sederhana, tetapi tidak elegan. Jika Anda ingin menambahkan lebih banyak tombol, Anda harus menyalin & menempelkan potongan kode dan mengubah semua nilai di dalamnya. Jika Anda lupa salah satunya, Anda masuk ke neraka perbaikan bug. Deteksi tema di sini? Pengkodean adalah neraka, tetapi sangat menyenangkan, pemecahan masalah neraka.
Kami ingin kode pendek yang cantik. Jadi kita akan mengubah semua bilangan bulat tombol individual menjadi array. Dengan cara ini, jika Anda ingin menambahkan lebih banyak tombol, Anda hanya perlu mengubah jumlah tombol, pin di mana mereka berada & outputnya. Kami juga mengubah input kunci ke ASCII karena… berfungsi lebih baik?
Sekarang jika Anda seperti saya, Anda akan menulis cara sederhana dan mudah untuk menggunakan tombol dan itu tidak akan berfungsi sebaik yang Anda inginkan. Jadi Anda membuat versi baru (ingat anak-anak, pencadangan tambahan!), Coba berbagai hal, terus-menerus menulis kode yang lebih rumit yang masih tidak berfungsi dengan baik dan akhirnya kembali ke kode sederhana yang Anda tulis beberapa jam yang lalu DAN perhatikan kesalahan kecil yang langsung memperbaiki semuanya.
Biarkan saya menyelamatkan Anda dari perjalanan itu, inilah kode kerjanya:
Penafian: teks ini ditulis setelah berjam-jam pengkodean & perbaikan bug kode yang sangat sederhana. Harap abaikan tanda-tanda frustrasi dan fokus pada kode kerja yang diposting di bawah ini;)
#sertakan "Keyboard.h"#tentukan tombolJumlah 3
int tombolPin = {
A0, A1, A2 }; // Dimana tombolnya? int asciiLetter = { 97, 100, 119}; //Huruf dalam ASCII, di sini: a, d, w int buttonState[buttonAmount]; //Apakah tombolnya ditekan atau tidak?
batalkan pengaturan() {
for (int i = 0; i < buttonAmount; i++) { //menggilir array pinMode(buttonPin, INPUT); //set semua pin ke input } }
lingkaran kosong() {
for (int i = 0; i < buttonAmount; i++) //menggilir array { buttonState = digitalRead(buttonPin); //Apa yang dilakukan tombol-tombol itu? if (buttonState == HIGH){ //Jika tombol ditekan Keyboard.press(asciiLetter); //kirim huruf yang sesuai } else //jika tombol tidak ditekan { Keyboard.release(asciiLetter); //lepaskan surat } }
}
Langkah 7: Semuanya Bekerja
Nikmati pengontrol kustom plug & play Anda!
Jika Anda menyukai instruksi ini, harap pertimbangkan untuk memilih saya dalam kontes!
Direkomendasikan:
SSR Latching Circuit Dengan Push Buttons: 6 Langkah (dengan Gambar)
SSR Latching Circuit With Push Buttons: Saya berencana untuk menambahkan beberapa alat listrik ke bagian bawah meja kerja saya sehingga saya dapat membuat router tabel misalnya. Alat akan dipasang dari bagian bawah pada semacam pelat yang dapat dilepas sehingga dapat dipertukarkan. Jika Anda tertarik untuk melihat h
2-4 Player Plug and Play Raspberry Pi Arcade: 11 Langkah
2-4 Player Plug and Play Raspberry Pi Arcade: Pasang dan mainkan, bukan hanya istilah untuk konsol game plastik jelek yang Anda beli di Walmart lokal Anda. Kabinet arcade plug and play ini berfungsi, ditenagai oleh Raspberry Pi 3 yang menjalankan Retropie, mesin ini menawarkan kemampuan penyesuaian penuh dan
Plug 'n' Play Retro Arcade Console: 5 Langkah (dengan Gambar)
Plug 'n' Play Retro Arcade Console: Plug 'n' Play Retro Arcade Console mengemas banyak konsol dan game klasik favorit Anda ke dalam satu perangkat. Bagian terbaiknya adalah Anda hanya perlu menyambungkan konsol ke input video TV dan ke sumber daya untuk menikmati semua fa
DIY Build Mini USB Plug & Play Speakers (Dengan Opsi Mikrofon): 3 Langkah (dengan Gambar)
DIY Build Mini USB Plug & Play Speakers (Dengan Opsi Mikrofon): Halo teman-teman.! Saya ingin menunjukkan kepada Anda metode paling sederhana yang telah saya gunakan untuk speaker portabel. Metode ini sangat unik karena "belum ada tutorial tentang topik pembicara semacam ini". Beberapa alasan: Apakah Anda pernah menghadapi
Lembar Tata Letak Breadboard Tanpa Solder (Elektronik Plug and Play): 3 Langkah (dengan Gambar)
Lembar Tata Letak Breadboard Tanpa Solder (Elektronik Plug and Play): Ini adalah sistem menyenangkan yang dirancang untuk mengatasi beberapa masalah yang terkait dengan pembuatan papan tempat memotong roti di sirkuit. Ini adalah kumpulan file template sederhana yang digambar sesuai skala dengan komponen elektronik dunia nyata. Menggunakan program menggambar vektor, Anda cukup memindahkan c