Talaan ng mga Nilalaman:

Plug and Play Arcade Buttons: 7 Hakbang (na may Mga Larawan)
Plug and Play Arcade Buttons: 7 Hakbang (na may Mga Larawan)

Video: Plug and Play Arcade Buttons: 7 Hakbang (na may Mga Larawan)

Video: Plug and Play Arcade Buttons: 7 Hakbang (na may Mga Larawan)
Video: 3-часовой марафон паранормальных и необъяснимых историй 2024, Nobyembre
Anonim
Plug and Play Arcade Buttons
Plug and Play Arcade Buttons

Kamakailan nagsimula akong gumamit ng Arduino upang gawin ang aking mga proyekto. Bilang isang taga-disenyo gustung-gusto kong gumawa ng mga pasadyang interface para sa aking mga laro / interactive na proyekto.

Ang isang problema na nahanap ko sa paggamit ng serial na komunikasyon ay medyo kumplikado at madaling kapitan ng problema at mga bug at nais ko ng isang mabilis at madaling solusyon upang payagan akong gumamit ng panlabas na mga pindutan upang makontrol ang aking mga laro.

Tulad ng gusto ko ng isang plug at play na aparato na maaari mong magamit agad sa anumang computer, bumili ako ng isang Arduino Leonardo. Ito ay halos magkapareho sa isang Uno, ngunit may kaunting pagkakaiba. Ang pangunahing pagkakaiba na gagamitin ko sa aking kalamangan para sa proyektong ito ay ang kakayahang kumilos bilang isang HID. Ang isang HID, o aparato ng interface ng tao ay isang USB protocol na nagpapahintulot sa iyong computer na kilalanin at tanggapin ang pag-input mula sa mga keyboard at isang computer mouse nang hindi kinakailangang mag-install ng mga pasadyang driver para sa bawat aparato.

tandaan: maaari mo ring gamitin ang isang Uno, kung na-update mo ang firmware, tulad ng ipinakita dito.

Hakbang 1: Mga Kagamitan

Para sa proyektong ito kakailanganin mo:

1x HID may kakayahang microcontroller (mayroong ilang tulad ng Arduino micro, Dahil at leonardo, gagamitin ko ang Arduino Leonardo)

1x USB sa arduino cable (para sa Leonardo USB micro ito)

Mga pindutan ng 3x Arcade (binili ko ang mga ito)

1x solderless breadboard

3x 10k ohm resistors

3x 220 ohm resistors

Jumper wires

Maaari kang magdagdag ng kurso ng higit pang mga pindutan, o maghinang ng lahat sa isang breadboard upang gawing mas permanente ang mga bagay.

Hakbang 2: Prototyping

Prototyping
Prototyping
Prototyping
Prototyping
Prototyping
Prototyping

Kaya, bago ko bilhin ang mga arcade button na nais kong gamitin ay nasubukan ko ito gamit ang karaniwang mga pindutan ng push. Wire up ang mga pindutan sa karaniwang paraan, naniniwala akong gumamit ako ng 10K ohm resistors.

Ang programa, salamat kay Leonardo, ay medyo simple. Kailangan mong isama ang library ng Keyboard. Ginamit ko ang karaniwang pamantayan ng Arduino na "Mensahe sa keyboard" bilang batayan para sa aking code.

Ngayon ang tanong ay kung paano mo nais na gumana ang iyong mga pindutan. Karaniwan kang may dalawang pagpipilian, pagpindot sa solong mga pindutan at isang tuluy-tuloy na stream ng mga titik kung maitulak. Depende talaga ito sa iyong proyekto kung ano ang gusto mo.

Kung nais mo ang isang solong halimbawa ng isang bagay na mangyayari kung ang isang susi ay pinindot, tulad ng isang jump o isang on / off switch pagkatapos ay pipiliin mo ang solong pamamaraan ng pagtulak. Sa pamamaraang ito titingnan mo ang estado ng pindutan, pataas o pababa ba ito? Pagkatapos ihambing mo ito sa nakaraang estado, mayroon na bang pataas o pababa? Kung ang nakaraang estado ng pindutan ay kapareho ng kasalukuyang estado ng pindutan na walang nangyayari. Ngunit kung nagbabago ang estado ng pindutan, tulad ng sa pagpindot sa iyo o paglabas ng isang pindutan may nangyari. Sa aking code nagta-type lamang ito ng isang titik kapag ang pindutan ay naitulak, hindi kapag inilabas ngunit maaari mo itong baguhin.

# isama ang "Keyboard.h"

Const int buttonLeft = A0; // input pin para sa pushbutton

Const int buttonRight = A1; Const int buttonUp = A2;

int nakaraangButtonStateLeft = MATAAS; // para sa pagsuri sa estado ng isang push Button

int nakaraangButtonStateRight = TAAS; int nakaraangButtonStateUp = MATAAS;

walang bisa ang pag-setup () {

// gawin ang push Button pin isang input: pinMode (buttonLeft, INPUT); pinMode (buttonRight, INPUT); pinMode (buttonUp, INPUT); // simulang kontrol sa keyboard: Keyboard.begin (); }

void loop () {

// read the pushbutton: int buttonStateLeft = digitalRead (buttonLeft); // kung ang estado ng pindutan ay nagbago, kung ((buttonStateLeft! = nakaraang ButtonStateLeft) // at kasalukuyang pinindot ito: && (buttonStateLeft == HIGH)) {// i-type ang isang mensahe na Keyboard.print ("a"); } // i-save ang kasalukuyang estado ng pindutan para sa paghahambing sa susunod: nakaraangButtonStateLeft = buttonStateLeft;

// basahin ang pushbutton:

int buttonStateRight = digitalRead (buttonRight); // kung ang estado ng pindutan ay nagbago, kung ((buttonStateRight! = nakaraang ButtonStateRight) // at kasalukuyan itong pinindot: && (buttonStateRight == MATAAS)) {// i-type ang isang mensahe na Keyboard.print ("w"); } // i-save ang kasalukuyang estado ng pindutan para sa paghahambing sa susunod: nakaraangButtonStateRight = buttonStateRight;

// basahin ang pushbutton:

int buttonStateUp = digitalRead (buttonUp); // kung ang estado ng pindutan ay nagbago, kung ((buttonStateUp! = nakaraang ButtonStateUp) // at kasalukuyan itong pinindot: && (buttonStateUp == TAAS)) {// i-type ang isang mensahe na Keyboard.print ("d"); } // i-save ang kasalukuyang estado ng pindutan para sa paghahambing sa susunod: nakaraangButtonStateUp = buttonStateUp; }

Kung nais mo ang isang bagay na patuloy na mangyari hangga't ang pindutan ay naitulak, tulad ng nais mo para sa isang kaliwa o kanang kilusan mo, hayaan mo lamang itong magsulat ng isang titik nang hindi sinusuri ang nakaraang estado ng pindutan. Tandaan na magdagdag ng isang maliit na pagkaantala upang maiwasang mabaliw at upang kontrahin ang anumang pag-bounce na maaaring mayroon ang iyong mga pindutan. Mayroong mas matikas na paraan ng paglutas ng problemang ito, ngunit madali at mabilis ito.

# isama ang "Keyboard.h"

Const int buttonLeft = A0; // input pin para sa pushbutton

Const int buttonRight = A1; Const int buttonUp = A2;

walang bisa ang pag-setup () {

// gawin ang push Button pin isang input: pinMode (buttonLeft, INPUT); pinMode (buttonRight, INPUT); pinMode (buttonUp, INPUT); // simulang kontrol sa keyboard: Keyboard.begin (); }

void loop () {

// read the pushbutton: int buttonStateLeft = digitalRead (buttonLeft); kung (buttonStateLeft == MATAAS) // kung ang pindutan ay pinindot {// i-type ang isang mensahe Keyboard.print ("a"); antala (50); // Pagkaantala para sa pagba-bounce at upang hayaang makibalita ka sa computer}

// basahin ang pushbutton:

int buttonStateRight = digitalRead (buttonRight); kung (buttonStateRight == MATAAS) // kung ang pindutan ay pinindot {// i-type ang isang mensahe Keyboard.print ("w"); antala (50); // Pagkaantala para sa pagba-bounce at upang hayaang makibalita ka sa computer}

// basahin ang pushbutton:

int buttonStateUp = digitalRead (buttonUp); kung (buttonStateUp == MATAAS) // kung ang pindutan ay pinindot {// i-type ang isang mensahe Keyboard.print ("d"); antala (50); // Delay for bounce & to let you computer catch up}}

Maaari mong palaging gumamit ng isang halo ng parehong pamamaraan, nakasalalay sa kung ano ang pinakaangkop sa iyong mga pangangailangan.

Hakbang 3: Pagputol ng Kaso ng Laser

Pagputol ng Kaso sa Laser
Pagputol ng Kaso sa Laser

Para sa kaso ginamit ko ang 3 mm mdf, na may insert na 2mm Plexiglas. Idinagdag ko ang insert na nais kong magdagdag ng ilang mga LEDs sa loob ng kaso sa susunod na yugto upang gawin itong maganda at glowy.

In-input ko ang aking mga sukat upang makercase at na-download ang svg file. Binuksan ko ito sa Illustrator at idinagdag ang mga butas kung saan ko gusto ang mga ito. Kung wala kang Illustrator maaari kang gumamit ng Inkscape para sa hakbang na ito.

Hindi mo kailangang gumamit ng isang laser cutter syempre, dahil ito ay isang simpleng kahon na may ilang mga butas dito. Dapat ay sapat itong madali upang likhain ito gamit ang mas tradisyunal na mga tool sa kuryente (o kahit na mga tool sa kamay!) Napakatamad lang ako at may access sa isang laser cutter.

Hakbang 4: Mga Soldering Arcade Button

Mga Soldering Arcade Button
Mga Soldering Arcade Button
Mga Soldering Arcade Button
Mga Soldering Arcade Button
Mga Soldering Arcade Button
Mga Soldering Arcade Button

Ang isang pindutan ng arcade (o hindi bababa sa minahan) ay binubuo ng tatlong bahagi. Ang plastic casing, ang may hawak ng LED (na may LED dito) at ang micro switch. Ang micro switch ay ang aktwal na bahagi ng pindutan ng pindutan at ito ang kakailanganin mong kumonekta sa iyong Arduino. Mayroong tatlong mga terminal (metal bit na dumidikit, kung saan mo hihihinang ang iyong mga wire) sa micro switch. Ang nasa itaas (o sa ibaba, kung ano ang gusto mo) ay ang lupa. Ang dalawa pang mga terminal ay ang Normal Open (NO) at Normal Closed (NC). HINDI nangangahulugan na kung ang switch ay pinindot gumawa ito ng isang koneksyon. Nangangahulugan ang NC na kung pinindot ang pindutan ay sinisira nito ang koneksyon. Gagamitin namin ang HINDI para sa proyektong ito. Nilagyan ko ng label ang ground, NO at NC sa aking micro switch sa mga larawan.

Ang aking mga pindutan ay naiilawan kaya naghinang ako ng mga wire sa may hawak ng LED. Siguraduhing i-code ang kulay ng iyong mga wire upang malaman mo kung aling panig ang anode at alin ang katod (positibo at negatibong mga panig ng LED).

Nag-solder ako ng mga pin ng header sa aking mga wire, upang gawing madaling gamitin ang mga ito gamit ang isang solderless breadboard. Inilagay ko lang ang kawad sa isang header pin at naglagay ng kaunting init na pag-urong ng tubo sa paligid upang mas maging matatag sila.

Hakbang 5: I-stack ang Mga Pindutan at Ikonekta ang mga ito sa Iyong Lupon

I-stack ang mga Pindutan at Ikonekta ang mga ito sa Iyong Lupon
I-stack ang mga Pindutan at Ikonekta ang mga ito sa Iyong Lupon
I-stack ang mga Pindutan at Ikonekta ang mga ito sa Iyong Lupon
I-stack ang mga Pindutan at Ikonekta ang mga ito sa Iyong Lupon
I-stack ang mga Pindutan at Ikonekta ang mga ito sa Iyong Lupon
I-stack ang mga Pindutan at Ikonekta ang mga ito sa Iyong Lupon
I-stack ang mga Pindutan at Ikonekta ang mga ito sa Iyong Lupon
I-stack ang mga Pindutan at Ikonekta ang mga ito sa Iyong Lupon

Ngayon ay oras na upang i-stack ang iyong mga arcade button sa iyong kaso. Alisin ang locking ring mula sa plastic casing at idikit ito sa butas ng kaso. I-thread ang locking ring sa kabilang panig upang ma-secure ang pindutan sa lugar. Dumikit sa may hawak ng LED at iikot ito upang ma-lock ito sa lugar. I-wiggle sa mga switch ng micro (mayroong maliit na nob at butas na nakahanay sa bawat isa upang hawakan ito sa lugar).

Upang ikonekta ang mga switch sa board alisin ang mga pindutan ng itulak na maaari mong naidagdag o maaaring hindi naidagdag. Ikonekta ang kawad na humahantong mula sa lupa ng micro switch patungo sa lupa ng Arduino at ang risistor (kung saan ang binti ng pindutan ng itulak ay). Ikonekta ang kawad na humahantong mula sa HINDI ng micro switch sa 5v ng Arduino.

Para sa mga LED wires ikonekta ang negatibong wire sa lupa at ang positibo sa pamamagitan ng isang resistor na 220OHM sa 5v. Kung kawad mo ang mga ito tulad nito sila ay laging nasa. Maaari mong idagdag ang mga ito sa code at i-on at i-off ang mga ito sa pag-sync sa mga pindutan kung nais mo.

Hakbang 6: Coding Hell

Kaya, ngayon naidikit mo ang iyong magarbong mga bagong pindutan sa iyo ng lumang code at biglang hindi ito gumana tulad ng dapat na. Ang mga titik ay lilitaw nang dalawa o tatlo nang paisa-isa at hindi ito gumagana tulad ng dapat sa simpleng mga laro ng HTML5. Maligayang pagdating sa pagtatalo sa impiyerno.

Una muna. Ang code na isinulat namin habang nag-prototyp? gumagana ito ng maayos at simple, ngunit hindi ito matikas. Kung nais mong magdagdag ng higit pang mga pindutan kailangan mong kopyahin at i-paste ang mga snippet ng code at baguhin ang lahat ng mga halaga sa loob nito. Kung nakalimutan mo ang isa sa mga ito ipinasok mo ang impormasyong pang-impyerno. Makakita ng isang tema dito? Ang Coding ay impiyerno, ngunit isang napaka-masaya, paglutas ng impyerno.

Gusto namin ng maganda, maikling code. Kaya't babaguhin namin ang lahat ng mga indibidwal na integer ng pindutan sa mga pag-array. Sa ganitong paraan, kung nais mong magdagdag ng higit pang mga pindutan kailangan mo lamang baguhin ang halaga ng pindutan, ang mga pin kung saan sila matatagpuan at ang kanilang output. Binabago rin namin ang mga pangunahing input sa ASCII dahil… mas mahusay itong gumagana?

Ngayon kung katulad mo ako magsusulat ka ng isang simple at madaling paraan upang magamit ang mga pindutan at hindi ito gagana ayon sa gusto mo. Kaya lumikha ka ng mga bagong bersyon (alalahanin ang mga bata, dagdag na pag-back up!), Subukan ang iba't ibang mga bagay, isulat ang patuloy na mas kumplikadong code na hindi pa rin gumagana nang maayos at kalaunan bumalik sa simpleng code na isinulat mo mga oras na ang nakaraan AT pansinin ang isang maliit na error kung saan agad na inaayos ang lahat.

Hayaan akong makatipid sa iyo sa paglalakbay na iyon, narito ang gumaganang code:

Pagwawaksi: ang teksto na ito ay isinulat pagkatapos ng maraming oras ng pag-coding at pag-aayos ng bug ng isang napaka-simpleng code. Mangyaring balewalain ang anumang mga palatandaan ng pagkabigo at tumuon sa gumaganang code na nai-post sa ibaba;)

# isama ang "Keyboard.h" # tukuyin ang pindutanAmount 3

int buttonPin = {

A0, A1, A2}; // Nasaan ang mga pindutan? int asciiLetter = {97, 100, 119}; // Letters in ASCII, here: a, d, w int buttonState [buttonAmount]; // Natutulak ba ang pindutan o hindi?

walang bisa ang pag-setup () {

para sa (int i = 0; i <buttonAmount; i ++) {// cycle sa pamamagitan ng array pinMode (buttonPin , INPUT); // itakda ang lahat ng mga pin sa input}}

void loop () {

para sa (int i = 0; i <buttonAmount; i ++) // cycle sa pamamagitan ng array {buttonState = digitalRead (buttonPin ); // Ano ang ginagawa ng mga pindutan? kung (buttonState == TAAS) {// Kung ang pindutan ay pinindot ang Keyboard.press (asciiLetter ); // ipadala ang kaukulang liham} iba // kung ang pindutan ay hindi pinindot {Keyboard.release (asciiLetter ); // bitawan ang liham}}

}

Hakbang 7: Gumagana ang Lahat

Masiyahan sa iyong plug at i-play ang pasadyang controller!

Kung nagustuhan mo ang itinuro na ito, mangyaring isaalang-alang ang pagboto para sa akin sa paligsahan!

Inirerekumendang: