Innehållsförteckning:

Plug and Play Arcade -knappar: 7 steg (med bilder)
Plug and Play Arcade -knappar: 7 steg (med bilder)

Video: Plug and Play Arcade -knappar: 7 steg (med bilder)

Video: Plug and Play Arcade -knappar: 7 steg (med bilder)
Video: РАЗДАЕТ WIFI СЛЕДИТ ЗА ЧЕЛОВЕКОМ 4G камера видеонаблюдения 2024, November
Anonim
Plug and Play Arcade -knappar
Plug and Play Arcade -knappar

Jag började nyligen använda Arduino för att göra mina projekt. Som designer älskar jag att skapa anpassade gränssnitt för mina spel/interaktiva projekt.

Det enda problemet jag stötte på med att använda seriell kommunikation är ganska komplicerat och utsatt för problem och buggar och jag ville ha en snabb och enkel lösning för att låta mig använda externa knappar för att styra mina spel.

Eftersom jag ville ha en plug and play -enhet som du kan använda direkt med vilken dator som helst, köpte jag en Arduino Leonardo. Det är nästan identiskt med en Uno, men med några skillnader. Den största skillnaden som jag kommer att använda till min fördel för detta projekt är dess förmåga att fungera som ett HID. En HID eller human interface -enhet är ett USB -protokoll som gör att din dator kan känna igen och acceptera inmatning från tangentbord och en datormus utan att behöva installera anpassade drivrutiner för varje enhet.

Obs! Du kan också använda en Uno om du uppdaterar firmware, som visas här.

Steg 1: Material

För detta projekt behöver du:

1x HID -kompatibel mikrokontroller (det finns några som Arduino micro, Due & leonardo, jag kommer att använda Arduino Leonardo)

1x USB till arduino -kabel (för Leonardo är det USB -mikro)

3x Arcade -knappar (jag köpte dessa)

1x lödlös brödbräda

3x 10k ohm motstånd

3x 220 ohm motstånd

Bygelkablar

Du kan naturligtvis lägga till fler knappar eller lödda allt på en brödbräda för att göra saker mer permanenta.

Steg 2: Prototypning

Prototyper
Prototyper
Prototyper
Prototyper
Prototyper
Prototyper

Så innan jag köpte arkadknapparna som jag ville använda testade jag detta med vanliga tryckknappar. Anslut knapparna på standard sätt, jag tror att jag använde 10K ohm motstånd.

Programmeringen, tack vare Leonardo, är ganska enkel. Du måste inkludera tangentbordsbiblioteket. Jag använde Arduino standardexempel "Tangentbordsmeddelande" som bas för min kod.

Nu är frågan hur du vill att dina knappar ska fungera. Du har i princip två val, enkla knapptryckningar och en kontinuerlig ström av bokstäver om du trycker på dem. Det beror verkligen på ditt projekt vad du vill ha.

Om du vill att en enda förekomst av något ska hända om du trycker på en tangent, till exempel ett hopp eller en på/av -omkopplare, väljer du metoden för enkel tryckning. Med den här metoden tittar du på knappens tillstånd, är det upp eller ner? Sedan jämför du det med det tidigare tillståndet, var det redan upp eller ner? Om det föregående knappläget är detsamma som det aktuella knappläget händer ingenting. Men om knapptillståndet ändras, som när du trycker på eller släpper en knapp händer något. I min kod skriver den bara en bokstav när knappen trycks in, inte när den släpps men du kan ändra detta.

#inkludera "Keyboard.h"

const int buttonLeft = A0; // inmatningsstift för tryckknapp

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

int previousButtonStateLeft = HIGH; // för att kontrollera statusen för en tryckknapp

int previousButtonStateRight = HIGH; int previousButtonStateUp = HIGH;

void setup () {

// gör pushButton -stiftet till en ingång: pinMode (buttonLeft, INPUT); pinMode (buttonRight, INPUT); pinMode (buttonUp, INPUT); // initiera kontrollen över tangentbordet: Keyboard.begin (); }

void loop () {

// läs tryckknappen: int buttonStateLeft = digitalRead (buttonLeft); // om knappens tillstånd har ändrats, om ((buttonStateLeft! = previousButtonStateLeft) // och det är för närvarande tryckt: && (buttonStateLeft == HIGH)) {// skriv ut ett meddelande Keyboard.print ("a"); } // spara det aktuella knappläget för jämförelse nästa gång: previousButtonStateLeft = buttonStateLeft;

// läs tryckknappen:

int buttonStateRight = digitalRead (buttonRight); // om knappens tillstånd har ändrats, om ((buttonStateRight! = previousButtonStateRight) // och det är för närvarande tryckt: && (buttonStateRight == HIGH)) {// skriv ut ett meddelande Keyboard.print ("w"); } // spara det aktuella knappläget för jämförelse nästa gång: previousButtonStateRight = buttonStateRight;

// läs tryckknappen:

int buttonStateUp = digitalRead (buttonUp); // om knappens tillstånd har ändrats, om ((buttonStateUp! = previousButtonStateUp) // och det för närvarande trycks: && (buttonStateUp == HIGH)) {// skriv ut ett meddelande Keyboard.print ("d"); } // spara det aktuella knappläget för jämförelse nästa gång: previousButtonStateUp = buttonStateUp; }

Om du vill att något ska hända kontinuerligt så länge knappen trycks in, som du skulle vilja för en vänster- eller högerrörelse, låt den bara skriva ett brev utan att kontrollera föregående knapptillstånd. Kom ihåg att lägga till en liten fördröjning för att förhindra att den blir galen och för att motverka alla studsar som dina knappar kan ha. Det finns mer eleganta sätt att lösa detta problem, men det här är enkelt och snabbt.

#inkludera "Keyboard.h"

const int buttonLeft = A0; // inmatningsstift för tryckknapp

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

void setup () {

// gör pushButton -stiftet till en ingång: pinMode (buttonLeft, INPUT); pinMode (buttonRight, INPUT); pinMode (buttonUp, INPUT); // initiera kontrollen över tangentbordet: Keyboard.begin (); }

void loop () {

// läs tryckknappen: int buttonStateLeft = digitalRead (buttonLeft); if (buttonStateLeft == HIGH) // om knappen trycks ned {// skriv ut ett meddelande Keyboard.print ("a"); fördröjning (50); // Fördröjning för studsa och låta datorn komma ikapp}

// läs tryckknappen:

int buttonStateRight = digitalRead (buttonRight); if (buttonStateRight == HIGH) // om knappen trycks ned {// skriv ut ett meddelande Keyboard.print ("w"); fördröjning (50); // Fördröjning för studsa och låta datorn komma ikapp}

// läs tryckknappen:

int buttonStateUp = digitalRead (buttonUp); if (buttonStateUp == HIGH) // om knappen trycks ned {// skriv ut ett meddelande Keyboard.print ("d"); fördröjning (50); // Fördröjning för studsa och låta datorn komma ikapp}}

Du kan alltid använda en blandning av båda metoderna, beroende på vad som bäst passar dina behov.

Steg 3: Laserskärning av fodralet

Laserskärning av fodralet
Laserskärning av fodralet

För fallet använde jag 3 mm mdf, med en 2 mm plexiglasinsats. Jag lade till insatsen eftersom jag vill lägga till några lysdioder på insidan av fodralet i ett senare skede för att göra det fint och glödande.

Jag matade in mina dimensioner för att göra stora och nedladdade svg -filen. Jag öppnade den i Illustrator och lade till hålen där jag ville ha dem. Om du inte har Illustrator kan du använda Inkscape för det här steget.

Du behöver naturligtvis inte använda en laserskärare, eftersom det här är en enkel låda med några hål i. Det borde vara lätt nog att skapa det med mer traditionella elverktyg (eller till och med handverktyg!) Jag är bara väldigt lat och hade tillgång till en laserskärare.

Steg 4: Lödning av arkadknappar

Lödarkadeknappar
Lödarkadeknappar
Lödarkadeknappar
Lödarkadeknappar
Lödarkadeknappar
Lödarkadeknappar

En arkadknapp (eller min åtminstone) består av tre delar. Plasthöljet, LED -hållaren (med LED i) och mikrobrytaren. Mikrobrytaren är den faktiska knappdelen av knappen och är vad du behöver för att ansluta till din Arduino. Det finns tre terminaler (metallbitar som sticker ut, där du lödar dina trådar) på mikrobrytaren. Den på toppen (eller botten, vad du vill) är marken. De andra två terminalerna är Normal Open (NO) och Normal Closed (NC). NO betyder att om du trycker på strömbrytaren kommer den att ansluta. NC betyder att om knappen trycks in bryts anslutningen. Vi kommer att använda NEJ för detta projekt. Jag märkte marken, NO och NC på min mikrobrytare i bilderna.

Mina knappar är upplysta så jag lodde ledningar till LED -hållaren. Se till att färgkoda dina ledningar så att du vet vilken sida som är anoden och vilken katod (positiva och negativa sidor av lysdioden).

Jag lödde huvudstiften på mina trådar, för att göra dem enkla att använda med en lödlös brödbräda. Jag lödde bara tråden till en huvudstift och lade lite värmekrympslangar för att göra dem mer motståndskraftiga.

Steg 5: Stapla knapparna och anslut dem till ditt kort

Stapla knapparna och anslut dem till ditt kort
Stapla knapparna och anslut dem till ditt kort
Stapla knapparna och anslut dem till ditt kort
Stapla knapparna och anslut dem till ditt kort
Stapla knapparna och anslut dem till ditt kort
Stapla knapparna och anslut dem till ditt kort
Stapla knapparna och anslut dem till ditt kort
Stapla knapparna och anslut dem till ditt kort

Nu är det dags att stapla dina arkadknappar i ditt fodral. Ta bort låsringen från plasthöljet och stick den genom hålet i höljet. Trä låsringen på andra sidan för att fästa knappen på plats. Stick in LED -hållaren och vrid den för att låsa den på plats. Vrid i mikrobrytarna (det finns små nobbar och hål som ligger i linje med varandra för att hålla det på plats).

För att ansluta omkopplarna till kortet tar du bort tryckknapparna som du kanske har lagt till. Anslut ledningen från mikrobrytarens jord till marken på Arduino och motståndet (där tryckknappens ben var). Anslut ledningen som leder från NO på mikrobrytaren till 5v på Arduino.

För LED -kablarna ansluter den negativa ledningen till marken och den positiva via ett 220OHM -motstånd till 5v. Om du kopplar upp dem så här kommer de alltid att vara på. Du kan lägga till dem i koden och få dem att slå på och av synkroniserade med knapparna om du vill.

Steg 6: Kodningshelvet

Så nu har du fäst dina snygga nya knappar till din gamla kod och plötsligt fungerar det inte som det ska längre. Bokstäverna visas två eller tre åt gången och det fungerar inte som det ska med enkla HTML5 -spel. Välkommen till debounce helvetet.

Första sakerna först. Koden som vi skrev under prototyper? det fungerar bra och är enkelt, men det är inte elegant. Om du vill lägga till fler knappar måste du kopiera och klistra in kodavsnitt och ändra alla värden i dem. Om du glömmer en av dem går du in i det buggfixande helvetet. Upptäcker du ett tema här? Kodning är ett helvete, men ett väldigt roligt problemlösande helvete.

Vi vill ha en vacker, kort kod. Så vi ändrar alla enskilda knappheltal till matriser. På detta sätt, om du vill lägga till fler knappar behöver du bara ändra knappmängden, stiften där de finns och deras utgång. Vi ändrar också nyckelinmatningarna till ASCII eftersom … det fungerar bättre?

Nu om du är som jag skriver du ett enkelt och enkelt sätt att använda knapparna och det fungerar inte så bra som du vill. Så du skapar nya versioner (kom ihåg barn, inkrementella säkerhetskopior!), Provar olika saker, skriver ständigt mer komplicerad kod som fortfarande inte fungerar bra och går så småningom tillbaka till den enkla koden du skrev för några timmar sedan OCH märker ett litet fel som fixar omedelbart allt.

Låt mig spara dig den resan, här är arbetskoden:

Friskrivningsklausul: den här texten skrevs efter timmar med kodning och buggfixning av en mycket enkel kod. Ta bort alla tecken på frustration och fokusera på arbetskoden som anges nedan;)

#inkludera "Keyboard.h" #define buttonMount 3

int buttonPin = {

A0, A1, A2}; // Var är knapparna? int asciiLetter = {97, 100, 119}; // Bokstäver i ASCII, här: a, d, w int buttonState [buttonAmount]; // Är knappen tryckt eller inte?

void setup () {

for (int i = 0; i <buttonAmount; i ++) {// cykla genom array -pinMode (buttonPin , INPUT); // ställ in alla stift för att mata in}}

void loop () {

for (int i = 0; i <buttonAmount; i ++) // cykla genom matrisen {buttonState = digitalRead (buttonPin ); // Vad gör knapparna? if (buttonState == HIGH) {// Om knappen trycks ned Keyboard.press (asciiLetter ); // skicka motsvarande bokstav} else // om knappen inte trycks in {Keyboard.release (asciiLetter ); // släpp brevet}}

}

Steg 7: Allt fungerar

Njut av din plug & play anpassade handkontroll!

Om du gillade detta instruerbart, överväga att rösta på mig i tävlingen!

Rekommenderad: