İçindekiler:

Tak ve Çalıştır Arcade Düğmeleri: 7 Adım (Resimlerle)
Tak ve Çalıştır Arcade Düğmeleri: 7 Adım (Resimlerle)

Video: Tak ve Çalıştır Arcade Düğmeleri: 7 Adım (Resimlerle)

Video: Tak ve Çalıştır Arcade Düğmeleri: 7 Adım (Resimlerle)
Video: Oyun Kolunu Bilgisayara Bağlama ve Kontrol Etme! 2024, Kasım
Anonim
Tak ve Çalıştır Arcade Düğmeleri
Tak ve Çalıştır Arcade Düğmeleri

Yakın zamanda projelerimi yapmak için Arduino kullanmaya başladım. Bir tasarımcı olarak oyunlarım/etkileşimli projelerim için özel arayüzler yapmayı seviyorum.

Seri iletişim kullanırken karşılaştığım tek sorun oldukça karmaşık ve sorunlara ve hatalara açık ve oyunlarımı kontrol etmek için harici düğmeleri kullanmama izin verecek hızlı ve kolay bir çözüm istedim.

Herhangi bir bilgisayarla anında kullanabileceğiniz bir tak ve çalıştır cihazı istediğim için Arduino Leonardo aldım. Bir Uno ile neredeyse aynı, ancak birkaç fark var. Bu proje için avantajım için kullanacağım temel fark, HID olarak hareket edebilmesidir. HID veya insan arabirim aygıtı, her aygıt için özel sürücüler yüklemeye gerek kalmadan bilgisayarınızın klavyelerden ve bilgisayar faresinden gelen girişi tanımasını ve kabul etmesini sağlayan bir USB protokolüdür.

not: Firmware'i burada gösterildiği gibi güncellerseniz bir Uno da kullanabilirsiniz.

Adım 1: Malzemeler

Bu proje için ihtiyacınız olacak:

1x HID özellikli mikrodenetleyici (Arduino micro, Due & leonardo gibi birkaç tane var, Arduino Leonardo kullanacağım)

1x USB - arduino kablosu (Leonardo için USB mikro)

3x Arcade düğmeleri (bunları aldım)

1x lehimsiz devre tahtası

3x 10k ohm dirençler

3x 220 ohm dirençler

Atlama telleri

İşleri daha kalıcı hale getirmek için elbette daha fazla düğme ekleyebilir veya her şeyi bir devre tahtasına lehimleyebilirsiniz.

2. Adım: Prototipleme

prototipleme
prototipleme
prototipleme
prototipleme
prototipleme
prototipleme

Bu yüzden, kullanmak istediğim arcade butonlarını satın almadan önce bunu standart butonlarla test ettim. Düğmeleri standart şekilde bağlayın, sanırım 10K ohm dirençler kullandım.

Leonardo sayesinde programlama oldukça basittir. Klavye kitaplığını dahil etmeniz gerekir. Kodumun temeli olarak Arduino standart örneğini "Klavye mesajı" kullandım.

Şimdi soru, düğmelerinizin nasıl çalışmasını istediğinizdir. Temel olarak iki seçeneğiniz var, tek tuşa basmak ve basıldığında sürekli bir harf akışı. Gerçekten ne isteyeceğiniz projenize bağlı.

Atlama veya açma/kapama düğmesi gibi bir tuşa basıldığında bir şeyin tek bir örneğinin olmasını istiyorsanız, tek basma yöntemini seçersiniz. Bu yöntemle butonun durumuna bakıyorsunuz, yukarı mı aşağı mı? Sonra onu önceki durumla karşılaştırırsınız, zaten yukarı mı yoksa aşağı mı? Önceki düğme durumu mevcut düğme durumuyla aynıysa hiçbir şey olmaz. Ancak düğme durumu değişirse, bir düğmeye bastığınızda veya bıraktığınızda olduğu gibi bir şey olur. Kodumda sadece düğmeye basıldığında bir harf yazıyor, bırakıldığında değil ama bunu değiştirebilirsiniz.

#include "Klavye.h"

const int buttonLeft = A0; // buton için giriş pini

const int düğmeSağ = A1; const int buttonUp = A2;

int öncekiButtonStateLeft = YÜKSEK; // bir pushButton'un durumunu kontrol etmek için

int öncekiButtonStateRight = YÜKSEK; int öncekiButtonStateUp = YÜKSEK;

geçersiz kurulum() {

// pushButton pinini bir giriş yapın: pinMode(buttonLeft, INPUT); pinMode(düğmeSağ, GİRİŞ); pinMode(buttonUp, INPUT); // klavye üzerindeki kontrolü başlat: Keyboard.begin(); }

boşluk döngüsü () {

// butonu okuyun: int buttonStateLeft = digitalRead(buttonLeft); // düğme durumu değiştiyse, if ((buttonStateLeft != öncekiButtonStateLeft) // ve şu anda basılıysa: && (buttonStateLeft == HIGH)) { // bir mesaj yazın Keyboard.print("a"); } // bir dahaki sefere karşılaştırma için mevcut düğme durumunu kaydedin: öncekiButtonStateLeft = buttonStateLeft;

// butonu oku:

int buttonStateRight = digitalRead(buttonRight); // düğme durumu değiştiyse, if ((buttonStateRight != öncekiButtonStateRight) // ve şu anda basılıysa: && (buttonStateRight == HIGH)) { // bir mesaj yazın Keyboard.print("w"); } // bir dahaki sefere karşılaştırma için mevcut düğme durumunu kaydedin: öncekiButtonStateRight = buttonStateRight;

// butonu oku:

int buttonStateUp = digitalRead(buttonUp); // düğme durumu değiştiyse, if ((buttonStateUp != öncekiButtonStateUp) // ve şu anda basılıysa: && (buttonStateUp == HIGH)) { // bir mesaj yazın Keyboard.print("d"); } // bir dahaki sefere karşılaştırma için mevcut düğme durumunu kaydedin: öncekiButtonStateUp = buttonStateUp; }

Düğmeye basıldığı sürece bir şeyin sürekli olmasını istiyorsanız, sağa veya sola hareketi istediğiniz gibi, önceki düğme durumunu kontrol etmeden bir harf yazmasına izin verin. Çılgına dönüşmesini önlemek ve düğmelerinizin sahip olabileceği herhangi bir sıçramaya karşı koymak için küçük bir gecikme eklemeyi unutmayın. Bu sorunu çözmenin daha zarif yolları var, ancak bu kolay ve hızlı.

#include "Klavye.h"

const int buttonLeft = A0; // buton için giriş pini

const int düğmeSağ = A1; const int buttonUp = A2;

geçersiz kurulum() {

// pushButton pinini bir giriş yapın: pinMode(buttonLeft, INPUT); pinMode(düğmeSağ, GİRİŞ); pinMode(buttonUp, INPUT); // klavye üzerindeki kontrolü başlat: Keyboard.begin(); }

boşluk döngüsü () {

// butonu okuyun: int buttonStateLeft = digitalRead(buttonLeft); if (buttonStateLeft == HIGH) //düğmeye basılırsa { // bir mesaj yazın Keyboard.print("a"); gecikme(50); //Sıçramayı geciktirmek ve bilgisayarınızın sizi yakalamasını sağlamak için }

// butonu oku:

int buttonStateRight = digitalRead(buttonRight); if (buttonStateRight == HIGH) //düğmeye basılırsa { // bir mesaj yazın Keyboard.print("w"); gecikme(50); //Sıçramayı geciktirmek ve bilgisayarınızın sizi yakalamasını sağlamak için }

// butonu oku:

int buttonStateUp = digitalRead(buttonUp); if (buttonStateUp == HIGH) //düğmeye basılırsa { // bir mesaj yazın Keyboard.print("d"); gecikme(50); //Sıçramayı geciktirmek ve bilgisayarınızın sizi yakalamasını sağlamak için } }

İhtiyaçlarınıza en uygun olana bağlı olarak, her zaman her iki yöntemin bir karışımını kullanabilirsiniz.

Adım 3: Kasayı Lazerle Kesme

Lazer Kesim Kasası
Lazer Kesim Kasası

Durum için 2 mm Pleksiglas ek parçası ile 3 mm mdf kullandım. Kasanın içine daha sonra güzel ve ışıltılı hale getirmek için bazı LED'ler eklemek istediğim için eki ekledim.

Boyutlarımı makercase'e girdim ve svg dosyasını indirdim. Illustrator'da açtım ve istediğim yerlere delikler ekledim. Illustrator'ınız yoksa bu adım için Inkscape'i kullanabilirsiniz.

Elbette bir lazer kesici kullanmanıza gerek yok, çünkü bu içinde birkaç delik bulunan basit bir kutu. Daha geleneksel elektrikli aletler (hatta el aletleri!) kullanarak oluşturmak yeterince kolay olmalı. Çok tembelim ve bir lazer kesiciye erişimim var.

Adım 4: Arcade Düğmelerini Lehimleme

Arcade Düğmelerini Lehimleme
Arcade Düğmelerini Lehimleme
Arcade Düğmelerini Lehimleme
Arcade Düğmelerini Lehimleme
Arcade Düğmelerini Lehimleme
Arcade Düğmelerini Lehimleme

Bir arcade düğmesi (veya en azından benimki) üç bölümden oluşur. Plastik kasa, LED tutucu (içinde LED'li) ve mikro anahtar. Mikro anahtar, düğmenin asıl düğme kısmıdır ve Arduino'nuza bağlanmak için ihtiyaç duyacağınız şeydir. Mikro anahtarda üç terminal (kablolarınızı lehimleyeceğiniz metal uçlar) vardır. Üstteki (veya alttaki, ne istersen) zemindir. Diğer iki terminal, Normal Açık (NO) ve Normal Kapalı (NC). HAYIR, anahtara basılırsa bağlantı kurduğu anlamına gelir. NC, düğmeye basıldığında bağlantıyı kestiği anlamına gelir. Bu proje için HAYIR'ı kullanacağız. Resimlerde mikro anahtarımda zemin, NO ve NC etiketledim.

Düğmelerim yanıyor, bu yüzden kabloları LED tutucuya lehimledim. Hangi tarafın anot ve hangi tarafın katod olduğunu (LED'in pozitif ve negatif tarafları) bilmeniz için kablolarınızı renk kodladığınızdan emin olun.

Lehimsiz bir devre tahtası ile kullanımlarını kolaylaştırmak için kablolarıma başlık pimleri lehimledim. Teli bir başlık pimine lehimledim ve onları daha esnek hale getirmek için biraz ısıyla daralan makaron koydum.

Adım 5: Düğmeleri Yığınlayın ve Onları Panonuza Bağlayın

Düğmeleri İstifleyin ve Panonuza Bağlayın
Düğmeleri İstifleyin ve Panonuza Bağlayın
Düğmeleri İstifleyin ve Panonuza Bağlayın
Düğmeleri İstifleyin ve Panonuza Bağlayın
Düğmeleri İstifleyin ve Onları Panonuza Bağlayın
Düğmeleri İstifleyin ve Onları Panonuza Bağlayın
Düğmeleri İstifleyin ve Panonuza Bağlayın
Düğmeleri İstifleyin ve Panonuza Bağlayın

Şimdi arcade düğmelerinizi kasanıza koymanın zamanı geldi. Kilitleme halkasını plastik kasadan çıkarın ve kasadaki delikten geçirin. Düğmeyi yerine sabitlemek için diğer taraftaki kilitleme halkasını geçirin. LED tutucuya yapıştırın ve yerine kilitlemek için döndürün. Mikro anahtarları oynatın (yerinde tutmak için birbiriyle hizalanan küçük çıkıntılar ve delikler vardır).

Anahtarları panoya bağlamak için eklemiş olabileceğiniz veya eklememiş olabileceğiniz basmalı düğmeleri çıkarın. Mikro anahtarın toprağından çıkan kabloyu Arduino'nun toprağına ve rezistöre (düğmenin ayağının olduğu yer) bağlayın. Mikro anahtarın NO'undan giden kabloyu Arduino'nun 5v'sine bağlayın.

LED kablolar için negatif kabloyu toprağa ve pozitif kabloyu 220OHM'lik bir dirençle 5v'ye bağlayın. Onları bu şekilde bağlarsan, her zaman açık olacaklar. Bunları koda ekleyebilir ve isterseniz düğmelerle senkronize olarak açılıp kapanmasını sağlayabilirsiniz.

Adım 6: Cehennemi Kodlamak

Böylece, şimdi eski kodunuza yeni süslü düğmelerinizi iliştirdiniz ve aniden artık olması gerektiği gibi çalışmıyor. Harfler bir seferde iki veya üç görünür ve basit HTML5 oyunlarında olması gerektiği gibi çalışmaz. Cehennemden kurtulmaya hoş geldiniz.

Her şey sırayla. Prototipleme sırasında yazdığımız kod? iyi çalışıyor ve basit ama zarif değil. Daha fazla düğme eklemek istiyorsanız, kod parçacıklarını kopyalayıp yapıştırmanız ve içindeki tüm değerleri değiştirmeniz gerekir. Bunlardan birini unutursanız, hata düzeltme cehennemine girersiniz. Burada bir tema tespit edilsin mi? Kodlama cehennem ama çok eğlenceli, problem çözme cehennemi.

Güzel, kısa kod istiyoruz. Bu yüzden tüm bireysel düğme tamsayılarını dizilere değiştireceğiz. Bu şekilde, daha fazla buton eklemek isterseniz, sadece buton miktarını, bulundukları pinleri ve çıktılarını değiştirmeniz yeterlidir. Anahtar girdileri de ASCII olarak değiştiriyoruz çünkü… daha iyi mi çalışıyor?

Şimdi benim gibiyseniz, düğmeleri kullanmanın basit ve kolay bir yolunu yazacaksınız ve bu istediğiniz gibi çalışmayacak. Böylece yeni sürümler yaratırsınız (çocukları, artımlı yedeklemeleri unutmayın!), farklı şeyler deneyin, sürekli olarak hala iyi çalışmayan daha karmaşık kodlar yazın ve sonunda saatler önce yazdığınız basit koda geri dönün VE küçük bir hata fark edin. her şeyi anında düzeltir.

Sizi bu yolculuktan kurtarmama izin verin, işte çalışma kodu:

Feragatname: Bu metin, saatlerce kodlama ve çok basit bir kodun hata düzeltmesinden sonra yazılmıştır. Lütfen herhangi bir hayal kırıklığı belirtisini göz ardı edin ve aşağıda yayınlanan çalışma koduna odaklanın;)

#include "Keyboard.h"#define buttonMiktar 3

int buttonPin = {

A0, A1, A2 }; // Düğmeler nerede? int asciiLetter = { 97, 100, 119}; //ASCII'deki harfler, burada: a, d, w int buttonState[buttonAmount]; //Düğmeye basıldı mı, basılmadı mı?

geçersiz kurulum() {

for (int i = 0; i < buttonAmount; i++) { //pinMode(buttonPin, INPUT); // tüm pinleri girilecek şekilde ayarlayın } }

boşluk döngüsü () {

for (int i = 0; i < buttonAmount; i++) //dizide dolaş { buttonState = digitalRead(buttonPin); //Düğmeler ne yapıyor? if (buttonState == HIGH){ //Düğmeye basılırsa Keyboard.press(asciiLetter); //ilgili harfi gönder } else //buton basılı değilse { Keyboard.release(asciiLetter); //harfi bırakın } }

}

Adım 7: Her Şey Çalışıyor

Tak ve çalıştır özel denetleyicinizin keyfini çıkarın!

Bu talimatı beğendiyseniz, lütfen yarışmada bana oy vermeyi düşünün!

Önerilen: