„Plug and Play“pasažo mygtukai: 7 žingsniai (su nuotraukomis)
„Plug and Play“pasažo mygtukai: 7 žingsniai (su nuotraukomis)

Video: „Plug and Play“pasažo mygtukai: 7 žingsniai (su nuotraukomis)

Video: „Plug and Play“pasažo mygtukai: 7 žingsniai (su nuotraukomis)
Video: Check out the Ulanzi UW-MIC, the most cost-effective wireless microphone! 2025, Sausis
Anonim
„Plug and Play“pasažo mygtukai
„Plug and Play“pasažo mygtukai

Neseniai pradėjau naudoti „Arduino“savo projektams kurti. Kaip dizaineris, man patinka kurti pasirinktines sąsajas savo žaidimams/interaktyviems projektams.

Viena problema, su kuria susidūriau, yra tai, kad serijinio ryšio naudojimas yra gana sudėtingas ir linkęs į problemas bei klaidas, todėl norėjau greito ir paprasto sprendimo, leidžiančio valdyti žaidimus naudojant išorinius mygtukus.

Kadangi norėjau prijungti ir paleisti įrenginį, kurį galėtumėte iškart naudoti su bet kuriuo kompiuteriu, nusipirkau „Arduino Leonardo“. Tai beveik identiška „Uno“, tačiau turi keletą skirtumų. Pagrindinis skirtumas, kurį naudosiu šiame projekte, yra gebėjimas veikti kaip HID. HID arba žmogaus sąsajos įrenginys yra USB protokolas, leidžiantis kompiuteriui atpažinti ir priimti klaviatūros ir kompiuterio pelės įvestį, neįdiegus kiekvieno įrenginio pasirinktinių tvarkyklių.

pastaba: taip pat galite naudoti „Uno“, jei atnaujinsite programinę -aparatinę įrangą, kaip parodyta čia.

1 žingsnis: medžiagos

Šiam projektui jums reikės:

1x HID palaikantis mikrovaldiklis (yra keletas tokių kaip „Arduino micro“, „Due & Leonardo“, naudosiu „Arduino Leonardo“)

1x USB -arduino kabelis („Leonardo“tai USB mikro)

3x „Arcade“mygtukai (aš juos nusipirkau)

1x be litavimo duonos lentelė

3x 10k omų rezistoriai

3x 220 omų rezistoriai

Jumperio laidai

Žinoma, galite pridėti daugiau mygtukų arba lituoti viską prie duonos lentos, kad viskas būtų pastoviau.

2 žingsnis: prototipų kūrimas

Prototipų kūrimas
Prototipų kūrimas
Prototipų kūrimas
Prototipų kūrimas
Prototipų kūrimas
Prototipų kūrimas

Taigi, prieš pirkdamas norimus naudoti arkadinius mygtukus, išbandžiau tai su standartiniais mygtukais. Prijunkite mygtukus standartiniu būdu, manau, kad naudojau 10K omų rezistorius.

Programavimas Leonardo dėka yra gana paprastas. Turite įtraukti klaviatūros biblioteką. Kaip kodo pagrindą naudojau standartinį „Arduino“pavyzdį „Klaviatūros pranešimas“.

Dabar kyla klausimas, kaip norite, kad jūsų mygtukai veiktų. Jūs iš esmės turite du pasirinkimus: paspaudžiamas vienas mygtukas ir nenutrūkstamas raidžių srautas. Tai tikrai priklauso nuo jūsų projekto, ko norite.

Jei norite, kad paspaudus klavišą, pvz., Šuolis ar įjungimo/išjungimo jungtis, atsitiktų vienas atvejis, rinkitės vieną paspaudimo būdą. Taikydami šį metodą žiūrite į mygtuko būseną, ar jis aukštyn, ar žemyn? Tada palyginate jį su ankstesne būsena, ar ji jau buvo aukštyn ar žemyn? Jei ankstesnė mygtuko būsena sutampa su dabartine mygtuko būsena, nieko neįvyks. Bet jei pasikeičia mygtuko būsena, kai paspaudžiate arba atleidžiate mygtuką, kažkas atsitinka. Mano kode jis rašo raidę tik paspaudus mygtuką, o ne atleidžiant, bet galite tai pakeisti.

#include „Keyboard.h“

const int mygtukasLeft = A0; // mygtuko įvesties kaištis

const int mygtukasTeisis = A1; const int mygtukasUp = A2;

int previousButtonStateLeft = HIGH; // norėdami patikrinti mygtuko būseną

int previousButtonStateRight = AUKŠTAS; int previousButtonStateUp = AUKŠTAS;

void setup () {

// padaryti „pushButton“kaištį įvestimi: pinMode (buttonLeft, INPUT); pinMode (buttonRight, INPUT); pinMode („buttonUp“, „INPUT“); // inicijuoti klaviatūros valdymą: Keyboard.begin (); }

void loop () {

// skaityti mygtuką: int buttonStateLeft = digitalRead (buttonLeft); // jei pasikeitė mygtuko būsena, if ((buttonStateLeft! = previousButtonStateLeft) // ir ji šiuo metu paspausta: && (buttonStateLeft == HIGH)) {// įveskite pranešimą Keyboard.print ("a"); } // kitą kartą išsaugokite dabartinę mygtuko būseną palyginimui: previousButtonStateLeft = buttonStateLeft;

// skaityti mygtuką:

int buttonStateRight = digitalRead (buttonRight); // jei pasikeitė mygtuko būsena, if ((buttonStateRight! = previousButtonStateRight) // ir jis šiuo metu yra paspaustas: && (buttonStateRight == HIGH)) {// įveskite pranešimą Keyboard.print ("w"); } // kitą kartą išsaugokite dabartinę mygtuko būseną palyginimui: previousButtonStateRight = buttonStateRight;

// skaityti mygtuką:

int buttonStateUp = digitalRead (buttonUp); // jei pasikeitė mygtuko būsena, if ((buttonStateUp! = previousButtonStateUp) // ir jis šiuo metu yra paspaustas: && (buttonStateUp == HIGH)) {// įveskite pranešimą Keyboard.print ("d"); } // kitą kartą išsaugokite dabartinę mygtuko būseną palyginimui: previousButtonStateUp = buttonStateUp; }

Jei norite, kad kažkas nenutrūktų tol, kol mygtukas bus paspaustas, kaip jūs norėtumėte judėti į kairę arba į dešinę, tiesiog leiskite jam parašyti raidę, nepatikrinus ankstesnės mygtuko būsenos. Nepamirškite pridėti šiek tiek vėlavimo, kad jis neišprotėtų ir neatsirastų bet koks jūsų mygtukų atšokimas. Yra daugiau elegantiškų šios problemos sprendimo būdų, tačiau tai paprasta ir greita.

#include „Keyboard.h“

const int mygtukasLeft = A0; // mygtuko įvesties kaištis

const int mygtukasTeisis = A1; const int mygtukasUp = A2;

void setup () {

// padaryti „pushButton“kaištį įvestimi: pinMode (buttonLeft, INPUT); pinMode (buttonRight, INPUT); pinMode („buttonUp“, „INPUT“); // inicijuoti klaviatūros valdymą: Keyboard.begin (); }

void loop () {

// skaityti mygtuką: int buttonStateLeft = digitalRead (buttonLeft); if (buttonStateLeft == HIGH) // jei mygtukas yra paspaustas {// įveskite pranešimą Keyboard.print ("a"); vėlavimas (50); // Atidėjimo ir atleidimo laikas, kad kompiuteris pasivytų}

// skaityti mygtuką:

int buttonStateRight = digitalRead (buttonRight); if (buttonStateRight == HIGH) // jei mygtukas yra paspaustas {// įveskite pranešimą Keyboard.print ("w"); vėlavimas (50); // Atidėjimo ir atleidimo laikas, kad kompiuteris pasivytų}

// skaityti mygtuką:

int buttonStateUp = digitalRead (buttonUp); if (buttonStateUp == HIGH) // jei mygtukas yra paspaustas {// įveskite pranešimą Keyboard.print ("d"); vėlavimas (50); // Atidėjimo ir atleidimo laikas, leidžiantis kompiuteriui pasivyti}}

Jūs visada galite naudoti abiejų metodų derinį, priklausomai nuo to, kas geriausiai atitinka jūsų poreikius.

3 žingsnis: korpuso pjovimas lazeriu

Korpuso pjovimas lazeriu
Korpuso pjovimas lazeriu

Korpusui naudojau 3 mm mdf su 2 mm plexiglas įdėklu. Pridėjau įdėklą, nes vėliau noriu pridėti keletą šviesos diodų korpuso viduje, kad jis būtų gražus ir švytintis.

Aš įvedžiau savo matmenis į makercase ir atsisiunčiau svg failą. Aš jį atidariau „Illustrator“ir pridėjau skyles ten, kur norėjau. Jei neturite „Illustrator“, galite atlikti šį veiksmą naudodami „Inkscape“.

Žinoma, jums nereikia naudoti lazerinio pjaustytuvo, nes tai paprasta dėžutė su keliomis skylėmis. Turėtų būti pakankamai paprasta jį sukurti naudojant tradicinius elektrinius įrankius (ar net rankinius įrankius!) Aš tiesiog labai tingiu ir turėjau prieigą prie lazerinio pjaustytuvo.

4 žingsnis: Arkadinių mygtukų litavimas

Litavimo arkados mygtukai
Litavimo arkados mygtukai
Litavimo arkados mygtukai
Litavimo arkados mygtukai
Litavimo arkados mygtukai
Litavimo arkados mygtukai

Arkadinį mygtuką (arba bent jau mano) sudaro trys dalys. Plastikinis korpusas, LED laikiklis (su LED) ir mikro jungiklis. Mikro jungiklis yra tikroji mygtuko mygtuko dalis ir jums reikės prisijungti prie „Arduino“. Mikro jungiklyje yra trys gnybtai (metaliniai antgaliai, kurie išlieka, kur lituosite laidus). Tas, kuris yra viršuje (arba apačioje, ko norite), yra žemė. Kiti du gnybtai yra „Normal Open“(NO) ir „Normal Closed“(NC). NE reiškia, kad paspaudus jungiklį, jis užmezga ryšį. NC reiškia, kad paspaudus mygtuką nutrūksta ryšys. Šiam projektui naudosime NE. Nuotraukose ant mikro jungiklio pažymėjau žemę, NO ir NC.

Mano mygtukai yra apšviesti, todėl litavau laidus prie LED laikiklio. Būtinai spalvokite laidų spalvas, kad žinotumėte, kurioje pusėje yra anodas, o kurioje - katodas (teigiamos ir neigiamos šviesos diodų pusės).

Ant laidų lituodavau antraščių kaiščius, kad juos būtų lengva naudoti su be litavimo duonos lenta. Aš tiesiog litavau laidą prie antgalio kaiščio ir įdėjau šiek tiek termiškai susitraukiančio vamzdelio, kad jie būtų elastingesni.

5 žingsnis: sudėkite mygtukus ir prijunkite juos prie savo lentos

Sudėkite mygtukus ir prijunkite juos prie savo lentos
Sudėkite mygtukus ir prijunkite juos prie savo lentos
Sudėkite mygtukus ir prijunkite juos prie savo lentos
Sudėkite mygtukus ir prijunkite juos prie savo lentos
Sudėkite mygtukus ir prijunkite juos prie savo lentos
Sudėkite mygtukus ir prijunkite juos prie savo lentos
Sudėkite mygtukus ir prijunkite juos prie savo lentos
Sudėkite mygtukus ir prijunkite juos prie savo lentos

Dabar atėjo laikas sukrauti arkadinius mygtukus jūsų atveju. Nuimkite fiksavimo žiedą iš plastikinio korpuso ir įkiškite jį per skylę. Užfiksuokite fiksavimo žiedą kitoje pusėje, kad pritvirtintumėte mygtuką. Įkiškite LED laikiklį ir pasukite, kad jis užsifiksuotų. Pasukite mikro jungiklius (yra mažų strėlių ir skylių, kurios susilygina viena su kita, kad laikytųsi savo vietoje).

Norėdami prijungti jungiklius prie plokštės, nuimkite mygtukus, kuriuos galbūt pridėjote arba nepridėjote. Prijunkite laidą, vedantį nuo mikro jungiklio įžeminimo, prie „Arduino“ir rezistoriaus žemės (kur buvo mygtuko kojelė). Prijunkite laidą, vedantį iš mikro jungiklio NO į 5 V „Arduino“.

Šviesos diodų laidams neigiamą laidą prijunkite prie žemės, o teigiamą per 220OHM rezistorių - prie 5v. Jei prijungsite juos taip, jie visada bus įjungti. Jei norite, galite juos pridėti prie kodo ir priversti juos įjungti ir išjungti sinchroniškai su mygtukais.

6 žingsnis: Pragaro kodavimas

Taigi, dabar jūs pridėjote savo išgalvotus naujus mygtukus prie seno kodo ir staiga jis nebeveikia taip, kaip turėtų. Raidės rodomos po dvi ar tris vienu metu ir neveikia taip, kaip turėtų veikti su paprastais HTML5 žaidimais. Sveiki atvykę į pragarą.

Visų pirmą. Kodas, kurį parašėme prototipų kūrimo metu? jis veikia gerai ir yra paprastas, bet nėra elegantiškas. Jei norite pridėti daugiau mygtukų, turite nukopijuoti ir įklijuoti kodo fragmentus ir pakeisti visas jų reikšmes. Jei pamiršite vieną iš jų, pateksite į klaidų taisymo pragarą. Aptikti čia temą? Kodavimas yra pragaras, bet labai įdomus, problemų sprendimo pragaras.

Mes norime gražaus, trumpo kodo. Taigi pakeisime visus atskirus mygtukų sveikuosius skaičius į masyvus. Tokiu būdu, jei norite pridėti daugiau mygtukų, turite pakeisti tik mygtukų kiekį, kaiščius, kuriuose jie yra, ir jų išvestį. Mes taip pat pakeičiame pagrindinius įėjimus į ASCII, nes … jis veikia geriau?

Dabar, jei esate toks kaip aš, parašysite paprastą ir lengvą mygtukų naudojimo būdą ir jis neveiks taip, kaip norėtumėte. Taigi sukuriate naujas versijas (prisiminkite vaikus, papildomas atsargines kopijas!), Išbandykite įvairius dalykus, nuolat rašykite sudėtingesnį kodą, kuris vis tiek neveikia, ir galiausiai grįžtate prie paprasto kodo, kurį parašėte prieš kelias valandas, ir pastebite nedidelę klaidą akimirksniu viską sutvarko.

Leiskite man nepagailėti šios kelionės, čia yra darbo kodas:

Atsakomybės apribojimas: šis tekstas buvo parašytas po kelių valandų kodavimo ir labai paprasto kodo taisymo. Nepaisykite jokių nusivylimo požymių ir sutelkite dėmesį į žemiau pateiktą darbo kodą;)

#įtraukti „Keyboard.h“#define mygtukas3 suma

int buttonPin = {

A0, A1, A2}; // Kur mygtukai? int asciiLetter = {97, 100, 119}; // Laiškai ASCII, čia: a, d, w int buttonState [buttonAmount]; // Mygtukas paspaustas ar ne?

void setup () {

for (int i = 0; i <buttonAmount; i ++) {// pereiti per masyvą pinMode (buttonPin , INPUT); // nustatyti visus kaiščius įvesties}}

void loop () {

for (int i = 0; i <buttonAmount; i ++) // cikluoti per masyvą {buttonState = digitalRead (buttonPin ); // Ką veikia mygtukai? if (buttonState == HIGH) {// Jei paspaudžiamas mygtukas Keyboard.press (asciiLetter ); // atsiųsti atitinkamą raidę} else // jei mygtukas nepaspaustas {Keyboard.release (asciiLetter ); // atleisk laišką}}

}

7 žingsnis: viskas veikia

Mėgaukitės pasirinktiniu „plug & play“valdikliu!

Jei jums patiko ši pamoka, apsvarstykite galimybę balsuoti už mane konkurse!