Satura rādītājs:

Plug and Play arkādes pogas: 7 soļi (ar attēliem)
Plug and Play arkādes pogas: 7 soļi (ar attēliem)

Video: Plug and Play arkādes pogas: 7 soļi (ar attēliem)

Video: Plug and Play arkādes pogas: 7 soļi (ar attēliem)
Video: PXN V10 vs V9: Entry-level steering wheel SHOWDOWN 2024, Novembris
Anonim
Plug and Play arkādes pogas
Plug and Play arkādes pogas

Es nesen sāku izmantot Arduino savu projektu veidošanai. Kā dizainerei man patīk veidot pielāgotas saskarnes savām spēlēm/interaktīviem projektiem.

Viena problēma, ar kuru es saskāros, bija tā, ka sērijveida sakaru izmantošana ir diezgan sarežģīta un pakļauta problēmām un kļūdām, un es gribēju ātru un vienkāršu risinājumu, lai ļautu man izmantot ārējās pogas, lai kontrolētu savas spēles.

Tā kā es gribēju plug and play ierīci, kuru varētu uzreiz izmantot ar jebkuru datoru, es nopirku Arduino Leonardo. Tas ir gandrīz identisks Uno, taču ar dažām atšķirībām. Galvenā atšķirība, ko es izmantošu savā labā šim projektam, ir tā spēja darboties kā HID. HID jeb cilvēka saskarnes ierīce ir USB protokols, kas ļauj datoram atpazīt un pieņemt ievadi no tastatūrām un datora peles, neinstalējot katrai ierīcei pielāgotus draiverus.

piezīme: jūs varat arī izmantot Uno, ja atjaunināt programmaparatūru, kā parādīts šeit.

1. solis: materiāli

Šim projektam jums būs nepieciešams:

1x HID spējīgs mikrokontrolleris (ir daži, piemēram, Arduino micro, Due & Leonardo, es izmantošu Arduino Leonardo)

1x USB arduino kabelis (Leonardo tas ir USB micro)

3x arkādes pogas (es tās nopirku)

1x bez lodēšanas maizes dēlis

3x 10k omu rezistori

3x 220 omi rezistori

Jumper vadi

Jūs, protams, varat pievienot vairāk pogu vai lodēt visu uz maizes dēļa, lai padarītu lietas pastāvīgākas.

2. solis: prototipēšana

Prototipēšana
Prototipēšana
Prototipēšana
Prototipēšana
Prototipēšana
Prototipēšana

Tātad, pirms es nopirku arkādes pogas, kuras vēlējos izmantot, es to pārbaudīju ar standarta spiedpogām. Pievienojiet pogas standarta veidā, es uzskatu, ka izmantoju 10K omu rezistorus.

Programmēšana, pateicoties Leonardo, ir diezgan vienkārša. Jums ir jāiekļauj tastatūras bibliotēka. Kā koda pamatu es izmantoju Arduino standarta piemēru "Tastatūras ziņojums".

Tagad jautājums ir par to, kā vēlaties, lai pogas darbotos. Būtībā jums ir divas izvēles iespējas: vienas pogas nospiešana un nepārtraukta burtu plūsma, ja tiek nospiesta. Tas tiešām ir atkarīgs no jūsu projekta, ko vēlaties.

Ja vēlaties nospiest kādu taustiņu, piemēram, lēcienu vai ieslēgšanas/izslēgšanas slēdzi, tad notiktu tikai viens gadījums, tad izvēlieties vienu spiediena metodi. Izmantojot šo metodi, jūs skatāties uz pogas stāvokli, vai tā ir uz augšu vai uz leju? Tad jūs salīdzināt to ar iepriekšējo stāvokli, vai tas jau bija uz augšu vai uz leju? Ja iepriekšējais pogas stāvoklis ir tāds pats kā pašreizējais pogas stāvoklis, nekas nenotiek. Bet, ja pogas stāvoklis mainās, piemēram, nospiežot vai atlaižot pogu, kaut kas notiek. Manā kodā tas raksta burtu tikai tad, kad poga tiek nospiesta, nevis atlaižot, bet jūs to varētu mainīt.

#include "Keyboard.h"

const int buttonLeft = A0; // spiedpogu ievades tapa

const int poga Tiesības = A1; const int pogaUp = A2;

int previousButtonStateLeft = HIGH; // spiedpogas stāvokļa pārbaudei

int previousButtonStateRight = HIGH; int previousButtonStateUp = HIGH;

void setup () {

// padarīt spiedpogas tapu par ievadi: pinMode (buttonLeft, INPUT); pinMode (buttonRight, INPUT); pinMode (buttonUp, INPUT); // inicializēt tastatūras vadību: Keyboard.begin (); }

void loop () {

// lasīt spiedpogu: int buttonStateLeft = digitalRead (buttonLeft); // ja pogas stāvoklis ir mainījies, if ((buttonStateLeft! = previousButtonStateLeft) // un tas pašlaik ir nospiests: && (buttonStateLeft == HIGH)) {// ierakstiet ziņojumu Keyboard.print ("a"); } // saglabājiet pašreizējo pogas stāvokli salīdzināšanai nākamreiz: previousButtonStateLeft = buttonStateLeft;

// lasīt spiedpogu:

int buttonStateRight = digitalRead (buttonRight); // ja pogas stāvoklis ir mainījies, if ((buttonStateRight! = previousButtonStateRight) // un tas pašlaik ir nospiests: && (buttonStateRight == HIGH)) {// ierakstiet ziņojumu Keyboard.print ("w"); } // saglabājiet pašreizējo pogas stāvokli salīdzināšanai nākamreiz: previousButtonStateRight = buttonStateRight;

// lasīt spiedpogu:

int buttonStateUp = digitalRead (buttonUp); // ja pogas stāvoklis ir mainījies, ja ((buttonStateUp! = previousButtonStateUp) // un tas pašlaik ir nospiests: && (buttonStateUp == HIGH)) {// ierakstiet ziņojumu Keyboard.print ("d"); } // saglabājiet pašreizējo pogas stāvokli salīdzināšanai nākamreiz: previousButtonStateUp = buttonStateUp; }

Ja vēlaties, lai kaut kas nepārtraukti notiktu, kamēr poga tiek nospiesta, kā jūs vēlētos, lai kustētos pa kreisi vai pa labi, vienkārši ļaujiet tai uzrakstīt vēstuli, nepārbaudot iepriekšējo pogas stāvokli. Neaizmirstiet pievienot nelielu aizkavi, lai tas nenotiktu un neveiktu pogas. Ir vairāk elegantu šīs problēmas risināšanas veidu, taču tas ir viegli un ātri.

#include "Keyboard.h"

const int buttonLeft = A0; // spiedpogu ievades tapa

const int poga Tiesības = A1; const int pogaUp = A2;

void setup () {

// padarīt spiedpogas tapu par ievadi: pinMode (buttonLeft, INPUT); pinMode (buttonRight, INPUT); pinMode (buttonUp, INPUT); // inicializēt tastatūras vadību: Keyboard.begin (); }

void loop () {

// lasīt spiedpogu: int buttonStateLeft = digitalRead (buttonLeft); if (buttonStateLeft == HIGH) // ja poga ir nospiesta {// ierakstiet ziņojumu Keyboard.print ("a"); kavēšanās (50); // Atlēciena aizkavēšanās un datora panākšana}

// lasīt spiedpogu:

int buttonStateRight = digitalRead (buttonRight); if (buttonStateRight == HIGH) // ja poga ir nospiesta {// ierakstiet ziņojumu Keyboard.print ("w"); kavēšanās (50); // Atlēciena aizkavēšanās un datora panākšana}

// lasīt spiedpogu:

int buttonStateUp = digitalRead (buttonUp); if (buttonStateUp == HIGH) // ja poga ir nospiesta {// ierakstiet ziņojumu Keyboard.print ("d"); kavēšanās (50); // Atlēciena aizkavēšanās un datora panākšana}}

Jūs vienmēr varat izmantot abu metožu kombināciju, atkarībā no tā, kas vislabāk atbilst jūsu vajadzībām.

3. darbība: korpusa griešana ar lāzeru

Korpusa griešana ar lāzeru
Korpusa griešana ar lāzeru

Korpusam es izmantoju 3 mm mdf ar 2 mm plexiglas ieliktni. Es pievienoju ieliktni, jo vēlos vēlāk korpusa iekšpusē pievienot dažas gaismas diodes, lai padarītu to jauku un mirdzošu.

Es ievadīju savus izmērus lielos burtos un lejupielādēju svg failu. Es to atvēru Illustratorā un pievienoju caurumus, kur tos vēlējos. Ja jums nav Illustrator, šai darbībai varat izmantot Inkscape.

Protams, jums nav jāizmanto lāzera griezējs, jo šī ir vienkārša kaste ar dažiem caurumiem. Tam vajadzētu būt pietiekami vienkāršam, lai to izveidotu, izmantojot tradicionālākus elektroinstrumentus (vai pat rokas instrumentus!). Es esmu tikai ļoti slinks un man bija pieeja lāzera griezējam.

4. solis: Arcade pogu lodēšana

Lodēšanas arkādes pogas
Lodēšanas arkādes pogas
Lodēšanas arkādes pogas
Lodēšanas arkādes pogas
Lodēšanas arkādes pogas
Lodēšanas arkādes pogas

Arkādes poga (vai vismaz mana) sastāv no trim daļām. Plastmasas korpuss, LED turētājs (ar LED tajā) un mikro slēdzis. Mikro slēdzis ir pogas faktiskā pogas daļa, un tas būs nepieciešams, lai izveidotu savienojumu ar savu Arduino. Mikro slēdzim ir trīs termināļi (metāla uzgaļi, kas izliekas, kur jūs lodēsit vadus). Tas, kas atrodas augšpusē (vai apakšā, tas, ko vēlaties), ir zeme. Pārējie divi termināļi ir Normal Open (NO) un Normal Closed (NC). NĒ nozīmē, ka, nospiežot slēdzi, tiek izveidots savienojums. NC nozīmē, ka, nospiežot pogu, tas pārtrauc savienojumu. Šim projektam mēs izmantosim NĒ. Attēlos uz sava mikro slēdža atzīmēju zemi, NO un NC.

Manas pogas ir izgaismotas, tāpēc es pielodēju vadus pie LED turētāja. Noteikti krāsojiet vadus ar krāsu kodu, lai jūs zināt, kura puse ir anods un kura katode (gaismas diodes pozitīvās un negatīvās puses).

Savos vados es lodēju galvenes tapas, lai tās būtu ērti lietot ar bezlodēšanas maizes dēli. Es tikko pielodēju vadu pie galvenes tapas un ievietoju nedaudz termiski saraušanās caurules, lai padarītu tās elastīgākas.

5. solis: salieciet pogas un savienojiet tās ar savu dēli

Salieciet pogas un savienojiet tās ar savu dēli
Salieciet pogas un savienojiet tās ar savu dēli
Salieciet pogas un savienojiet tās ar savu dēli
Salieciet pogas un savienojiet tās ar savu dēli
Salieciet pogas un savienojiet tās ar savu dēli
Salieciet pogas un savienojiet tās ar savu dēli
Salieciet pogas un savienojiet tās ar savu dēli
Salieciet pogas un savienojiet tās ar savu dēli

Tagad ir pienācis laiks sakrāt savas arkādes pogas savā lietā. Noņemiet bloķēšanas gredzenu no plastmasas korpusa un izbīdiet to caur korpusa atveri. Aptiniet bloķēšanas gredzenu otrā pusē, lai poga nostiprinātos vietā. Ievietojiet LED turētāju un pagrieziet to, lai tas nofiksētos vietā. Pagrieziet mikro slēdžus (ir nelielas nūjas un caurumi, kas izlīdzinās viens ar otru, lai to noturētu vietā).

Lai savienotu slēdžus ar plāksni, noņemiet spiedpogas, kuras, iespējams, esat pievienojis. Pievienojiet vadu, kas ved no mikro slēdža zemes, līdz Arduino un rezistora zemei (kur atradās spiedpogas kāja). Pievienojiet vadu, kas ved no mikro slēdža NO uz Arduino 5V.

LED vadiem savienojiet negatīvo vadu ar zemi un pozitīvo caur 220OHM rezistoru pie 5V. Ja jūs tos savienojat, tie vienmēr būs ieslēgti. Ja vēlaties, varat tos pievienot kodā un likt tiem ieslēgt un izslēgt sinhronizēti ar pogām.

6. darbība: elles kodēšana

Tātad, tagad jūs esat pievienojis savas izdomātās jaunās pogas savam vecajam kodam un pēkšņi tas vairs nedarbojas kā vajadzētu. Burti parādās divi vai trīs vienlaikus, un tas nedarbojas, kā vajadzētu ar vienkāršām HTML5 spēlēm. Laipni lūdzam debounce ellē.

Vispirms pirmās lietas. Kods, ko rakstījām prototipu veidošanas laikā? tas darbojas labi un ir vienkāršs, bet tas nav elegants. Ja vēlaties pievienot vairāk pogu, jums ir jākopē un jāielīmē koda fragmenti un jāmaina visas vērtības. Ja aizmirstat vienu no tiem, jūs nokļūstat kļūdu labošanas ellē. Vai noteikt tēmu šeit? Kodēšana ir elle, bet ļoti jautra, problēmu risinoša elle.

Mēs vēlamies skaistu, īsu kodu. Tāpēc mēs mainīsim visus atsevišķos pogu veselos skaitļus uz masīviem. Tādā veidā, ja vēlaties pievienot vairāk pogu, jums ir jāmaina tikai pogu daudzums, tapas, kur tās atrodas, un to izvade. Mēs arī mainām galvenās ievades uz ASCII, jo… tas darbojas labāk?

Tagad, ja jūs esat tāds kā es, jūs uzrakstīsit vienkāršu un vienkāršu veidu, kā izmantot pogas, un tas nedarbosies tik labi, kā vēlaties. Tātad jūs izveidojat jaunas versijas (atcerieties bērnus, papildu rezerves kopijas!), Izmēģiniet dažādas lietas, pastāvīgi rakstiet sarežģītāku kodu, kas joprojām nedarbojas labi, un galu galā atgriežaties pie vienkāršā koda, kuru rakstījāt pirms stundām, un pamanāt nelielu kļūdu, kas uzreiz visu izlabo.

Ļaujiet man saudzēt jūs no šī ceļojuma, šeit ir darba kods:

Atruna: šis teksts tika uzrakstīts pēc dažu stundu kodēšanas un kļūdu labošanas ar ļoti vienkāršu kodu. Lūdzu, neņemiet vērā vilšanās pazīmes un koncentrējieties uz zemāk publicēto darba kodu;)

#iekļaut "Keyboard.h" #definēt poguSumma 3

int buttonPin = {

A0, A1, A2}; // Kur ir pogas? int asciiLetter = {97, 100, 119}; // Burti ASCII, šeit: a, d, w int buttonState [buttonAmount]; // Vai poga ir nospiesta vai nē?

void setup () {

for (int i = 0; i <buttonAmount; i ++) {// cikls pa masīvu pinMode (buttonPin , INPUT); // iestatiet visas tapas ievadīšanai}}

void loop () {

for (int i = 0; i <buttonAmount; i ++) // cikls pa masīvu {buttonState = digitalRead (buttonPin ); // Ko dara pogas? if (buttonState == HIGH) {// Ja poga tiek nospiesta Keyboard.press (asciiLetter ); // nosūtīt atbilstošo burtu} else // ja poga nav nospiesta {Keyboard.release (asciiLetter ); // atlaid vēstuli}}

}

7. solis: viss darbojas

Izbaudiet savu plug & play pielāgoto kontrolieri!

Ja jums patika šī pamācība, lūdzu, apsveriet iespēju balsot par mani konkursā!

Ieteicams: