Sadržaj:

Arkadni gumbi Plug and Play: 7 koraka (sa slikama)
Arkadni gumbi Plug and Play: 7 koraka (sa slikama)

Video: Arkadni gumbi Plug and Play: 7 koraka (sa slikama)

Video: Arkadni gumbi Plug and Play: 7 koraka (sa slikama)
Video: Установка инсталляции унитаза. Душевой трап. ПЕРЕДЕЛКА ХРУЩЕВКИ от А до Я. #18 2024, Studeni
Anonim
Plug and Play arkadni gumbi
Plug and Play arkadni gumbi

Nedavno sam počeo koristiti Arduino za izradu svojih projekata. Kao dizajner, volim izrađivati prilagođena sučelja za svoje igre/interaktivne projekte.

Jedini problem na koji sam naišao u tome što je korištenje serijske komunikacije prilično kompliciran i sklon je problemima i greškama, a htio sam brzo i jednostavno rješenje koje će mi omogućiti korištenje vanjskih gumba za upravljanje igrama.

Kako sam želio plug and play uređaj koji možete odmah koristiti sa bilo kojim računalom, kupio sam Arduino Leonardo. Gotovo je identičan Uno -u, ali s nekoliko razlika. Glavna razlika koju ću koristiti u svoju korist za ovaj projekt je njegova sposobnost da djeluje kao HID. HID ili uređaj s ljudskim sučeljem je USB protokol koji vašem računalu omogućuje prepoznavanje i prihvaćanje unosa s tipkovnica i računalnog miša bez potrebe za instaliranjem prilagođenih upravljačkih programa za svaki uređaj.

napomena: možete upotrijebiti i Uno ako ažurirate firmver, kao što je prikazano ovdje.

Korak 1: Materijali

Za ovaj projekt trebat će vam:

1x HID mikrokontroler (postoji nekoliko poput Arduino micro, Due & leonardo, koristit ću Arduino Leonardo)

1x USB kabel za arduino (za Leonardo to je USB mikro)

3x arkadni gumbi (ovo sam kupio)

1x ploča za lemljenje

3x 10k ohmski otpornici

3x 220 ohmski otpornici

Kratkospojne žice

Naravno, možete dodati još gumba ili sve zalemiti na ploču kako biste stvari učinili trajnijima.

Korak 2: Izrada prototipa

Izrada prototipa
Izrada prototipa
Izrada prototipa
Izrada prototipa
Izrada prototipa
Izrada prototipa

Dakle, prije nego što sam kupio arkadne gumbe koje sam želio koristiti, to sam isprobao standardnim tipkama. Ožičite gumbe na standardni način, vjerujem da sam koristio 10K ohmske otpornike.

Programiranje je, zahvaljujući Leonardu, prilično jednostavno. Morate uključiti knjižnicu tipkovnice. Koristio sam standardni primjer Arduina "Poruka s tipkovnice" kao osnovu za svoj kôd.

Sada je pitanje kako želite da vaši gumbi rade. U osnovi imate dva izbora, pritiskanje pojedinačnih gumba i kontinuirani niz slova ako ih pritisnete. O vašem projektu doista ovisi što biste htjeli.

Ako želite da se dogodi jedna instanca nečega ako se pritisne tipka, poput preskakanja ili prekidača za uključivanje/isključivanje, tada biste odabrali metodu pojedinačnog pritiska. Ovom metodom gledate stanje gumba, je li gore ili dolje? Zatim ga usporedite s prethodnim stanjem, je li već bilo gore ili dolje? Ako je prethodno stanje gumba isto kao trenutno stanje gumba, ništa se ne događa. No, ako se stanje gumba promijeni, pri pritisku ili otpuštanju gumba nešto se događa. U mom kodu upisuje samo slovo kada se pritisne gumb, ne kada se otpusti, ali to možete promijeniti.

#include "Tipkovnica.h"

const int buttonLeft = A0; // ulazni pin za tipku

const int buttonRight = A1; const int buttonUp = A2;

int previousButtonStateLeft = HIGH; // za provjeru stanja pushButtona

int previousButtonStateRight = HIGH; int previousButtonStateUp = HIGH;

void setup () {

// učini da pin pushButton bude ulaz: pinMode (buttonLeft, INPUT); pinMode (buttonRight, INPUT); pinMode (buttonUp, INPUT); // inicijaliziranje kontrole nad tipkovnicom: Keyboard.begin (); }

void loop () {{100} {101}

// čitanje tipke: int buttonStateLeft = digitalRead (buttonLeft); // ako se stanje gumba promijenilo, if ((buttonStateLeft! = previousButtonStateLeft) // i trenutno je pritisnuto: && (buttonStateLeft == HIGH)) {// upišite poruku Keyboard.print ("a"); } // sljedeći put spremiti trenutno stanje gumba za usporedbu: previousButtonStateLeft = buttonStateLeft;

// pročitajte gumb:

int buttonStateRight = digitalRead (buttonRight); // ako se stanje gumba promijenilo, if ((buttonStateRight! = previousButtonStateRight) // i trenutno je pritisnuto: && (buttonStateRight == HIGH)) {// upišite poruku Keyboard.print ("w"); } // sljedeći put spremiti trenutno stanje gumba za usporedbu: previousButtonStateRight = buttonStateRight;

// pročitajte gumb:

int buttonStateUp = digitalno čitanje (buttonUp); // ako se stanje gumba promijenilo, if ((buttonStateUp! = previousButtonStateUp) // i trenutno je pritisnuto: && (buttonStateUp == HIGH)) {// upišite poruku Keyboard.print ("d"); } // sljedeći put spremiti trenutno stanje gumba za usporedbu: previousButtonStateUp = buttonStateUp; }

Ako želite da se nešto neprestano događa sve dok je gumb pritisnut, kao što biste htjeli za kretanje ulijevo ili udesno, pustite ga da napiše slovo bez provjere prethodnog stanja gumba. Ne zaboravite dodati malo odgode kako biste spriječili da poludi i kako biste spriječili svaki odraz vaših gumba. Postoje elegantniji načini rješavanja ovog problema, ali to je jednostavno i brzo.

#include "Tipkovnica.h"

const int buttonLeft = A0; // ulazni pin za tipku

const int buttonRight = A1; const int buttonUp = A2;

void setup () {

// učini da pin pushButton bude ulaz: pinMode (buttonLeft, INPUT); pinMode (buttonRight, INPUT); pinMode (buttonUp, INPUT); // inicijaliziranje kontrole nad tipkovnicom: Keyboard.begin (); }

void loop () {{100} {101}

// čitanje tipke: int buttonStateLeft = digitalRead (buttonLeft); if (buttonStateLeft == HIGH) // ako je gumb pritisnut {// upišite poruku Keyboard.print ("a"); kašnjenje (50); // Odgoda za odbijanje i omogućavanje računalu da nadoknadi}

// pročitajte gumb:

int buttonStateRight = digitalRead (buttonRight); if (buttonStateRight == HIGH) // ako je gumb pritisnut {// upišite poruku Keyboard.print ("w"); kašnjenje (50); // Odgoda za odbijanje i omogućavanje računalu da nadoknadi}

// pročitajte gumb:

int buttonStateUp = digitalno čitanje (buttonUp); if (buttonStateUp == HIGH) // ako je gumb pritisnut {// upišite poruku Keyboard.print ("d"); kašnjenje (50); // Odgoda za odbijanje i omogućavanje računalu da nadoknadi}}

Uvijek možete koristiti mješavinu obje metode, ovisno o tome što najbolje odgovara vašim potrebama.

Korak 3: Lasersko rezanje kućišta

Lasersko rezanje kućišta
Lasersko rezanje kućišta

Za kućište sam koristio 3 mm mdf, s umetkom od pleksiglasa 2 mm. Dodao sam umetak jer u kasnijoj fazi želim dodati neke LED diode na unutrašnjosti kućišta kako bi bio lijep i sjajan.

Upisao sam svoje dimenzije u makercase i preuzeo svg datoteku. Otvorio sam ga u Illustratoru i dodao rupe gdje sam ih htio. Ako nemate Illustrator, za ovaj korak možete koristiti Inkscape.

Naravno, ne morate koristiti laserski rezač jer je ovo jednostavna kutija s nekoliko rupa u njoj. Trebalo bi biti dovoljno jednostavno stvoriti ga pomoću tradicionalnijih električnih alata (ili čak ručnih alata!) Vrlo sam lijen i imao sam pristup laserskom rezaču.

Korak 4: Lemljenje arkadnih gumba

Arkadni gumbi za lemljenje
Arkadni gumbi za lemljenje
Arkadni gumbi za lemljenje
Arkadni gumbi za lemljenje
Arkadni gumbi za lemljenje
Arkadni gumbi za lemljenje

Arkadni gumb (ili barem moj) sastoji se od tri dijela. Plastično kućište, LED držač (sa LED diodom u njemu) i mikro prekidač. Mikroprekidač je zapravo dio gumba gumba i ono je što ćete trebati spojiti na svoj Arduino. Na mikro prekidaču postoje tri terminala (metalni dijelovi koji strše, gdje ćete lemiti žice). Onaj na vrhu (ili na dnu, ono što želite) je tlo. Druga dva terminala su Normal Open (NO) i Normal Closed (NC). NO znači da ako je prekidač pritisnut, uspostavlja vezu. NC znači da ako se pritisne gumb prekida vezu. Za ovaj projekt koristit ćemo NO. Na slikama sam na mikro prekidaču označio tlo, NO i NC.

Moji gumbi su osvijetljeni pa sam lemio žice na LED držač. Obojajte žice tako da znate koja je strana anoda, a koja katoda (pozitivna i negativna strana LED -a).

Zalemio sam igle zaglavlja na svoje žice, kako bih ih učinio lakim za korištenje s lemnom pločom. Samo sam zalemio žicu na iglu zaglavlja i stavio malo cijevi za termoskupljanje kako bi bile otpornije.

Korak 5: Složite gumbe i spojite ih na ploču

Složite gumbe i spojite ih na svoju ploču
Složite gumbe i spojite ih na svoju ploču
Složite gumbe i spojite ih na svoju ploču
Složite gumbe i spojite ih na svoju ploču
Složite gumbe i spojite ih na svoju ploču
Složite gumbe i spojite ih na svoju ploču
Složite gumbe i spojite ih na svoju ploču
Složite gumbe i spojite ih na svoju ploču

Sada je vrijeme za slaganje arkadnih gumba u vašu futrolu. Izvadite sigurnosni prsten iz plastičnog kućišta i provucite ga kroz otvor na kućištu. Provucite prsten za zaključavanje s druge strane kako biste osigurali gumb na mjestu. Umetnite držač LED diode i zakrenite ga da se pričvrsti na mjesto. Miknite mikro prekidače (postoje mali nobovi i rupe koji se međusobno poravnavaju kako bi ga držali na mjestu).

Za spajanje prekidača na ploču uklonite gumbe koje ste dodali, a možda i niste. Spojite žicu koja vodi od uzemljenja mikro prekidača na uzemljenje Arduina i otpornika (gdje je bila noga pritisnog gumba). Spojite žicu koja vodi od NO mikro prekidača na 5v Arduina.

Za LED žice spojite negativnu žicu na masu i pozitivnu preko 220OHM otpornika na 5v. Ako ih ovako povežete, uvijek će biti uključeni. Mogli biste ih dodati u kôd i po želji ih sinkronizirati s gumbima za uključivanje i isključivanje.

Korak 6: Kodiranje pakla

Dakle, sada ste svom starom kodu priložili svoje fancy nove gumbe i odjednom više ne radi kako bi trebao. Slova se pojavljuju dva ili tri odjednom i ne funkcionira kako bi trebalo s jednostavnim HTML5 igrama. Dobrodošli u otklanjanje pakla.

Prvo prvo. Kod koji smo napisali tijekom izrade prototipa? radi dobro i jednostavno je, ali nije elegantno. Ako želite dodati još gumba, morate kopirati i zalijepiti isječke koda i promijeniti sve vrijednosti unutar njih. Ako zaboravite jednu od njih, ulazite u pakao s ispravljanjem programskih pogrešaka. Otkriti temu ovdje? Kodiranje je pakao, ali vrlo zabavan, rješava problem pakla.

Želimo lijep, kratak kod. Stoga ćemo sve pojedinačne cijele brojeve gumba promijeniti u nizove. Na ovaj način, ako želite dodati još gumba, morate samo promijeniti količinu gumba, pinove na kojima se nalaze i njihov izlaz. Također mijenjamo ključne ulaze u ASCII jer … radi bolje?

Ako ste poput mene, napisat ćete jednostavan i lak način korištenja gumba i neće raditi onako kako biste željeli. Tako stvarate nove verzije (zapamtite djecu, inkrementalne sigurnosne kopije!), Isprobavate različite stvari, pišete stalno kompliciraniji kod koji još uvijek ne radi dobro i na kraju se vratite na jednostavan kod koji ste napisali prije nekoliko sati I primijetite malu pogrešku koja odmah sve popravlja.

Dopustite da vas poštedim tog putovanja, evo radnog koda:

Odricanje od odgovornosti: ovaj tekst je napisan nakon sati kodiranja i ispravljanja grešaka u vrlo jednostavnom kodu. Zanemarite sve znakove frustracije i usredotočite se na radni kôd objavljen u nastavku;)

#include "Keyboard.h" #define buttonAmount 3

int buttonPin = {

A0, A1, A2}; // Gdje su gumbi? int asciiLetter = {97, 100, 119}; // Slova u ASCII, ovdje: a, d, w int buttonState [buttonAmount]; // Je li gumb pritisnut ili ne?

void setup () {

for (int i = 0; i <buttonAmount; i ++) {// kruženje kroz niz pinMode (buttonPin , INPUT); // postavi sve pinove na ulaz}}

void loop () {{100} {101}

for (int i = 0; i <buttonAmount; i ++) // kruženje kroz niz {buttonState = digitalRead (buttonPin ); // Što rade gumbi? if (buttonState == HIGH) {// Ako je gumb pritisnut Keyboard.press (asciiLetter ); // šalje odgovarajuće slovo} else // ako gumb nije pritisnut {Keyboard.release (asciiLetter ); // oslobodi slovo}}

}

Korak 7: Sve radi

Uživajte u svom prilagođenom kontroleru plug & play!

Ako vam se svidio ovaj vodič, razmislite o glasovanju za mene na natječaju!

Preporučeni: