Mündəricat:

Tak və Çalıştır Arcade Düymələri: 7 Adım (Şəkillərlə)
Tak və Çalıştır Arcade Düymələri: 7 Adım (Şəkillərlə)

Video: Tak və Çalıştır Arcade Düymələri: 7 Adım (Şəkillərlə)

Video: Tak və Çalıştır Arcade Düymələri: 7 Adım (Şəkillərlə)
Video: 40 полезных автотоваров с алиэкспресс, которые упростят жизнь любому автовладельцу #8 2024, Noyabr
Anonim
Tak və Çalıştır Arcade Düymələri
Tak və Çalıştır Arcade Düymələri

Bu yaxınlarda layihələrimi həyata keçirmək üçün Arduinodan istifadə etməyə başladım. Bir dizayner olaraq oyunlarım/interaktiv layihələrim üçün xüsusi interfeyslər qurmağı sevirəm.

Qarşılaşdığım bir problem, ardıcıl ünsiyyətdən istifadə olduqca mürəkkəbdir və problemlərə və səhvlərə meyllidir və oyunlarımı idarə etmək üçün xarici düymələrdən istifadə etməyimə imkan verən sürətli və asan bir həll istədim.

İstənilən kompüterdə anında istifadə edə biləcəyiniz bir qoşma cihazı istədiyim üçün bir Arduino Leonardo aldım. Bir Uno ilə demək olar ki, eynidir, ancaq bir neçə fərqlə. Bu layihə üçün öz xeyrimə istifadə edəcəyim əsas fərq, HID rolunu oynamaq qabiliyyətidir. HID və ya insan interfeysi cihazı, kompüterinizə hər bir cihaz üçün xüsusi sürücülər yükləmədən klaviatura və kompüter siçanından girişi tanımağa və qəbul etməyə imkan verən USB protokoldur.

Qeyd: firmware proqramını burada göstərildiyi kimi yeniləsəniz Uno da istifadə edə bilərsiniz.

Addım 1: Materiallar

Bu layihə üçün sizə lazım olacaq:

1x HID qabiliyyətli mikro nəzarətçi (Arduino micro, Due & leonardo kimi bir neçə var, Arduino Leonardodan istifadə edəcəm)

Arduino kabelindən 1x USB (Leonardo üçün USB mikro)

3x Arcade düymələri (bunları aldım)

1x lehimsiz çörək taxtası

3x 10k ohm rezistorlar

3x 220 ohm rezistorlar

Jumper telləri

Əlbəttə ki, hər şeyi daha daimi etmək üçün daha çox düymə əlavə edə və ya hər şeyi çörək taxtasına lehimləyə bilərsiniz.

Addım 2: Prototipləşdirmə

Prototipləşdirmə
Prototipləşdirmə
Prototipləşdirmə
Prototipləşdirmə
Prototipləşdirmə
Prototipləşdirmə

İstifadə etmək istədiyim arcade düymələrini almazdan əvvəl bunu standart düymələrlə sınadım. Düymələri standart şəkildə bağlayın, inanıram ki, 10K ohm rezistorlar istifadə etdim.

Leonardo sayəsində proqramlaşdırma olduqca sadədir. Klaviatura kitabxanasını daxil etməlisiniz. Kodum üçün əsas olaraq Arduino standart "Klaviatura mesajı" nümunəsini istifadə etdim.

İndi sual düymələrinizin necə işləməsini istəyirsiniz. Əsasən iki seçiminiz var, tək düymələrə basmaq və itələsəniz davamlı məktub axını. Həqiqətən nə istəyəcəyiniz layihənizdən asılıdır.

Bir atlama və ya açma/söndürmə düyməsi kimi bir düyməyə basıldığı təqdirdə bir şeyin olmasını istəsəniz, tək basma üsulunu seçərdiniz. Bu üsulla düymənin vəziyyətinə baxırsınız, yuxarı və ya aşağı? Sonra əvvəlki vəziyyətlə müqayisə edirsiniz, artıq yuxarı və ya aşağı idi? Əvvəlki düymə vəziyyəti indiki düymə vəziyyəti ilə eynidirsə, heç bir şey olmaz. Ancaq düymənin vəziyyəti dəyişərsə, düyməni basanda və ya buraxanda bir şey olur. Kodumda yalnız düyməni basıldıqda bir məktub yazılır, buraxıldıqda deyil, ancaq bunu dəyişə bilərsiniz.

#"Keyboard.h" daxil edin

const int buttonLeft = A0; // düymə üçün giriş pimi

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

int əvvəlkiButtonStateLeft = YÜKSƏK; // bir düymənin vəziyyətini yoxlamaq üçün

int əvvəlkiButtonStateRight = YÜKSƏK; int əvvəlkiButtonStateUp = YÜKSƏK;

boş quraşdırma () {

// pushButton pinini girişə çevirin: pinMode (buttonLeft, INPUT); pinMode (buttonRight, INPUT); pinMode (düyməni yuxarı, GİRİŞ); // klaviatura üzərində nəzarəti başlat: Keyboard.begin (); }

boşluq döngəsi () {

// düyməni oxuyun: int buttonStateLeft = digitalRead (buttonLeft); // düymə vəziyyəti dəyişərsə, əgər ((buttonStateLeft! = previousButtonStateLeft) // və bu anda sıxılır: && (buttonStateLeft == HIGH)) {// bir mesaj yazın Keyboard.print ("a"); } // cari düymə vəziyyətini növbəti dəfə müqayisə üçün qeyd edin: previousButtonStateLeft = buttonStateLeft;

// düyməni oxuyun:

int buttonStateRight = digitalRead (buttonRight); // düymənin vəziyyəti dəyişərsə, əgər ((buttonStateRight! = previousButtonStateRight) // və bu anda sıxılır: && (buttonStateRight == HIGH)) {// bir mesaj yazın Keyboard.print ("w"); } // cari düymə vəziyyətini növbəti dəfə müqayisə üçün qeyd edin: previousButtonStateRight = buttonStateRight;

// düyməni oxuyun:

int buttonStateUp = digitalRead (buttonUp); // düymə vəziyyəti dəyişərsə, əgər ((buttonStateUp! = previousButtonStateUp) // və hazırda basıldıqda: && (buttonStateUp == HIGH)) {// bir mesaj yazın Keyboard.print ("d"); } // cari düymə vəziyyətini növbəti dəfə müqayisə üçün qeyd edin: previousButtonStateUp = buttonStateUp; }

Düymə basıldığı müddətdə bir şeyin davamlı olaraq baş verməsini istəyirsinizsə, sola və ya sağa hərəkət etmək istədiyiniz kimi, əvvəlki düymə vəziyyətini yoxlamadan məktub yazmasına icazə verin. Dəli olmasının qarşısını almaq və düymələrinizin sıçrayışına qarşı çıxmaq üçün kiçik bir gecikmə əlavə etməyi unutmayın. Bu problemi həll etməyin daha zərif yolları var, amma bu asan və sürətlidir.

#"Keyboard.h" daxil edin

const int buttonLeft = A0; // düymə üçün giriş pimi

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

boş quraşdırma () {

// pushButton pinini girişə çevirin: pinMode (buttonLeft, INPUT); pinMode (buttonRight, INPUT); pinMode (düyməni yuxarı, GİRİŞ); // klaviatura üzərində nəzarəti başlat: Keyboard.begin (); }

boşluq döngəsi () {

// düyməni oxuyun: int buttonStateLeft = digitalRead (buttonLeft); if (buttonStateLeft == HIGH) // düyməyə basıldığı təqdirdə {// bir mesaj yazın Keyboard.print ("a"); gecikmə (50); // Sıçrayış və kompüterə çatmağınız üçün gecikmə}

// düyməni oxuyun:

int buttonStateRight = digitalRead (buttonRight); if (buttonStateRight == HIGH) // düyməyə basıldığı təqdirdə {// bir mesaj yazın Keyboard.print ("w"); gecikmə (50); // Sıçrayış və kompüterə çatmağınız üçün gecikmə}

// düyməni oxuyun:

int buttonStateUp = digitalRead (buttonUp); if (buttonStateUp == HIGH) // düyməyə basılırsa {// bir mesaj yazın Keyboard.print ("d"); gecikmə (50); // Sıçrayış və kompüterə çatmağınız üçün gecikmə}}

Ehtiyaclarınıza ən uyğun olana görə hər zaman hər iki metodun qarışığını istifadə edə bilərsiniz.

Addım 3: Kassanı Lazerlə Kəsmə

Kassanı Lazerlə Kəsmə
Kassanı Lazerlə Kəsmə

Kassa üçün 2 mm Plexiglas əlavə ilə 3 mm mdf istifadə etdim. Kassanın içərisinə gözəl və parlaq etmək üçün sonrakı mərhələdə bəzi LEDlər əlavə etmək istədiyim üçün əlavə etdim.

Ölçülərimi yazmağa başladım və svg faylını endirdim. Illustrator -da açdım və dəlikləri istədiyim yerə əlavə etdim. Illustrator yoxdursa, bu addım üçün Inkscape istifadə edə bilərsiniz.

Lazer kəsici istifadə etməyə ehtiyac yoxdur, çünki içərisində bir neçə deşik olan sadə bir qutu. Daha çox ənənəvi elektrik alətlərindən (və ya hətta əl alətlərindən!) İstifadə etməklə yaratmaq çox asan olmalıdır, sadəcə tənbələm və lazer kəsiciyə girişim var.

Addım 4: Lehimləmə Arcade Düymələri

Lehimləmə Arcade Düymələri
Lehimləmə Arcade Düymələri
Lehimləmə Arcade Düymələri
Lehimləmə Arcade Düymələri
Lehimləmə Arcade Düymələri
Lehimləmə Arcade Düymələri

Bir arcade düyməsi (və ya ən azı mənimki) üç hissədən ibarətdir. Plastik korpus, LED tutucu (içərisində LED ilə) və mikro açar. Mikro açar, düymənin əsl düymə hissəsidir və Arduino -ya qoşulmaq üçün lazım olan şeydir. Mikro açarda üç terminal (tellərinizi lehimləyəcəyiniz metal hissələr) var. Üstündəki (və ya aşağıdakı, istədiyin) torpaqdır. Digər iki terminal Normal Açıq (NO) və Normal Bağlı (NC) dir. YOX, düyməyə basıldığı təqdirdə əlaqə qurduğunu bildirir. NC, düyməyə basıldığı təqdirdə əlaqəni kəsdiyini bildirir. Bu layihə üçün NO istifadə edəcəyik. Şəkillərdəki mikro keçiddə yerə, NO və NC işarələdim.

Düymələrim işıqlı olduğu üçün telləri LED tutucusuna lehimlədim. Hansı tərəfin anod, hansı katodun (LED -in müsbət və mənfi tərəfləri) olduğunu bilmək üçün tellərinizi rəng koduna daxil etməyinizə əmin olun.

Lehimsiz çörək taxtası ilə istifadəsini asanlaşdırmaq üçün başlıq pinlərini tellərimə lehimlədim. Sadəcə teli başlıq piminə lehimlədim və ətrafa daha elastik olması üçün ətrafına bir az istilik bükmə borusu qoydum.

Addım 5: Düymələri yığın və lövhənizə bağlayın

Düymələri yığın və lövhənizə bağlayın
Düymələri yığın və lövhənizə bağlayın
Düymələri yığın və lövhənizə bağlayın
Düymələri yığın və lövhənizə bağlayın
Düymələri yığın və lövhənizə bağlayın
Düymələri yığın və lövhənizə bağlayın
Düymələri yığın və lövhənizə bağlayın
Düymələri yığın və lövhənizə bağlayın

İndi vəziyyətinizdə arcade düymələrinizi yığmağın vaxtı gəldi. Kilit halqasını plastik korpusdan çıxarın və korpusdakı delikdən keçirin. Düyməni yerində saxlamaq üçün kilid halqasını digər tərəfdən keçirin. LED tutucusuna yapışdırın və bərkidin ki, bərkidilsin. Mikro açarlarda çırpın (yerində saxlamaq üçün bir -birinə uyğun gələn kiçik zadəganlar və deliklər var).

Açarları lövhəyə bağlamaq üçün əlavə edə bildiyiniz və ya etmədiyiniz düymələri çıxarın. Mikro açarın yerindən keçən teli Arduino və rezistorun (basma düyməsinin ayağının olduğu yerdə) yerə bağlayın. Mikro açarın NO -dan gələn teli Arduinonun 5v -ə qoşun.

LED telləri üçün mənfi teli yerə və pozitivə 220OHM rezistor vasitəsilə 5v -ə bağlayın. Onları bu şəkildə bağlasanız, həmişə yanacaqlar. İstədiyiniz təqdirdə onları koda əlavə edə və düymələrlə sinxron olaraq aça və söndürə bilərsiniz.

Addım 6: Cəhənnəmi Kodlaşdırın

Beləliklə, indi köhnə kodunuza xülya yeni düymələrinizi əlavə etdiniz və birdən artıq olduğu kimi işləmir. Məktublar bir anda iki və ya üç görünür və sadə HTML5 oyunlarında olduğu kimi işləmir. Cəhənnəmdən çıxmağa xoş gəldiniz.

Əvvəlcə ilk şeylər. Prototip hazırlayarkən yazdığımız kod? yaxşı işləyir və sadədir, amma zərif deyil. Daha çox düymə əlavə etmək istəyirsinizsə, kod parçalarını kopyalayıb yapışdırıb içindəki bütün dəyərləri dəyişdirməlisiniz. Onlardan birini unutsanız, səhv düzəldən cəhənnəmə girəcəksiniz. Burada bir mövzu aşkar edilsin? Kodlaşdırmaq cəhənnəmdir, amma çox əyləncəli, problemi həll etmək cəhənnəmdir.

Gözəl, qısa kod istəyirik. Beləliklə, bütün fərdi düymə tam ədədlərini seriallara dəyişəcəyik. Bu şəkildə, daha çox düymə əlavə etmək istəyirsinizsə, yalnız düymələrin miqdarını, yerləşdikləri sancaqları və çıxışlarını dəyişdirməlisiniz. Açar girişləri də ASCII olaraq dəyişdiririk, çünki … daha yaxşı işləyir?

İndi mənim kimi olsanız, düymələrdən istifadə etmək üçün sadə və asan bir yol yazacaqsınız və istədiyiniz qədər işləməyəcək. Beləliklə, yeni versiyalar yaradırsınız (uşaqları, artımlı ehtiyatları unutmayın!), Fərqli şeylər sınayın, hələ də işləməyən daha da mürəkkəb bir kod yazın və nəticədə bir neçə saat əvvəl yazdığınız sadə koda qayıdın VƏ kiçik bir səhv gör dərhal hər şeyi düzəldir.

İcazə verin bu səyahəti sizə bağışlayım, iş kodu budur:

İmtina: bu mətn, çox sadə bir kodu düzəltmək və səhvləri düzəltməkdən sonra yazılmışdır. Zəhmət olmasa məyusluq əlamətlərinə məhəl qoymayın və aşağıda yerləşdirilmiş iş koduna diqqət yetirin;)

#"Klaviatura.h" daxil edin#düyməni təyin edinMiqdarı 3

int buttonPin = {

A0, A1, A2}; // Düymələr haradadır? int asciiLetter = {97, 100, 119}; // ASCII -də məktublar, burada: a, d, w int buttonState [buttonAmount]; // Düymə basılır ya yox?

boş quraşdırma () {

for (int i = 0; i <buttonAmount; i ++) {// pinMode (buttonPin , INPUT) dizisi boyunca dövr; // bütün sancaqları daxil edin}}

boşluq döngəsi () {

for (int i = 0; i <buttonAmount; i ++) // sıra boyunca keçid {buttonState = digitalRead (buttonPin ); // Düymələr nə edir? if (buttonState == HIGH) {// Düymə basılarsa Keyboard.press (asciiLetter ); // müvafiq məktubu göndərin} başqa // düyməyə basılmazsa {Keyboard.release (asciiLetter ); // məktubu buraxın}}

}

Addım 7: Hər şey işləyir

Fişdən zövq alın və xüsusi nəzarətçini oynayın!

Bu təlimatı bəyənmisinizsə, yarışmada mənə səs verməyi düşünün!

Tövsiyə: