Obsah:

Arkádová tlačítka Plug and Play: 7 kroků (s obrázky)
Arkádová tlačítka Plug and Play: 7 kroků (s obrázky)

Video: Arkádová tlačítka Plug and Play: 7 kroků (s obrázky)

Video: Arkádová tlačítka Plug and Play: 7 kroků (s obrázky)
Video: Velbloud #FantastickyPodcast 2024, Listopad
Anonim
Arkádová tlačítka Plug and Play
Arkádová tlačítka Plug and Play

Nedávno jsem začal používat Arduino k vytváření svých projektů. Jako designér miluji vytváření vlastních rozhraní pro své hry/interaktivní projekty.

Jediný problém, na který jsem narazil, že používání sériové komunikace je poměrně komplikované a náchylné k problémům a chybám, a chtěl jsem rychlé a snadné řešení, které mi umožní používat externí tlačítka k ovládání mých her.

Protože jsem chtěl zařízení typu plug and play, které můžete okamžitě použít s jakýmkoli počítačem, koupil jsem si Arduino Leonardo. Je téměř identický s Uno, ale s několika rozdíly. Hlavní rozdíl, který pro tento projekt využiji ve svůj prospěch, je jeho schopnost fungovat jako HID. Zařízení HID neboli lidské rozhraní je protokol USB, který vašemu počítači umožňuje rozpoznat a přijmout vstup z klávesnic a počítačové myši, aniž byste museli pro každé zařízení instalovat vlastní ovladače.

poznámka: Můžete také použít Uno, pokud aktualizujete firmware, jak je znázorněno zde.

Krok 1: Materiály

Pro tento projekt budete potřebovat:

1x HID mikrokontrolér (existuje několik jako Arduino micro, Due & leonardo, budu používat Arduino Leonardo)

1x kabel USB na Arduino (u Leonarda je to USB micro)

3x arkádová tlačítka (koupil jsem je)

1x nepájivá prkénka

3x 10k ohmové odpory

3x 220 ohmové odpory

Propojovací vodiče

Samozřejmě můžete přidat další tlačítka nebo vše připájet na prkénko, aby byly věci trvalejší.

Krok 2: Prototypování

Prototypování
Prototypování
Prototypování
Prototypování
Prototypování
Prototypování

Takže než jsem si koupil arkádová tlačítka, která jsem chtěl použít, vyzkoušel jsem to pomocí standardních tlačítek. Zapojte tlačítka standardním způsobem, domnívám se, že jsem použil odpory 10K ohmů.

Programování je díky Leonardu velmi jednoduché. Musíte zahrnout knihovnu klávesnice. Jako základ pro můj kód jsem použil standardní příklad Arduino „Zpráva z klávesnice“.

Nyní je otázkou, jak chcete, aby vaše tlačítka fungovala. V zásadě máte dvě možnosti, stisknutí jednotlivých tlačítek a nepřetržitý proud písmen, pokud jsou stisknuty. To opravdu závisí na vašem projektu, co byste chtěli.

Pokud chcete, aby se při stisknutí klávesy stala jediná instance něčeho, například skok nebo vypínač, pak byste zvolili metodu jediného stisknutí. Pomocí této metody se díváte na stav tlačítka, je nahoře nebo dole? Potom to porovnáte s předchozím stavem, už to bylo nahoře nebo dole? Pokud je předchozí stav tlačítka stejný jako aktuální stav tlačítka, nic se nestane. Pokud se ale stav tlačítka změní, při stisknutí nebo uvolnění tlačítka se něco stane. V mém kódu zadává písmeno pouze při stisknutí tlačítka, nikoli při uvolnění, ale můžete to změnit.

#include "Keyboard.h"

tlačítko const int Vlevo = A0; // vstupní pin pro tlačítko

tlačítko const intRight = A1; tlačítko const intUp = A2;

int previousButtonStateLeft = HIGH; // pro kontrolu stavu tlačítka

int previousButtonStateRight = HIGH; int previousButtonStateUp = VYSOKÝ;

neplatné nastavení () {

// udělejte z pinu pushButton vstup: pinMode (buttonLeft, INPUT); pinMode (buttonRight, INPUT); pinMode (buttonUp, INPUT); // inicializace ovládání přes klávesnici: Keyboard.begin (); }

prázdná smyčka () {

// přečtěte si tlačítko: int buttonStateLeft = digitalRead (buttonLeft); // pokud se změnil stav tlačítka, if ((buttonStateLeft! = previousButtonStateLeft) // a právě je stisknuto: && (buttonStateLeft == HIGH)) {// napište zprávu Keyboard.print ("a"); } // uložení aktuálního stavu tlačítka pro srovnání příště: previousButtonStateLeft = buttonStateLeft;

// přečtěte si tlačítko:

int buttonStateRight = digitalRead (buttonRight); // pokud se změnil stav tlačítka, if ((buttonStateRight! = previousButtonStateRight) // a právě je stisknuto: && (buttonStateRight == HIGH)) {// napište zprávu Keyboard.print ("w"); } // uložení aktuálního stavu tlačítka pro srovnání příště: previousButtonStateRight = buttonStateRight;

// přečtěte si tlačítko:

int buttonStateUp = digitalRead (buttonUp); // pokud se změnil stav tlačítka, if ((buttonStateUp! = previousButtonStateUp) // a právě je stisknuto: && (buttonStateUp == HIGH)) {// napište zprávu Keyboard.print ("d"); } // uložení aktuálního stavu tlačítka pro srovnání příště: previousButtonStateUp = buttonStateUp; }

Pokud chcete, aby se něco dělo nepřetržitě, dokud je tlačítko stisknuto, jak byste chtěli pro pohyb doleva nebo doprava, nechte ho napsat písmeno bez kontroly předchozího stavu tlačítka. Nezapomeňte přidat malé zpoždění, aby se nezbláznilo, a aby se zabránilo jakémukoli odrazu, který vaše tlačítka mohou mít. Existují elegantnější způsoby řešení tohoto problému, ale je to snadné a rychlé.

#include "Keyboard.h"

tlačítko const int Vlevo = A0; // vstupní pin pro tlačítko

tlačítko const intRight = A1; tlačítko const intUp = A2;

neplatné nastavení () {

// udělejte z pinu pushButton vstup: pinMode (buttonLeft, INPUT); pinMode (buttonRight, INPUT); pinMode (buttonUp, INPUT); // inicializace ovládání přes klávesnici: Keyboard.begin (); }

prázdná smyčka () {

// přečtěte si tlačítko: int buttonStateLeft = digitalRead (buttonLeft); if (buttonStateLeft == HIGH) // pokud je tlačítko stisknuto {// napište zprávu Keyboard.print ("a"); zpoždění (50); // Zpoždění při odrazu a umožnění dohnat počítač}

// přečtěte si tlačítko:

int buttonStateRight = digitalRead (buttonRight); if (buttonStateRight == HIGH) // pokud je tlačítko stisknuto {// napište zprávu Keyboard.print ("w"); zpoždění (50); // Zpoždění při odrazu a umožnění dohnat počítač}

// přečtěte si tlačítko:

int buttonStateUp = digitalRead (buttonUp); if (buttonStateUp == HIGH) // pokud je tlačítko stisknuto {// napište zprávu Keyboard.print ("d"); zpoždění (50); // Zpoždění při odrazu a umožnění dohnat počítač}}

Vždy můžete použít kombinaci obou metod, podle toho, co nejlépe vyhovuje vašim potřebám.

Krok 3: Laserové řezání pouzdra

Laserové řezání pouzdra
Laserové řezání pouzdra

Pro pouzdro jsem použil 3 mm mdf s vložkou z plexiskla 2 mm. Přidal jsem vložku, protože v pozdější fázi chci přidat nějaké LED diody na vnitřní stranu skříně, aby byla hezká a zářivá.

Vložil jsem své rozměry do makra a stáhl soubor svg. Otevřel jsem to v Illustratoru a přidal otvory, kam jsem je chtěl. Pokud nemáte Illustrator, můžete pro tento krok použít Inkscape.

Samozřejmě nemusíte používat laserovou řezačku, protože se jedná o jednoduchou krabici s několika otvory. Mělo by být dostatečně snadné jej vytvořit pomocí tradičnějších elektrických nástrojů (nebo dokonce ručních nástrojů!) Jsem velmi líný a měl jsem přístup k laserové řezačce.

Krok 4: Pájecí arkádová tlačítka

Pájecí arkádová tlačítka
Pájecí arkádová tlačítka
Pájecí arkádová tlačítka
Pájecí arkádová tlačítka
Pájecí arkádová tlačítka
Pájecí arkádová tlačítka

Arkádové tlačítko (nebo alespoň moje) se skládá ze tří částí. Plastový kryt, držák LED (s LED v něm) a mikrospínač. Mikrospínač je skutečnou součástí tlačítka a je to, co budete potřebovat k připojení k vašemu Arduinu. Na mikrospínači jsou tři svorky (kovové bity, které vyčnívají, kde budete pájet vodiče). Ten nahoře (nebo dole, co chcete) je země. Další dva terminály jsou Normal Open (NO) a Normal Closed (NC). NE znamená, že pokud je spínač stisknutý, naváže spojení. NC znamená, že pokud je tlačítko stisknuto, přeruší připojení. Pro tento projekt použijeme NE. Na obrázcích jsem na svém mikrospínači označil zem, NE a NC.

Moje tlačítka jsou osvětlená, takže jsem připájel vodiče k držáku LED. Ujistěte se, že jste barevně označili své vodiče, abyste věděli, na které straně je anoda a na které katoda (kladné a záporné strany LED).

Na své vodiče jsem připájel kolíkové lišty, aby se snadno používaly s nepájivou deskou. Jen jsem připájel drát na kolíkový konektor a dal jsem kolem něj trochu smršťovací trubičky, aby byly odolnější.

Krok 5: Složte tlačítka a připojte je k desce

Skládejte tlačítka a připojte je k desce
Skládejte tlačítka a připojte je k desce
Skládejte tlačítka a připojte je k desce
Skládejte tlačítka a připojte je k desce
Skládejte tlačítka a připojte je k desce
Skládejte tlačítka a připojte je k desce
Skládejte tlačítka a připojte je k desce
Skládejte tlačítka a připojte je k desce

Nyní je čas naskládat arkádová tlačítka do pouzdra. Vyjměte pojistný kroužek z plastového pouzdra a protáhněte jej otvorem v pouzdře. Zašroubujte pojistný kroužek na druhé straně a zajistěte tak tlačítko na místě. Vložte držák LED a otočením jej zajistěte na místě. Kroutit v mikrospínačích (tam jsou malé nobs a otvory, které se navzájem zarovnávají, aby držely na svém místě).

Chcete -li připojit přepínače k desce, odstraňte tlačítka, která jste přidali nebo ne. Připojte vodič vedoucí ze země mikrospínače k zemi Arduina a odporu (kde byla noha tlačítka). Připojte vodič vedoucí od NO mikrospínače k 5v Arduina.

U vodičů LED připojte záporný vodič k zemi a kladný odpor přes odpor 220OHM k 5v. Pokud je takto zapojíte, budou vždy zapnuté. Pokud je chcete, můžete je přidat do kódu a nechat je synchronizovaně zapínat a vypínat.

Krok 6: Kódování pekla

Takže teď jste ke svému starému kódu připojili svá fantazijní nová tlačítka a najednou to už nefunguje tak, jak by mělo. Písmena se objevují dvě nebo tři najednou a u jednoduchých her HTML5 to nefunguje tak, jak by mělo. Vítejte při odhalování pekla.

Pěkně popořádku. Kód, který jsme napsali během prototypování? funguje to dobře a je to jednoduché, ale není to elegantní. Pokud chcete přidat další tlačítka, musíte zkopírovat a vložit úryvky kódu a změnit v nich všechny hodnoty. Pokud jednoho z nich zapomenete, vstoupíte do pekla oprav chyb. Chcete zde najít téma? Kódování je peklo, ale velmi zábavné peklo při řešení problémů.

Chceme hezký, krátký kód. Změníme tedy všechna jednotlivá celá tlačítka na pole. Tímto způsobem, pokud chcete přidat další tlačítka, musíte pouze změnit počet tlačítek, piny, kde jsou umístěny, a jejich výstup. Rovněž měníme klíčové vstupy na ASCII, protože … funguje to lépe?

Nyní, pokud jste jako já, napíšete jednoduchý a snadný způsob použití tlačítek a nebude fungovat tak, jak byste chtěli. Vytváříte tedy nové verze (pamatujte si děti, přírůstkové zálohy!), Zkoušíte různé věci, píšete neustále složitější kód, který stále nefunguje dobře, a nakonec se vrátíte k jednoduchému kódu, který jste napsali před hodinami A všimnete si malé chyby, která okamžitě vše opraví.

Ušetřím vás té cesty, tady je pracovní kód:

Prohlášení: tento text byl napsán po několika hodinách kódování a opravy chyb velmi jednoduchým kódem. Ignorujte jakékoli známky frustrace a zaměřte se na níže uvedený pracovní kód;)

#include "Keyboard.h" #define buttonAmount 3

int buttonPin = {

A0, A1, A2}; // Kde jsou tlačítka? int asciiLetter = {97, 100, 119}; // Písmena v ASCII, zde: a, d, w int buttonState [buttonAmount]; // Je tlačítko stisknuto nebo ne?

neplatné nastavení () {

for (int i = 0; i <buttonAmount; i ++) {// cyklus v poli pinMode (buttonPin , INPUT); // nastavit všechny piny na vstup}}

prázdná smyčka () {

for (int i = 0; i <buttonAmount; i ++) // cyklus v poli {buttonState = digitalRead (buttonPin ); // Co dělají tlačítka? if (buttonState == HIGH) {// Pokud je tlačítko stisknuto Keyboard.press (asciiLetter ); // odešlete odpovídající písmeno} else // pokud není tlačítko stisknuto {Keyboard.release (asciiLetter ); // pustit dopis}}

}

Krok 7: Všechno funguje

Užijte si svůj plug & play vlastní ovladač!

Pokud se vám tento návod líbil, zvažte prosím hlas pro mě v soutěži!

Doporučuje: