Sisukord:

Plug and Play arcade nupud: 7 sammu (koos piltidega)
Plug and Play arcade nupud: 7 sammu (koos piltidega)

Video: Plug and Play arcade nupud: 7 sammu (koos piltidega)

Video: Plug and Play arcade nupud: 7 sammu (koos piltidega)
Video: 😂 Разваливается ли б/ушный Ford Mondeo 4 или годами ездит без проблем? Ответы здесь. 2024, November
Anonim
Plug and Play Arcade'i nupud
Plug and Play Arcade'i nupud

Alustasin hiljuti Arduino kasutamist oma projektide tegemiseks. Disainerina armastan oma mängude/interaktiivsete projektide jaoks kohandatud liideste loomist.

Üks probleem, millega ma kokku puutusin, oli see, et jadaühenduse kasutamine on üsna keeruline ning altid probleemidele ja vigadele ning ma tahtsin kiiret ja lihtsat lahendust, mis võimaldaks mul oma mängude juhtimiseks kasutada väliseid nuppe.

Kuna ma tahtsin plug and play seadet, mida saaksite kohe kasutada mis tahes arvutiga, ostsin Arduino Leonardo. See on peaaegu identne Unoga, kuid mõningate erinevustega. Peamine erinevus, mida ma selle projekti jaoks oma huvides kasutan, on võime käituda HID -na. HID ehk inimliidesega seade on USB -protokoll, mis võimaldab teie arvutil ära tunda ja vastu võtta klaviatuuride ja arvutihiire sisendi, ilma et peaksite iga seadme jaoks kohandatud draivereid installima.

märkus: saate kasutada ka Uno -d, kui värskendate püsivara, nagu siin näidatud.

Samm: materjalid

Selle projekti jaoks vajate:

1x HID -toega mikrokontroller (on mõned sellised nagu Arduino micro, Due & leonardo, kasutan Arduino Leonardo)

1x USB -arduino kaabel (Leonardo puhul on see USB -mikro)

3x Arcade nupud (ostsin need)

1x jootevaba leib

3x 10k oomi takistid

3x 220 oomi takistid

Jumper juhtmed

Loomulikult võite lisada rohkem nuppe või joota kõike leivaplaadile, et muuta asjad püsivamaks.

2. etapp: prototüüpimine

Prototüüpimine
Prototüüpimine
Prototüüpimine
Prototüüpimine
Prototüüpimine
Prototüüpimine

Nii et enne arkaadnuppude ostmist, mida tahtsin kasutada, katsetasin seda tavaliste nuppudega. Ühendage nupud tavalisel viisil, usun, et kasutasin 10K oomi takistit.

Programmeerimine on tänu Leonardole üsna lihtne. Peate lisama klaviatuuri kogu. Kasutasin oma koodi alusena Arduino standardnäidet „Klaviatuurisõnum“.

Nüüd on küsimus selles, kuidas soovite, et teie nupud töötaksid. Põhimõtteliselt on teil kaks valikut, üksikute nuppude vajutamine ja pidev kirjavoog, kui neid vajutatakse. See sõltub tõesti teie projektist, mida soovite.

Kui soovite, et klahvi vajutamisel juhtuks midagi, näiteks hüppamine või sisse-/väljalülitamine, siis valiksite ühe vajutusmeetodi. Selle meetodi puhul vaatate nupu olekut, kas see on üles või alla? Siis võrdlete seda eelmise olekuga, kas see oli juba üles või alla? Kui nupu eelmine olek on sama mis praeguse nupu olek, ei juhtu midagi. Aga kui nupu olek muutub, juhtub nagu nupu vajutamisel või vabastamisel midagi. Minu koodis trükib see tähe ainult siis, kui nuppu vajutatakse, mitte vabastamisel, kuid saate seda muuta.

#include "Keyboard.h"

const int nuppVasak = A0; // sisestusnõel nupule

const int nupp Õige = A1; const int nuppUp = A2;

int previousButtonStateLeft = HIGH; // nupu oleku kontrollimiseks

int previousButtonStateRight = KÕRGE; int previousButtonStateUp = KÕRGE;

tühine seadistus () {

// teha pushButton nööpnõel sisendiks: pinMode (buttonLeft, INPUT); pinMode (buttonRight, INPUT); pinMode (buttonUp, INPUT); // klaviatuuri juhtimise initsialiseerimine: Keyboard.begin (); }

void loop () {

// loe surunuppu: int buttonStateLeft = digitalRead (buttonLeft); // kui nupu olek on muutunud, if ((buttonStateLeft! = previousButtonStateLeft) // ja see on praegu vajutatud: && (buttonStateLeft == HIGH)) {// sisestage teade Keyboard.print ("a"); } // salvesta järgmine kord võrdlemiseks praegune nupu olek: previousButtonStateLeft = buttonStateLeft;

// loe nuppu:

int buttonStateRight = digitalRead (buttonRight); // kui nupu olek on muutunud, if ((buttonStateRight! = previousButtonStateRight) // ja see on praegu vajutatud: && (buttonStateRight == HIGH)) {// sisestage teade Keyboard.print ("w"); } // salvesta järgmine kord võrdlemiseks praegune nupu olek: previousButtonStateRight = buttonStateRight;

// loe nuppu:

int buttonStateUp = digitalRead (buttonUp); // kui nupu olek on muutunud, if ((buttonStateUp! = previousButtonStateUp) // ja see on praegu vajutatud: && (buttonStateUp == HIGH)) {// kirjuta välja teade Keyboard.print ("d"); } // salvesta järgmine kord võrdlemiseks praegune nupu olek: previousButtonStateUp = buttonStateUp; }

Kui soovite, et midagi toimuks pidevalt nii kaua, kuni nuppu vajutatakse, nagu sooviksite vasakule või paremale liigutamiseks, laske sellel kirjutada täht, kontrollimata eelmise nupu olekut. Ärge unustage lisada väikest viivitust, et vältida selle hulluks minekut ja tõrjuda nuppude tagasilööke. Selle probleemi lahendamiseks on elegantsemaid viise, kuid see on lihtne ja kiire.

#include "Keyboard.h"

const int nuppVasak = A0; // sisestusnõel nupule

const int nupp Õige = A1; const int nuppUp = A2;

tühine seadistus () {

// teha pushButton nööpnõel sisendiks: pinMode (buttonLeft, INPUT); pinMode (buttonRight, INPUT); pinMode (buttonUp, INPUT); // klaviatuuri juhtimise initsialiseerimine: Keyboard.begin (); }

void loop () {

// loe surunuppu: int buttonStateLeft = digitalRead (buttonLeft); if (buttonStateLeft == HIGH) // kui nuppu vajutatakse {// kirjutage teade Keyboard.print ("a"); viivitus (50); // viivitus tagasilöögi ja arvuti järelejõudmiseks}

// loe nuppu:

int buttonStateRight = digitalRead (buttonRight); if (buttonStateRight == HIGH) // kui nuppu vajutatakse {// kirjutage teade Keyboard.print ("w"); viivitus (50); // viivitus tagasilöögi ja arvuti järele jõudmiseks}

// loe nuppu:

int buttonStateUp = digitalRead (buttonUp); if (buttonStateUp == HIGH) // kui nuppu vajutatakse {// sisestage teade Keyboard.print ("d"); viivitus (50); // viivitus tagasilöögi ja arvuti järelejõudmiseks}}

Saate alati kasutada mõlema meetodi kombinatsiooni, sõltuvalt sellest, mis teie vajadustele kõige paremini sobib.

Samm: korpuse lõikamine laseriga

Korpuse lõikamine laseriga
Korpuse lõikamine laseriga

Korpuse jaoks kasutasin 3 mm mdf, 2 mm pleksiklaasist sisestusega. Lisasin sisestuse, kuna soovin korpuse siseküljele hiljem lisada mõned LED -id, et muuta see kena ja säravaks.

Sisestasin oma mõõtmed makercase'i ja laadisin alla svg -faili. Avasin selle Illustratoris ja lisasin augud sinna, kuhu soovisin. Kui teil pole Illustratorit, saate selle sammu jaoks kasutada Inkscape'i.

Loomulikult ei pea te laserlõikurit kasutama, kuna see on lihtne kast, millel on mõned augud. Selle loomine traditsiooniliste elektriliste tööriistade (või isegi käsitööriistade!) Abil peaks olema piisavalt lihtne. Ma olen lihtsalt väga laisk ja sain juurdepääsu laserlõikurile.

4. samm: arkaadnuppude jootmine

Arcade'i jootmine
Arcade'i jootmine
Arcade'i jootmine
Arcade'i jootmine
Arcade'i jootmine
Arcade'i jootmine

Arkaadinupp (või vähemalt minu oma) koosneb kolmest osast. Plastikust korpus, LED -hoidik (koos LED -iga) ja mikrolüliti. Mikrolüliti on nupu tegelik osa ja see on vajalik Arduinoga ühenduse loomiseks. Mikrolülitil on kolm klemmi (väljaulatuvad metallotsikud, kus jooteid joote). See, mis on peal (või all, mida soovite), on maapind. Ülejäänud kaks terminali on normaalselt avatud (NO) ja normaalselt suletud (NC). EI tähendab, et kui lülitit vajutada, loob see ühenduse. NC tähendab, et kui nuppu vajutada, katkestab see ühenduse. Selle projekti jaoks kasutame EI. Märgistasin piltidel oma mikrolülitil maapinna, NO ja NC.

Minu nupud on valgustatud, nii et ma jootsin juhtmed LED -hoidja külge. Kindlasti värvige oma juhtmeid värvikoodiga, et saaksite teada, kumb pool on anood ja milline katood (LED -i positiivsed ja negatiivsed küljed).

Jootsin juhtmete külge päisepoldid, et neid oleks lihtne kasutada jootmata leivaplaadiga. Jootsin traadi lihtsalt päise tihvti külge ja panin natuke termokahanevaid torusid ümber, et need oleksid vastupidavamad.

Samm: pange nupud kokku ja ühendage need oma lauaga

Pange nupud kokku ja ühendage need oma lauaga
Pange nupud kokku ja ühendage need oma lauaga
Pange nupud kokku ja ühendage need oma lauaga
Pange nupud kokku ja ühendage need oma lauaga
Pange nupud kokku ja ühendage need oma lauaga
Pange nupud kokku ja ühendage need oma lauaga
Pange nupud kokku ja ühendage need oma lauaga
Pange nupud kokku ja ühendage need oma lauaga

Nüüd on aeg oma arkaadnupud kuhjata. Eemaldage lukustusrõngas plastkorpuse küljest ja torgake see läbi korpuses oleva augu. Keerake lukustusrõngas teisel küljel kinni, et nööp oma kohale kinnitada. Kleepige LED -hoidik sisse ja keerake seda oma kohale lukustamiseks. Keerake mikrolülitid sisse (seal on väikesed nobid ja augud, mis üksteisega joonduvad, et seda paigal hoida).

Lülitite ühendamiseks plaadiga eemaldage nupud, mille olete lisanud või mitte. Ühendage mikrolüliti maapinnast juhe Arduino ja takistiga (kus oli nupu jalg). Ühendage mikrolüliti NO -st juhe Arduino 5v -ga.

LED -juhtmete jaoks ühendage negatiivne juhe maaga ja positiivne 220OHM takisti kaudu 5v -ga. Kui ühendate need niimoodi, on need alati sisse lülitatud. Soovi korral saate need koodi lisada ja lasta neil sünkroonis sisse ja välja lülitada.

6. samm: põrgu kodeerimine

Niisiis, nüüd olete oma uhked uued nupud oma vana koodi külge kinnitanud ja äkki ei tööta see enam nii nagu peaks. Tähed ilmuvad kaks või kolm korraga ja see ei tööta lihtsate HTML5 mängude puhul nii nagu peaks. Tere tulemast põrgusse.

Esimesed asjad kõigepealt. Kood, mille me prototüüpimise ajal kirjutasime? see töötab hästi ja on lihtne, kuid see pole elegantne. Kui soovite lisada rohkem nuppe, peate koodilõigud kopeerima ja kleepima ning muutma kõik nende sees olevad väärtused. Kui unustate ühe neist, sisenete vigade parandamise põrgusse. Kas leiate siit teema? Kodeerimine on põrgu, kuid väga lõbus, probleemide lahendamise põrgu.

Me tahame ilusat, lühikest koodi. Seega muudame kõik nuppude täisarvud massiivideks. Sel moel, kui soovite lisada rohkem nuppe, peate muutma ainult nuppude arvu, tihvtide asukohta ja nende väljundit. Samuti muudame võtmesisendid ASCII -ks, sest… see töötab paremini?

Nüüd, kui olete nagu mina, kirjutate lihtsa ja lihtsa viisi nuppude kasutamiseks ja see ei tööta nii hästi, kui soovite. Nii et loote uusi versioone (pidage meeles lapsi, täiendavaid varukoopiaid!), Proovige erinevaid asju, kirjutage pidevalt keerukamat koodi, mis ikka veel hästi ei tööta, ja naasete lõpuks tagasi lihtsa koodi juurde, mille kirjutasite tunde tagasi ja märkate väikest viga, parandab koheselt kõik.

Las ma säästan teid sellest teekonnast, siin on töökood:

Vastutusest loobumine: see tekst on kirjutatud pärast tundide pikkust kodeerimist ja väga lihtsa koodi parandamist. Palun ignoreerige pettumuse märke ja keskenduge allpool avaldatud töökoodile;)

#sisalda "Keyboard.h" #defineerimisnuppSumma 3

int buttonPin = {

A0, A1, A2}; // Kus on nupud? int asciiLetter = {97, 100, 119}; // Tähed ASCII -s, siin: a, d, w int buttonState [buttonAmount]; // Kas nuppu vajutatakse või mitte?

tühine seadistus () {

for (int i = 0; i <buttonAmount; i ++) {// tsükli läbimine massiivist pinMode (buttonPin , INPUT); // määrake kõik tihvtid sisestamiseks}}

void loop () {

for (int i = 0; i <buttonAmount; i ++) // massiivist ringkäik {buttonState = digitalRead (buttonPin ); // Mida nupud teevad? if (buttonState == HIGH) {// Kui nuppu vajutatakse Keyboard.press (asciiLetter ); // saatke vastav täht} else // kui nuppu ei vajutata {Keyboard.release (asciiLetter ); // vabasta kiri}}

}

Samm: kõik toimib

Nautige oma plug and play kohandatud kontrollerit!

Kui teile see juhendamine meeldis, kaaluge palun konkursil minu poolt hääletamist!

Soovitan: