Përmbajtje:
- Hapi 1: Materialet
- Hapi 2: Prototipizimi
- Hapi 3: Prerja e rastit me lazer
- Hapi 4: Saldimi i butonave të arkadës
- Hapi 5: Grumbulloni butonat dhe lidhini ato me tabelën tuaj
- Hapi 6: Kodimi i Ferrit
- Hapi 7: Gjithçka funksionon
Video: Pllaka dhe luaj butona Arcade: 7 hapa (me fotografi)
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:27
Kohët e fundit fillova të përdor Arduino për të bërë projektet e mia. Si stilist më pëlqen të krijoj ndërfaqe me porosi për lojërat/projektet e mia interaktive.
Problemi i vetëm që hasa në atë që përdorimi i komunikimit serik është mjaft i komplikuar dhe i prirur për probleme dhe gabime dhe doja një zgjidhje të shpejtë dhe të lehtë për të më lejuar të përdor butona të jashtëm për të kontrolluar lojërat e mia.
Ndërsa doja një pajisje plug and play që mund ta përdorni menjëherë me çdo kompjuter, bleva një Arduino Leonardo. Almostshtë pothuajse identike me një Uno, por me disa dallime. Dallimi kryesor që do të përdor në avantazhin tim për këtë projekt është aftësia e tij për të vepruar si HID. Një pajisje HID, ose ndërfaqe njerëzore është një protokoll USB që lejon kompjuterin tuaj të njohë dhe pranojë hyrjet nga tastierat dhe miun e kompjuterit pa pasur nevojë të instaloni drejtues të personalizuar për secilën pajisje.
shënim: gjithashtu mund të përdorni një Uno, nëse përditësoni firmuerin, siç tregohet këtu.
Hapi 1: Materialet
Për këtë projekt do t'ju duhet:
1x mikrokontrollues i aftë HID (ka disa si Arduino micro, Due & leonardo, do të përdor Arduino Leonardo)
1x kabllo USB për arduino (për Leonardo është mikro USB)
3x butona Arcade (i bleva këto)
1x dërrasë buke pa saldim
3x rezistente 10k ohm
3x rezistenca 220 ohm
Telat e kërcyesit
Sigurisht që mund të shtoni më shumë butona, ose të lidhni gjithçka në një pjatë për t'i bërë gjërat më të përhershme.
Hapi 2: Prototipizimi
Pra, para se të blija butonat e arkadës që doja të përdorja, e provova këtë me butona standardë të shtypjes. Lidhni butonat në mënyrën standarde, besoj se kam përdorur rezistorë 10K ohm.
Programimi, falë Leonardos, është mjaft i thjeshtë. Duhet të përfshini bibliotekën e tastierës. Kam përdorur shembullin standard Arduino "Mesazhi i tastierës" si bazë për kodin tim.
Tani pyetja është se si dëshironi që butonat tuaj të funksionojnë. Në thelb keni dy zgjedhje, shtypje të butonave të vetëm dhe një rrjedhë të vazhdueshme shkronjash nëse shtyhen. Vërtetë varet nga projekti juaj se çfarë dëshironi.
Nëse dëshironi që një shembull i vetëm i diçkaje të ndodhë nëse shtypni një çelës, si një kërcim ose një çelës on/off, atëherë ju do të zgjidhni metodën e shtytjes së vetme. Me këtë metodë ju shikoni gjendjen e butonit, është lart apo poshtë? Pastaj e krahasoni me gjendjen e mëparshme, ishte tashmë lart apo poshtë? Nëse gjendja e mëparshme e butonit është e njëjtë me gjendjen aktuale të butonit, asgjë nuk ndodh. Por nëse gjendja e butonit ndryshon, si tek ju shtypni ose lëshoni një buton diçka ndodh. Në kodin tim shkruan vetëm një shkronjë kur shtypet butoni, jo kur lëshohet, por ju mund ta ndryshoni këtë.
#përfshi "Tastiera.h"
const int buttonLeft = A0; // kunja hyrëse për butonin shtytës
const int buttonRight = A1; const int buttonUp = A2;
int previousButtonStateLeft = LART; // për të kontrolluar gjendjen e një butoni shtytës
int previousButtonStateRight = LART; int previousButtonStateUp = LART;
void setup () {
// bëjeni pinin e ButButton një hyrje: pinMode (buttonLeft, INPUT); pinMode (buttonRight, INPUT); pinMode (buttonUp, INPUT); // filloni kontrollin mbi tastierën: Keyboard.begin (); }
lak void () {
// lexoni butonin: int buttonStateLeft = digitalRead (buttonLeft); // nëse gjendja e butonit ka ndryshuar, nëse ((buttonStateLeft! = previousButtonStateLeft) // dhe aktualisht është shtypur: && (buttonStateLeft == LART HIGH)) {// shtypni një mesazh Keyboard.print ("a"); } // ruani gjendjen aktuale të butonit për krahasim herën tjetër: previousButtonStateLeft = buttonStateLeft;
// lexoni butonin:
int buttonStateRight = digitalRead (butoniDjathtas); // nëse gjendja e butonit ka ndryshuar, nëse ((buttonStateRight! = previousButtonStateRight) // dhe aktualisht është shtypur: && (buttonStateRight == HIGH)) {// shkruani një mesazh Keyboard.print ("w"); } // ruani gjendjen aktuale të butonit për krahasim herën tjetër: previousButtonStateRight = buttonStateRight;
// lexoni butonin:
int buttonStateUp = digitalRead (buttonUp); // nëse gjendja e butonit ka ndryshuar, nëse ((buttonStateUp! = previousButtonStateUp) // dhe aktualisht është shtypur: && (buttonStateUp == HIGH)) {// shkruani një mesazh Keyboard.print ("d"); } // ruani gjendjen aktuale të butonit për krahasim herën tjetër: previousButtonStateUp = buttonStateUp; }
Nëse dëshironi që diçka të ndodhë vazhdimisht përderisa butoni shtypet, ashtu siç dëshironi për një lëvizje majtas ose djathtas, thjesht lërini të shkruajë një letër pa kontrolluar gjendjen e mëparshme të butonit. Mos harroni të shtoni një vonesë të vogël për ta parandaluar atë të çmendet dhe për të kundërshtuar çdo kërcim që mund të kenë butonat tuaj. Ka mënyra më elegante për të zgjidhur këtë problem, por kjo është e lehtë dhe e shpejtë.
#përfshi "Tastiera.h"
const int buttonLeft = A0; // kunja hyrëse për butonin shtytës
const int buttonRight = A1; const int buttonUp = A2;
void setup () {
// bëjeni pinin e ButButton një hyrje: pinMode (buttonLeft, INPUT); pinMode (buttonRight, INPUT); pinMode (buttonUp, INPUT); // filloni kontrollin mbi tastierën: Keyboard.begin (); }
lak void () {
// lexoni butonin: int buttonStateLeft = digitalRead (buttonLeft); nëse (buttonStateLeft == LART) // nëse butoni shtypet {// shtypni një mesazh Keyboard.print ("a"); vonesë (50); // Vonesë për kërcimin dhe për t'ju lejuar të arrini kompjuterin}
// lexoni butonin:
int buttonStateRight = digitalRead (butoniDjathtas); nëse (buttonStateRight == LART) // nëse butoni shtypet {// shtypni një mesazh Keyboard.print ("w"); vonesë (50); // Vonesë për kërcimin dhe për t'ju lejuar të arrini kompjuterin}
// lexoni butonin:
int buttonStateUp = digitalRead (buttonUp); nëse (buttonStateUp == LART) // nëse butoni shtypet {// shtypni një mesazh Keyboard.print ("d"); vonesë (50); // Vonesë për kërcim dhe për t'ju lejuar të kapni kompjuterin}}
Ju gjithmonë mund të përdorni një përzierje të të dy metodave, në varësi të asaj që i përshtatet më së miri nevojave tuaja.
Hapi 3: Prerja e rastit me lazer
Për rastin kam përdorur 3 mm mdf, me një insert pleksiglas 2 mm. Shtova shtojcën pasi dua të shtoj disa LED në pjesën e brendshme të kasës në një fazë të mëvonshme për ta bërë atë të bukur dhe me shkëlqim.
I futa dimensionet e mia në makercase dhe shkarkova skedarin svg. E hapa në Illustrator dhe shtova vrimat ku i doja. Nëse nuk keni Illustrator, mund të përdorni Inkscape për këtë hap.
Sigurisht që nuk keni nevojë të përdorni një prestar lazer, pasi kjo është një kuti e thjeshtë me disa vrima në të. Duhet të jetë mjaft e lehtë për ta krijuar atë duke përdorur mjete më tradicionale të energjisë (ose edhe mjete dore!) Unë jam thjesht shumë dembel dhe kisha qasje në një prestar lazer.
Hapi 4: Saldimi i butonave të arkadës
Një buton arcade (ose të paktën imi) përbëhet nga tre pjesë. Shtresa plastike, mbajtësja LED (me LED në të) dhe çelësi mikro. Mikro çelësi është pjesa aktuale e butonit të butonit dhe është ajo që ju nevojitet për t'u lidhur me Arduino -n tuaj. Ekzistojnë tre terminale (copa metalike që dalin jashtë, ku do të lidhni telat) në mikroçelës. Ai në krye (ose në fund, ajo që dëshironi) është toka. Dy terminalet e tjerë janë Normal Open (NO) dhe Normal Mbyllur (NC). JO do të thotë që nëse çelësi shtypet bën një lidhje. NC do të thotë që nëse shtypet butoni prish lidhjen. Ne do të përdorim JO për këtë projekt. Unë etiketova tokën, JO dhe NC në mikro kalimin tim në fotografi.
Butonat e mi janë të ndriçuar kështu që unë ngjita telat në mbajtësen LED. Sigurohuni që të kodoni telat tuaj në mënyrë që të dini se cila anë është anoda dhe cila katodë (anët pozitive dhe negative të LED).
Kam bashkuar kunjat e kokës në telat e mi, për t'i bërë të lehtë për t'u përdorur me një dërrasë buke pa saldim. Sapo e bashkova tela në një kunj të kokës dhe vendosa pak tuba për tkurrjen e nxehtësisë për t'i bërë ata më elastikë.
Hapi 5: Grumbulloni butonat dhe lidhini ato me tabelën tuaj
Tani është koha për të grumbulluar butonat tuaj arcade në rastin tuaj. Hiqeni unazën e kyçjes nga shtresa plastike dhe ngjiteni atë përmes vrimës në kasë. Vidhni unazën e kyçjes në anën tjetër për të siguruar butonin në vend. Ngjiteni në mbajtësen LED dhe ktheni atë për ta mbyllur në vend. Lëvizni në çelsat mikro (ka pak zhurmë dhe vrima që përputhen me njëra -tjetrën për ta mbajtur atë në vend).
Për të lidhur çelsat në tabelë hiqni butonat që mund t'i keni shtuar ose jo. Lidhni tela që çon nga toka e mikroçelësit në tokën e Arduino dhe rezistencës (aty ku ishte këmba e butonit të shtypjes). Lidhni tela që çon nga NO e mikroçelësit në 5v të Arduino.
Për telat LED lidhni telin negativ në tokë dhe atë pozitiv nëpërmjet një rezistence 220OHM në 5v. Nëse i lidhni ato kështu, ato do të jenë gjithmonë të ndezura. Ju mund t'i shtoni ato në kod dhe t'i bëni që të ndizen dhe fiken në sinkron me butonat nëse dëshironi.
Hapi 6: Kodimi i Ferrit
Pra, tani ju i keni bashkangjitur butonave tuaj të rinj të zbukuruar kodit tuaj të vjetër dhe papritmas nuk funksionon siç duhet më. Shkronjat shfaqen dy ose tre në të njëjtën kohë dhe nuk funksionon siç duhet me lojërat e thjeshta HTML5. Mirë se vini në zbardhjen e ferrit.
Gjërat e para në fillim. Kodi që kemi shkruar gjatë prototipimit? funksionon mirë dhe është e thjeshtë, por nuk është elegante. Nëse dëshironi të shtoni më shumë butona, duhet të kopjoni dhe ngjisni pjesë të kodit dhe të ndryshoni të gjitha vlerat brenda tyre. Nëse harroni njërën prej tyre, hyni në ferrin e rregullimit të defekteve. Zbuloni një temë këtu? Kodimi është ferr, por një ferr shumë argëtues, i zgjidhjes së problemeve.
Ne duam një kod të bukur, të shkurtër. Pra, ne do t'i ndryshojmë të gjithë numrat e plotë të butonave në vargje. Në këtë mënyrë, nëse doni të shtoni më shumë butona ju duhet vetëm të ndryshoni sasinë e butonit, kunjat ku ndodhen dhe daljen e tyre. Ne gjithashtu ndryshojmë hyrjet kryesore në ASCII sepse … funksionon më mirë?
Tani nëse jeni si unë, do të shkruani një mënyrë të thjeshtë dhe të lehtë për të përdorur butonat dhe nuk do të funksionojë aq sa dëshironi. Kështu që ju krijoni versione të reja (mbani mend fëmijët, kopje rezervë shtesë!), Provoni gjëra të ndryshme, shkruani vazhdimisht kod më të komplikuar që ende nuk funksionon mirë dhe përfundimisht kthehuni në kodin e thjeshtë që keni shkruar orë më parë DHE vëreni një gabim të vogël i cili rregullon menjëherë gjithçka.
Më lejoni t'ju kursej atë udhëtim, këtu është kodi i punës:
Përgjegjësia: ky tekst është shkruar pas orësh kodimi dhe rregullimi të defekteve në një kod shumë të thjeshtë. Ju lutemi shpërfillni çdo shenjë zhgënjimi dhe përqendrohuni në kodin e punës të postuar më poshtë;)
#përfshi "Tastiera.h" #përcakto butoninSasia 3
butoni intPin = {
A0, A1, A2}; // Ku janë butonat? int asciiLetter = {97, 100, 119}; // Letra në ASCII, këtu: a, d, w int buttonState [buttonAmount]; // A shtypet butoni apo jo?
void setup () {
për (int i = 0; i <buttonAmount; i ++) {// kaloni nëpër pinMode të grupit (buttonPin , INPUT); // vendosni të gjitha kunjat në hyrje}}
lak void () {
për (int i = 0; i <buttonAmount; i ++) // kaloni nëpër grupin {buttonState = digitalRead (buttonPin ); // Çfarë po bëjnë butonat? nëse (buttonState == LART) {// Nëse butoni shtypet Keyboard.press (asciiLetter ); // dërgoni shkronjën përkatëse} else // nëse butoni nuk shtypet {Keyboard.release (asciiLetter ); // lësho letrën}}
}
Hapi 7: Gjithçka funksionon
Shijoni kontrolluesin tuaj të personalizuar plug & play!
Nëse ju pëlqeu kjo udhëzues, ju lutemi konsideroni të votoni për mua në konkurs!
Recommended:
Arduino Kontrolloni shpejtësinë dhe drejtimin e motorit DC duke përdorur një potenciometër, ekran OLED dhe butona: 6 hapa
Arduino Kontrolli shpejtësinë dhe drejtimin e motorit DC duke përdorur një potenciometër, ekran OLED dhe butona: Në këtë tutorial ne do të mësojmë se si të përdorim një drejtues L298N DC MOTOR CONTROL dhe një potenciometër për të kontrolluar shpejtësinë dhe drejtimin e motorit DC me dy butona dhe të shfaqim vlerën e potenciometrit në ekranin OLED. Shikoni një video demonstruese
Nisja, shpejtësia dhe drejtimi i qetë i motorit DC duke përdorur një potenciometër, ekran OLED dhe butona: 6 hapa
Nisja, shpejtësia dhe drejtimi i qetë i motorit DC duke përdorur një potenciometër, ekran OLED dhe butona: Në këtë tutorial ne do të mësojmë se si të përdorim një drejtues L298N DC MOTOR CONTROL dhe një potenciometër për të kontrolluar fillimin, shpejtësinë dhe drejtimin e qetë të motorit DC me dy butona dhe shfaqni vlerën e potenciometrit në Ekranin OLED. Shikoni një video demonstruese
Arduino Kontrolloni shpejtësinë dhe drejtimin e motorit DC duke përdorur një potenciometër dhe butona: 6 hapa
Arduino Kontrolli i shpejtësisë dhe drejtimit të motorit DC duke përdorur një potenciometër dhe butona: Në këtë tutorial do të mësojmë se si të përdorim një drejtues L298N DC MOTOR CONTROL dhe një potenciometër për të kontrolluar shpejtësinë dhe drejtimin e motorit DC me dy butona. Shikoni një video demonstruese
Luaj CD pa CD Player, duke përdorur AI dhe YouTube: 10 hapa (me fotografi)
Luaj CD pa CD Player, duke përdorur AI dhe YouTube: Dëshironi të luani CD -të tuaj por nuk keni më CD player? Nuk keni pasur kohë për të shqyer CD -të tuaja? I grisi ato, por skedarët nuk janë të disponueshëm kur është e nevojshme? Nuk ka problem. Lëreni AI (inteligjencën artificiale) të identifikojë CD -në tuaj dhe YouTube ta luajë atë! Unë shkrova një aplikacion Android që bën
LUAJ DHE RimbARIM IPOD PINGRDORIMI I BOOMBOX -it TLD VJETR - Këshilla dhe Këshilla: 5 hapa (me fotografi)
LUAJ DHE RimbARIM IPOD P USRDORIMI I BOOMBOX -it TLD VJETR - Këshilla dhe Këshilla: Konsideroni këtë si një shtesë për modalitetet e tjera të iPod boombox. Unë e pranoj që kam marrë hua nga udhëzues të tjerë. Për të mos u hequr nga ato udhëzime, këtu është një " bërtas " atyre që më frymëzuan të zhyten në modën time. Faleminderit. E udhëzueshme