Мазмұны:

Қосу және ойнау аркадалық түймелері: 7 қадам (суреттермен)
Қосу және ойнау аркадалық түймелері: 7 қадам (суреттермен)

Бейне: Қосу және ойнау аркадалық түймелері: 7 қадам (суреттермен)

Бейне: Қосу және ойнау аркадалық түймелері: 7 қадам (суреттермен)
Бейне: «ӨЛІ немесе ТІРІ» сериясының тарихы 2024, Қараша
Anonim
Қосу және ойнау аркадалық түймелері
Қосу және ойнау аркадалық түймелері

Мен жақында өз жобаларымды жасау үшін Arduino -ны қолдана бастадым. Дизайнер ретінде мен өз ойындарым/интерактивті жобалар үшін арнайы интерфейстер жасауды ұнатамын.

Мен кездестірген бір мәселе - сериялық байланысты пайдалану өте күрделі және проблемалар мен қателерге бейім, сондықтан мен ойындарды басқару үшін сыртқы түймелерді қолдануға мүмкіндік беретін тез және қарапайым шешімді алғым келді.

Мен кез келген компьютермен бірден пайдалануға болатын қосылатын және ойнататын құрылғыны алғым келгендіктен, мен Arduino Leonardo сатып алдым. Бұл Uno -мен бірдей, бірақ кейбір айырмашылықтары бар. Мен бұл жобаны өз пайдасына қолданатын басты айырмашылық - бұл HID ретінде әрекет ету қабілеті. HID немесе адам интерфейсі құрылғысы - бұл USB протоколы, ол сіздің компьютеріңізге әр құрылғы үшін арнайы драйверлерді орнатпай -ақ, пернетақталар мен компьютер тышқанының кірісін тануға және қабылдауға мүмкіндік береді.

ескерту: егер сіз микробағдарламаны осында көрсетілгендей жаңартсаңыз, Uno қолдана аласыз.

1 -қадам: материалдар

Бұл жоба үшін сізге қажет:

1x HID қабілетті микроконтроллер (Arduino micro, Due & leonardo сияқты бірнеше бар, мен Arduino Leonardo қолданамын)

1 x USB - arduino кабелі (Леонардо үшін бұл USB микро)

3x аркада түймелері (мен оларды сатып алдым)

1x дәнекерленбеген нан тақтасы

3x 10км резисторлар

3x 220 Ом резисторлары

Өткізгіш сымдар

Сіз, әрине, түймені қосуға немесе бәрін тұрақты етіп жасау үшін нан тақтасына дәнекерлей аласыз.

2 -қадам: прототиптеу

Прототиптеу
Прототиптеу
Прототиптеу
Прототиптеу
Прототиптеу
Прототиптеу

Осылайша, мен қолданғым келетін аркада түймелерін сатып алмас бұрын мен оны стандартты түймелермен тексердім. Түймелерді стандартты түрде қосыңыз, менің ойымша, мен 10 К Ом резисторды қолдандым.

Леонардоның арқасында бағдарламалау өте қарапайым. Пернетақта кітапханасын қосу керек. Мен кодтың негізі ретінде Arduino стандартты «Пернетақтадағы хабар» қолдандым.

Енді мәселе сіздің түймелердің қалай жұмыс істеуін қалайсыз. Сізде негізінен екі таңдау бар: бір түймені басу және егер басылса әріптердің үздіксіз ағымы. Бұл сіздің жобаңызға байланысты.

Егер сіз бір нәрсенің қайталануын қаласаңыз, секіру немесе қосу/өшіру сияқты перне басылса, сіз бірден басу әдісін таңдайсыз. Бұл әдіспен сіз түйменің күйіне қарайсыз, ол жоғары немесе төмен ме? Содан кейін сіз оны бұрынғы күймен салыстырасыз, ол жоғары немесе төмен болды ма? Егер алдыңғы түйме күйі ағымдағы түймешік күйімен бірдей болса, ештеңе болмайды. Егер түйменің күйі өзгерсе, түймені басқанда немесе босатқанда, бірдеңе болады. Менің кодымда ол тек басылған кезде емес, түйме басылған кезде ғана әріп тереді, бірақ сіз оны өзгерте аласыз.

#«Keyboard.h» қосыңыз

const int buttonLeft = A0; // түйме үшін кіріс түйреуіші

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

int previousButtonStateLeft = HIGH; // батырманың күйін тексеру үшін

int previousButtonStateRight = HIGH; int previousButtonStateUp = HIGH;

жарамсыз орнату () {

// pushButton түйреуішін кіріске айналдырыңыз: pinMode (buttonLeft, INPUT); pinMode (buttonRight, INPUT); pinMode (buttonUp, INPUT); // пернетақтаны басқаруды инициализациялау: Keyboard.begin (); }

void loop () {

// батырманы оқу: int buttonStateLeft = digitalRead (buttonLeft); // егер түйменің күйі өзгерсе, егер ((buttonStateLeft! = previousButtonStateLeft) // және ол қазір басылады: && (buttonStateLeft == HIGH)) {// хабарды теріңіз Keyboard.print («a»); } // келесі жолы салыстыру үшін батырманың ағымдағы күйін сақтаңыз: previousButtonStateLeft = buttonStateLeft;

// батырманы оқыңыз:

int buttonStateRight = digitalRead (buttonRight); // егер түйменің күйі өзгерсе, егер ((buttonStateRight! = previousButtonStateRight) // және ол қазір басылады: && (buttonStateRight == HIGH)) {// хабарды теріңіз Keyboard.print («w»); } // келесі жолы салыстыру үшін батырманың ағымдағы күйін сақтаңыз: previousButtonStateRight = buttonStateRight;

// батырманы оқыңыз:

int buttonStateUp = digitalRead (buttonUp); // егер түйменің күйі өзгерсе, егер ((buttonStateUp! = previousButtonStateUp) // және ол қазіргі уақытта басылады: && (buttonStateUp == HIGH)) {// хабарды теріңіз Keyboard.print («d»); } // келесі жолы салыстыру үшін батырманың ағымдағы күйін сақтаңыз: previousButtonStateUp = buttonStateUp; }

Егер сіз бірдеңе сол жақ немесе оң жақ қозғалысы үшін қажет болса, түйме басылғанша үздіксіз болуын қаласаңыз, оған алдыңғы түйменің күйін тексерусіз хат жазуға рұқсат етіңіз. Есінен танып қалмау үшін және батырмаларыңыздың серпілуіне қарсы тұру үшін кішкене кешіктіруді ұмытпаңыз. Бұл мәселені шешудің талғампаз әдістері бар, бірақ бұл оңай және жылдам.

#«Keyboard.h» қосыңыз

const int buttonLeft = A0; // түйме үшін кіріс түйреуіші

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

жарамсыз орнату () {

// pushButton түйреуішін кіріске айналдырыңыз: pinMode (buttonLeft, INPUT); pinMode (buttonRight, INPUT); pinMode (buttonUp, INPUT); // пернетақтаны басқаруды инициализациялау: Keyboard.begin (); }

void loop () {

// батырманы оқу: int buttonStateLeft = digitalRead (buttonLeft); if (buttonStateLeft == HIGH) // егер түйме басылса {// хабарды теріңіз Keyboard.print («a»); кешіктіру (50); // Компьютерді қуып жету үшін кідіріс}

// батырманы оқыңыз:

int buttonStateRight = digitalRead (buttonRight); if (buttonStateRight == HIGH) // егер түйме басылса {// хабарды теріңіз Keyboard.print («w»); кешіктіру (50); // Компьютерді қуып жету үшін кідіріс}

// батырманы оқыңыз:

int buttonStateUp = digitalRead (buttonUp); if (buttonStateUp == HIGH) // егер түйме басылса {// хабарды теріңіз Keyboard.print («d»); кешіктіру (50); // Компьютерді қуып жету үшін кідіріс}}

Сіз әрқашан сіздің қажеттіліктеріңізге сәйкес келетініне байланысты екі әдісті де қолдана аласыз.

3 -қадам: корпусты лазермен кесу

Корпусты лазермен кесу
Корпусты лазермен кесу

Корпус үшін мен 2 мм плексиглас кірістіруі бар 3 мм mdf қолдандым. Мен кірістіруді қостым, себебі мен оны жақсы және жылтыр ету үшін корпустың ішкі жағына бірнеше жарықдиодты қосқым келеді.

Мен өлшемдерді svg файлын жасау үшін енгіздім және жүктедім. Мен оны Illustrator -да ашып, тесіктерді қалаған жеріме қостым. Егер сізде Illustrator болмаса, сіз бұл қадам үшін Inkscape бағдарламасын қолдана аласыз.

Әрине, лазерлік кескішті қолданудың қажеті жоқ, себебі бұл бірнеше тесіктері бар қарапайым қорап. Дәстүрлі электр құралдарын (немесе тіпті қолмен жұмыс жасайтын құралдарды) қолдана отырып, оны жасау оңай болуы керек, мен өте жалқаумын және лазерлік кескішке қол жеткіздім.

4 -қадам: Аркада түймелерін дәнекерлеу

Дәнекерлеу аркадалық түймелері
Дәнекерлеу аркадалық түймелері
Дәнекерлеу аркадалық түймелері
Дәнекерлеу аркадалық түймелері
Дәнекерлеу аркадалық түймелері
Дәнекерлеу аркадалық түймелері

Аркада түймесі (немесе кем дегенде менікі) үш бөліктен тұрады. Пластикалық корпус, жарықдиодты ұстағыш (оның ішінде жарық диоды бар) және микро қосқыш. Микро коммутатор - бұл түйменің нақты түйме бөлігі және сізге Arduino -ға қосылу үшін қажет нәрсе. Микро коммутаторда үш терминал бар (металл саңылаулар, олар сымдарды дәнекерлейді). Жоғарғы (немесе төменгі, сіз қалаған нәрсе) - бұл жер. Қалған екі терминал - Normal Open (NO) және Normal Closed (NC). ЖОҚ егер қосқыш басылса, ол байланыс орнатады дегенді білдіреді. NC дегеніміз, егер түйме басылса, байланыс үзіледі. Біз бұл жобаға NO қолданамыз. Мен суреттерде микро қосқышта жерге, NO және NC белгісін қойдым.

Менің түймелерім жарықтандырылған, сондықтан мен сымдарды жарықдиодты ұстағышқа дәнекерледім. Анодтың қай жағы, қайсысы катод екенін білу үшін сымдардың түсінің кодына көз жеткізіңіз (жарық диодтың оң және теріс жақтары).

Мен оларды сымдарға дәнекерленген түйреуіштермен дәнекерледім, бұл оларды дәнекерлемейтін тақтада қолдануға ыңғайлы болу үшін. Мен сымды тек түйреуішке дәнекерледім және оларды серпімді ету үшін айналасына аздап жылытатын түтікті қойдым.

5 -қадам: түймелерді жинап, оларды тақтаға қосыңыз

Түймелерді жинап, оларды тақтаға қосыңыз
Түймелерді жинап, оларды тақтаға қосыңыз
Түймелерді жинап, оларды тақтаға қосыңыз
Түймелерді жинап, оларды тақтаға қосыңыз
Түймелерді жинап, оларды тақтаға қосыңыз
Түймелерді жинап, оларды тақтаға қосыңыз
Түймелерді жинап, оларды тақтаға қосыңыз
Түймелерді жинап, оларды тақтаға қосыңыз

Енді сіздің жағдайда аркадалық түймелерді жинайтын уақыт келді. Пластикалық қаптамадан құлыптау сақинасын алып тастаңыз және оны корпустағы тесік арқылы бекітіңіз. Түймені орнына бекіту үшін құлыптау сақинасын екінші жағынан бұраңыз. Жарықдиодты ұстағышқа бекітіңіз және оны бекітіп қою үшін бұраңыз. Микро қосқыштарда жылжытыңыз (оны ұстап тұру үшін бір -бірімен үйлесетін кішкентай ақсүйектер мен тесіктер бар).

Қосқыштарды тақтаға қосу үшін сіз қосқан немесе қоспаған түймелерді алыңыз. Микро коммутатордың жерінен өтетін сымды Arduino мен резистордың жерге (түйменің аяғы тұрған жерде) жалғаңыз. Микро коммутатордың НО -нан шығатын сымды Arduino 5В -ге қосыңыз.

Жарықдиодты сымдар үшін теріс сымды жерге және оңға 220OHM резистор арқылы 5В қосады. Егер сіз оларды осылай қоссаңыз, олар әрқашан қосылады. Сіз оларды кодқа қоса аласыз және қаласаңыз, оларды түймелермен синхрондауға және қосуға болады.

6 -қадам: Тозақты кодтау

Сонымен, енді сіз өзіңіздің жаңа батырмаларыңызды ескі кодқа тіркедіңіз және кенеттен ол енді жұмыс істемейді. Әріптер бір уақытта екі немесе үш пайда болады және ол қарапайым HTML5 ойындарындағыдай жұмыс істемейді. Тозақтан құтылуға қош келдіңіз.

Бірінші заттар бірінші. Прототиптау кезінде біз жазған код? ол жақсы жұмыс істейді және қарапайым, бірақ ол талғампаз емес. Егер сіз басқа түймелерді қосқыңыз келсе, код үзінділерін көшіріп, қоюға және олардың ішіндегі барлық мәндерді өзгертуге тура келеді. Егер сіз олардың біреуін ұмытып қалсаңыз, қатені түзейтін тозаққа кіресіз. Бұл жерден тақырыпты анықтайсыз ба? Кодтау - тозақ, бірақ өте қызықты, мәселені шешу.

Біз әдемі, қысқа кодты алғымыз келеді. Сондықтан біз барлық жеке түймені бүтін сандарды массивке өзгертеміз. Осылайша, егер сіз басқа түймелерді қосқыңыз келсе, сіз тек түйменің санын, олар орналасқан түйреуіштерді және олардың шығуын өзгертуіңіз керек. Біз сонымен қатар негізгі кірістерді ASCII -ге өзгертеміз, себебі … ол жақсы жұмыс істейді?

Егер сіз мен сияқты болсаңыз, сіз түймелерді қолданудың қарапайым және қарапайым әдісін жазасыз және ол сіз қалағандай жұмыс істемейді. Осылайша сіз жаңа нұсқалар жасайсыз (балаларды есіңізде сақтаңыз, қосымша резервтік көшірмелер!), Әр түрлі нәрселерді қолданып көріңіз, үнемі күрделі кодты жазыңыз, ол әлі де жақсы жұмыс істемейді және соңында бірнеше сағат бұрын жазған қарапайым кодқа ораласыз және кішігірім қатені байқайсыз. бірден бәрін жөндейді.

Сізге бұл саяхаттан құтылуға рұқсат етіңіз, міне жұмыс коды:

Жауапкершіліктен бас тарту: бұл мәтін бірнеше сағат бойы кодтау мен қателерді түзетуден кейін жазылған. Көңілсіздік белгілерін елемеңіз және төменде көрсетілген жұмыс кодына назар аударыңыз;)

#«Keyboard.h» қосу#түймені анықтау3 саны

int buttonPin = {

A0, A1, A2}; // Түймелер қайда? int asciiLetter = {97, 100, 119}; // ASCII -дегі әріптер, мұнда: a, d, w int buttonState [buttonAmount]; // Түйме басылады ма, жоқ па?

жарамсыз орнату () {

for (int i = 0; i <buttonAmount; i ++) {// pinMode жиыны арқылы өту (buttonPin , INPUT); // барлық түйреуіштерді енгізуге}}

void loop () {

for (int i = 0; i <buttonAmount; i ++) // циклы {buttonState = digitalRead (buttonPin ) массиві арқылы; // Батырмалар не істейді? if (buttonState == HIGH) {// Егер түйме басылса Keyboard.press (asciiLetter ); // тиісті әріпті жіберу} else // егер түйме басылмаса {Keyboard.release (asciiLetter ); // хатты босатыңыз}}

}

7 -қадам: бәрі жұмыс істейді

Қосылатын және ойнатылатын реттегішті пайдаланыңыз!

Егер сізге бұл нұсқаулық ұнаған болса, маған конкурста дауыс беруді қарастырыңыз!

Ұсынылған: