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, Novembar
Anonim
Arkadne tipke Plug and Play
Arkadne tipke Plug and Play

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

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

Kako sam želio plug and play uređaj koji možete odmah koristiti sa bilo kojim računarom, kupio sam Arduino Leonardo. Gotovo je identičan Uno -u, ali ima nekoliko razlika. Glavna razlika koju ću koristiti u svoju korist za ovaj projekt je njegova sposobnost da djeluje kao HID. HID ili uređaj sa ljudskim interfejsom je USB protokol koji omogućava vašem računaru da prepozna i prihvati unos sa tastature i računarskog miša bez potrebe za instaliranjem prilagođenih upravljačkih programa za svaki uređaj.

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

Korak 1: Materijali

Za ovaj projekat 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 arkadna dugmeta (ovo sam kupio)

1x ploča za lemljenje

3x 10k ohm otpornici

3x 220 ohmski otpornici

Žice za kratkospojnike

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

Korak 2: Izrada prototipa

Prototipiranje
Prototipiranje
Prototipiranje
Prototipiranje
Prototipiranje
Prototipiranje

Dakle, prije nego što sam kupio arkadne tipke koje sam želio koristiti, isprobao sam ovo sa 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 biblioteku tastature. Koristio sam standardni primjer Arduina "Poruka sa tastature" kao osnovu za svoj kôd.

Sada je pitanje kako želite da vaši gumbi rade. U osnovi imate dva izbora, jedno pritiskanje dugmadi i neprekidan niz slova ako ih pritisnete. Zaista od vašeg projekta zavisi šta želite.

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 dugmeta, je li gore ili dolje? Zatim ga uporedite sa prethodnim stanjem, da li je već bilo gore ili dolje? Ako je prethodno stanje dugmeta isto kao trenutno stanje dugmeta, ništa se ne dešava. Ali ako se stanje dugmeta promijeni, dok pritisnete ili otpustite dugme, nešto se dogodi. U mom kodu ono upisuje samo slovo kada se dugme pritisne, ne kada se otpusti, ali to možete promijeniti.

#include "Keyboard.h"

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

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); // pokreće kontrolu nad tastaturom: Keyboard.begin (); }

void loop () {{100} {101}

// čita taster: int buttonStateLeft = digitalRead (buttonLeft); // ako se stanje dugmeta promijenilo, if ((buttonStateLeft! = previousButtonStateLeft) // i trenutno je pritisnuto: && (buttonStateLeft == HIGH)) {// otkucajte poruku Keyboard.print ("a"); } // sledeći put sačuvaj trenutno stanje dugmeta za poređenje: previousButtonStateLeft = buttonStateLeft;

// pročitajte dugme:

int buttonStateRight = digitalRead (buttonRight); // ako se stanje dugmeta promijenilo, if ((buttonStateRight! = previousButtonStateRight) // i trenutno je pritisnuto: && (buttonStateRight == HIGH)) {// otkucajte poruku Keyboard.print ("w"); } // sledeći put sačuvaj trenutno stanje dugmeta za poređenje: previousButtonStateRight = buttonStateRight;

// pročitajte dugme:

int buttonStateUp = digitalno čitanje (buttonUp); // ako se stanje dugmeta promijenilo, if ((buttonStateUp! = previousButtonStateUp) // i trenutno je pritisnuto: && (buttonStateUp == HIGH)) {// otkucajte poruku Keyboard.print ("d"); } // sledeći put sačuvaj trenutno stanje dugmeta za poređenje: previousButtonStateUp = buttonStateUp; }

Ako želite da se nešto neprestano događa sve dok je dugme pritisnuto, kao što biste htjeli za kretanje ulijevo ili udesno, pustite ga da napiše slovo bez provjere prethodnog stanja dugmeta. Ne zaboravite dodati malo kašnjenje kako biste spriječili da poludi i kako biste spriječili bilo kakvo odbijanje vaših dugmadi. Postoje elegantniji načini rješavanja ovog problema, ali to je jednostavno i brzo.

#include "Keyboard.h"

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

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); // pokreće kontrolu nad tastaturom: Keyboard.begin (); }

void loop () {{100} {101}

// čita taster: int buttonStateLeft = digitalRead (buttonLeft); if (buttonStateLeft == HIGH) // ako je dugme pritisnuto {// otkucajte poruku Keyboard.print ("a"); kašnjenje (50); // Odgoda za odbijanje i omogućavanje računaru da nadoknadi}

// pročitajte dugme:

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

// pročitajte dugme:

int buttonStateUp = digitalno čitanje (buttonUp); if (buttonStateUp == HIGH) // ako je dugme pritisnuto {// otkucajte poruku Keyboard.print ("d"); kašnjenje (50); // Odgoda za odbijanje i omogućavanje računaru 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 MDF od 3 mm, s umetkom od pleksiglasa od 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 tasteri za lemljenje
Arkadni tasteri za lemljenje
Arkadni tasteri za lemljenje
Arkadni tasteri za lemljenje
Lemljenje arkadnih gumba
Lemljenje arkadnih gumba

Arkadno dugme (ili barem moje) sastoji se od tri dijela. Plastično kućište, LED držač (sa LED diodom u njemu) i mikro prekidač. Mikro prekidač je stvarni dio dugmeta i ono je što ćete morati povezati sa svojim Arduinom. Na mikro prekidaču postoje tri terminala (metalni dijelovi koji strše, gdje ćete lemiti žice). Ono na vrhu (ili na dnu, šta ž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 dugme prekida vezu. Za ovaj projekat ćemo koristiti NE. Na slikama sam na mikro prekidaču označio zemlju, NO i NC.

Moji gumbi su osvijetljeni pa sam lemio žice na LED držač. Obavezno kodirajte svoje žice kako biste znali koja je strana anoda, a koja katoda (pozitivna i negativna strana LED diode).

Zalemio sam igle zaglavlja na svoje žice, kako bih ih učinio lakim za upotrebu s lemnom pločom. Samo sam zalemio žicu na iglu zaglavlja i stavio malo cijevi za termoskupljanje kako bih ih učinio otpornijima.

Korak 5: Postavite 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
Složite gumbe i spojite ih na svoju ploču

Sada je vrijeme za slaganje arkadnih gumba u vašu torbicu. Uklonite prsten za zaključavanje 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 okrenite ga da biste ga učvrstili na svom mjestu. Miksajte mikro prekidače (postoje mali nobovi i rupe koji se međusobno poravnavaju kako bi ih držali na mjestu).

Za spajanje prekidača na ploču uklonite tipke koje ste dodali, a možda 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. Možete ih dodati u kôd i navesti ih da se uključuju i isključuju sinhronizovano pomoću dugmadi ako želite.

Korak 6: Kodiranje pakla

Dakle, sada ste svom starom kodu priložili svoja fancy nova dugmad 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 debounce pakao.

Krenimo redom. Kod koji smo napisali tokom izrade prototipa? radi dobro i jednostavno, 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 grešaka. Otkriti temu ovdje? Kodiranje je pakao, ali vrlo zabavan, pakao rješava probleme.

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

Sada, ako ste poput mene, napisat ćete jednostavan i lak način korištenja gumba i neće raditi onako kako biste željeli. Stoga 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 grešku koja trenutno sve popravlja.

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

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

#include "Keyboard.h" #define buttonVrijednost 3

int buttonPin = {

A0, A1, A2}; // Gdje su dugmad? int asciiLetter = {97, 100, 119}; // Slova u ASCII, ovdje: a, d, w int buttonState [buttonAmount]; // Da li je dugme pritisnuto ili ne?

void setup () {

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

void loop () {{100} {101}

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

}

Korak 7: Sve funkcionira

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

Ako vam se svidjela ova instrukcija, razmislite o tome da glasate za mene na takmičenju!

Preporučuje se: