Tartalomjegyzék:

Plug and Play Arcade gombok: 7 lépés (képekkel)
Plug and Play Arcade gombok: 7 lépés (képekkel)

Videó: Plug and Play Arcade gombok: 7 lépés (képekkel)

Videó: Plug and Play Arcade gombok: 7 lépés (képekkel)
Videó: PXN V10 vs V9: Entry-level steering wheel SHOWDOWN 2024, Július
Anonim
Plug and Play Arcade gombok
Plug and Play Arcade gombok

Nemrég kezdtem el használni az Arduino -t a projektjeim elkészítéséhez. Tervezőként szeretek egyedi felületeket készíteni a játékaimhoz/interaktív projektjeimhez.

Az egyetlen probléma, amellyel találkoztam, hogy a soros kommunikáció használata meglehetősen bonyolult, és hajlamos a problémákra és hibákra, és gyors és egyszerű megoldást akartam, hogy külső gombokat használhassak a játékaim vezérléséhez.

Mivel plug and play eszközt szerettem volna, amelyet azonnal használhat bármilyen számítógéppel, vettem egy Arduino Leonardót. Majdnem azonos az Unóval, de néhány különbséggel. A fő különbség, amit ebben a projektben a magam javára fogok használni, az, hogy képes HID -ként működni. A HID vagy emberi interfész eszköz egy USB -protokoll, amely lehetővé teszi, hogy számítógépe felismerje és elfogadja a billentyűzetről és a számítógépes egérről származó bevitelt anélkül, hogy minden eszközhöz egyedi illesztőprogramokat kellene telepítenie.

Megjegyzés: Uno -t is használhat, ha frissíti a firmware -t, amint az itt látható.

1. lépés: Anyagok

Ehhez a projekthez szüksége lesz:

1x HID -kompatibilis mikrokontroller (van néhány, például Arduino micro, Due & Leonardo, az Arduino Leonardo -t fogom használni)

1x USB - arduino kábel (a Leonardo esetében ez az USB micro)

3x Arcade gomb (ezeket vettem)

1x forrasztás nélküli kenyeretábla

3x 10k ohmos ellenállások

3x 220 ohmos ellenállások

Jumper vezetékek

Természetesen további gombokat is hozzáadhat, vagy mindent forraszthat egy kenyérlapra, hogy állandóbbá tegye a dolgokat.

2. lépés: Prototípuskészítés

Prototípuskészítés
Prototípuskészítés
Prototípuskészítés
Prototípuskészítés
Prototípuskészítés
Prototípuskészítés

Tehát mielőtt megvásároltam a használni kívánt árkádgombokat, ezt szabványos nyomógombokkal teszteltem. Vegye fel a gombokat szabványos módon, úgy vélem, hogy 10K ohmos ellenállásokat használtam.

A programozás a Leonardo -nak köszönhetően nagyon egyszerű. Fel kell vennie a Billentyűzet könyvtárat. A kód alapjául az Arduino szabványos "Billentyűzetüzenet" példáját használtam.

Most az a kérdés, hogyan szeretné, hogy a gombok működjenek. Alapvetően két választási lehetősége van: egyetlen gombnyomás és folyamatos betűfolyam, ha megnyomják. Valójában a projektjétől függ, hogy mit szeretne.

Ha azt szeretné, hogy egyetlen gombnyomással történjen valami, például egy ugrás vagy egy ki/be kapcsoló, akkor válassza az egyetlen nyomómódot. Ezzel a módszerrel nézi a gomb állapotát, fel vagy le? Akkor összehasonlítod az előző állapottal, volt már fent vagy lefelé? Ha az előző gombállapot megegyezik a jelenlegi gombbal, semmi sem történik. De ha a gomb állapota megváltozik, például a gomb megnyomásakor vagy elengedésekor történik valami. A kódomban csak akkor ír be betűt, amikor megnyomja a gombot, nem pedig elengedéskor, de ezt megváltoztathatja.

#include "Keyboard.h"

const int gombLeft = A0; // bemeneti csap a nyomógombhoz

const int gombJog = A1; const int gombUp = A2;

int previousButtonStateLeft = HIGH; // nyomógomb állapotának ellenőrzésére

int previousButtonStateRight = HIGH; int previousButtonStateUp = HIGH;

void setup () {

// a nyomógomb gombjának bemenetévé tétele: pinMode (buttonLeft, INPUT); pinMode (buttonRight, INPUT); pinMode (buttonUp, INPUT); // a billentyűzet feletti vezérlés inicializálása: Keyboard.begin (); }

void loop () {

// olvassa el a nyomógombot: int buttonStateLeft = digitalRead (buttonLeft); // ha a gomb állapota megváltozott, if ((buttonStateLeft! = previousButtonStateLeft) // és jelenleg le van nyomva: && (buttonStateLeft == HIGH)) {// írjon be egy üzenetet Keyboard.print ("a"); } // az aktuális gombállapot mentése összehasonlítás céljából legközelebb: previousButtonStateLeft = buttonStateLeft;

// olvassa el a nyomógombot:

int buttonStateRight = digitalRead (buttonRight); // ha a gomb állapota megváltozott, if (((buttonStateRight! = previousButtonStateRight) // és jelenleg le van nyomva: && (buttonStateRight == HIGH)) {// írjon be egy üzenetet Keyboard.print ("w"); } // az aktuális gombállapot mentése összehasonlítás céljából legközelebb: previousButtonStateRight = buttonStateRight;

// olvassa el a nyomógombot:

int buttonStateUp = digitalRead (buttonUp); // ha a gomb állapota megváltozott, if (((buttonStateUp! = previousButtonStateUp) // és jelenleg le van nyomva: && (buttonStateUp == HIGH)) {// írjon be egy üzenetet Keyboard.print ("d"); } // az aktuális gombállapot mentése összehasonlítás céljából legközelebb: previousButtonStateUp = buttonStateUp; }

Ha azt szeretné, hogy valami folyamatosan történjen mindaddig, amíg a gombot lenyomják, ahogy szeretné, ha balra vagy jobbra mozogna, akkor hagyja, hogy írjon egy betűt anélkül, hogy ellenőrizné az előző gombállapotot. Ne felejtse el hozzáadni egy kis késleltetést, hogy megakadályozza az őrültséget, és hogy megakadályozza a gombok esetleges ugrálását. Vannak elegánsabb módszerek a probléma megoldására, de ez egyszerű és gyors.

#include "Keyboard.h"

const int gombLeft = A0; // bemeneti csap a nyomógombhoz

const int gombJog = A1; const int gombUp = A2;

void setup () {

// hogy a pushButton pin legyen bemenet: pinMode (buttonLeft, INPUT); pinMode (buttonRight, INPUT); pinMode (buttonUp, INPUT); // a billentyűzet feletti vezérlés inicializálása: Keyboard.begin (); }

void loop () {

// olvassa el a nyomógombot: int buttonStateLeft = digitalRead (buttonLeft); if (buttonStateLeft == HIGH) // ha a gombot megnyomják {// írja be az üzenetet Keyboard.print ("a"); késleltetés (50); // Késleltetés a visszapattanáshoz és a számítógép felzárkózásához}

// olvassa el a nyomógombot:

int buttonStateRight = digitalRead (buttonRight); if (buttonStateRight == HIGH) // ha a gombot megnyomják {// írja be az üzenetet Keyboard.print ("w"); késleltetés (50); // Késleltetés a visszapattanáshoz és a számítógép felzárkózásához}

// olvassa el a nyomógombot:

int buttonStateUp = digitalRead (buttonUp); if (buttonStateUp == HIGH) // ha a gombot megnyomják {// írja be az üzenetet Keyboard.print ("d"); késleltetés (50); // Késleltetés a visszapattanáshoz és a számítógép felzárkózásához}}

Mindig mindkét módszer kombinációját használhatja, attól függően, hogy mi felel meg leginkább az Ön igényeinek.

3. lépés: A tok lézeres vágása

A tok lézeres vágása
A tok lézeres vágása

A tokhoz 3 mm -es mdf -t használtam, 2 mm -es plexi betéttel. Hozzáadtam a betétet, mivel később szeretnék hozzáadni néhány LED -et a tok belsejébe, hogy szép és ragyogó legyen.

Beírtam a méreteket a makercase -be, és letöltöttem az svg fájlt. Kinyitottam az Illustratorban, és hozzáadtam a lyukakat, ahol akartam. Ha nincs Illustrator, használhatja az Inkscape -et ehhez a lépéshez.

Természetesen nem kell lézervágót használni, mivel ez egy egyszerű doboz, néhány lyukkal. Elég egyszerűnek kell lennie létrehozni hagyományosabb elektromos szerszámokkal (vagy akár kéziszerszámokkal!). Csak nagyon lusta vagyok, és hozzáférhettem egy lézervágóhoz.

4. lépés: Arcade gombok forrasztása

Forrasztó Arcade gombok
Forrasztó Arcade gombok
Forrasztó Arcade gombok
Forrasztó Arcade gombok
Forrasztó Arcade gombok
Forrasztó Arcade gombok

Az arcade gomb (vagy legalábbis az enyém) három részből áll. A műanyag burkolat, a LED -tartó (LED -el benne) és a mikrokapcsoló. A mikrokapcsoló a gomb tényleges gombrésze, és ehhez szüksége lesz az Arduino -hoz való csatlakozáshoz. A mikrokapcsolón három csatlakozó található (fém bitek, amelyek kilógnak, ahol forraszthatja a vezetékeket). A tetején lévő (vagy alul lévő, amit akar) a talaj. A másik két terminál a normál nyitott (NO) és a normál zárt (NC). A NO azt jelenti, hogy ha lenyomja a kapcsolót, akkor létrejön a kapcsolat. Az NC azt jelenti, hogy ha megnyomja a gombot, megszakítja a kapcsolatot. Ebben a projektben a NO -t fogjuk használni. A képeken a mikrokapcsolómon a földet, a NO -t és az NC -t címkéztem.

A gombjaim világítanak, így a vezetékeket a LED -tartóhoz forrasztottam. Feltétlenül színezze be a vezetékeket, hogy tudja, melyik oldal az anód és melyik a katód (a LED pozitív és negatív oldala).

A fejrészeket forrasztottam a vezetékeimre, hogy könnyen használhatók legyenek forrasztás nélküli deszkával. Most forrasztottam a vezetéket egy csatlakozócsapra, és egy kis hőre zsugorodó csövet tettem körbe, hogy rugalmasabbak legyenek.

5. lépés: Halmozza fel a gombokat, és csatlakoztassa őket a táblához

Rakd össze a gombokat és csatlakoztasd őket a táblához
Rakd össze a gombokat és csatlakoztasd őket a táblához
Rakd össze a gombokat és csatlakoztasd őket a táblához
Rakd össze a gombokat és csatlakoztasd őket a táblához
Rakd össze a gombokat és csatlakoztasd őket a táblához
Rakd össze a gombokat és csatlakoztasd őket a táblához
Rakd össze a gombokat és csatlakoztasd őket a táblához
Rakd össze a gombokat és csatlakoztasd őket a táblához

Most itt az ideje, hogy összerakja az ügyességi gombokat a tokjában. Távolítsa el a rögzítőgyűrűt a műanyag burkolatról, és illessze át a tokon lévő lyukon. A gomb rögzítéséhez rögzítse a zárógyűrűt a másik oldalon. Ragassza be a LED -tartóba, és csavarja el, hogy rögzítse a helyére. Rángassa be a mikrokapcsolókat (kis gombok és lyukak vannak egymáshoz igazítva, hogy a helyükön maradjanak).

A kapcsolók a táblához való csatlakoztatásához távolítsa el a nyomógombokat, amelyeket esetleg hozzáadott. Csatlakoztassa a mikrokapcsoló földjétől vezető vezetéket az Arduino földjéhez és az ellenálláshoz (ahol a nyomógomb lába volt). Csatlakoztassa a mikrokapcsoló NO -jából vezető vezetéket az Arduino 5V -hoz.

A LED -vezetékeknél csatlakoztassa a negatív vezetéket a földhöz, a pozitívot 220OHM ellenálláson keresztül az 5V -hoz. Ha így csatlakoztatja őket, akkor mindig bekapcsolva lesznek. Ha szeretné, hozzáadhatja őket a kódhoz, és kérheti, hogy a gombokkal szinkronban be- és kikapcsoljanak.

6. lépés: A pokol kódolása

Tehát most a régi kódhoz csatolta a képzeletbeli új gombjait, és hirtelen már nem működik úgy, ahogy kellene. A betűk egyszerre kettőt vagy hármat jelennek meg, és nem működik úgy, mint az egyszerű HTML5 -játékoknál. Üdvözöljük a pokolban.

Először is. A kód, amit a prototípus készítésekor írtunk? jól működik és egyszerű, de nem elegáns. Ha további gombokat szeretne hozzáadni, másolja ki és illessze be a kódrészleteket, és módosítsa az összes értéket. Ha elfelejt egyet közülük, belép a hibajavító pokolba. Felismer egy témát itt? A kódolás pokol, de nagyon szórakoztató, problémamegoldó pokol.

Szép, rövid kódot akarunk. Tehát minden egyes gomb egész számot tömbre cserélünk. Ily módon, ha további gombokat szeretne hozzáadni, akkor csak a gombok mennyiségét, a gombok helyét és a kimenetét kell megváltoztatnia. A kulcsbemeneteket ASCII -re is megváltoztatjuk, mert… jobban működik?

Most, ha olyan vagy, mint én, leírsz egy egyszerű és egyszerű módot a gombok használatára, és nem fog úgy működni, ahogy szeretnéd. Tehát új verziókat hoz létre (emlékezzen a gyerekekre, növekvő biztonsági mentésekre!), Próbáljon ki különböző dolgokat, írjon folyamatosan bonyolultabb kódokat, amelyek még mindig nem működnek jól, és végül térjen vissza az egyszerű kódhoz, amelyet órákkal ezelőtt írt, ÉS észrevesz egy kis hibát, amely azonnal mindent helyrehoz.

Hadd kíméljek meg ettől az utazástól, íme a működőkód:

Jogi nyilatkozat: ezt a szöveget több órányi kódolás és hibajavítás után írták, egy nagyon egyszerű kódot. Kérjük, hagyja figyelmen kívül a csalódás jeleit, és koncentráljon az alább közzétett munkakódra;)

#tartalmazza a "Keyboard.h" #define gombot3

int buttonPin = {

A0, A1, A2}; // Hol vannak a gombok? int asciiLetter = {97, 100, 119}; // Betűk ASCII -ben, itt: a, d, w int buttonState [buttonAmount]; // Nyomva van a gomb vagy sem?

void setup () {

for (int i = 0; i <buttonAmount; i ++) {// ciklusban a pinMode (buttonPin , INPUT); // állítsa be az összes tüskét bemenetre}}

void loop () {

for (int i = 0; i <buttonAmount; i ++) // ciklus a tömbön keresztül {buttonState = digitalRead (buttonPin ); // Mit csinálnak a gombok? if (buttonState == HIGH) {// Ha megnyomja a gombot Keyboard.press (asciiLetter ); // küldje el a megfelelő betűt} else // ha a gombot nem nyomja meg {Keyboard.release (asciiLetter ); // elengeded a levelet}}

}

7. lépés: Minden működik

Élvezze a plug & play egyéni vezérlőt!

Ha tetszett ez az oktatható, akkor fontolja meg, hogy szavaz rám!

Ajánlott: