Სარჩევი:

ჩართეთ და ითამაშეთ არკადული ღილაკები: 7 ნაბიჯი (სურათებით)
ჩართეთ და ითამაშეთ არკადული ღილაკები: 7 ნაბიჯი (სურათებით)

ვიდეო: ჩართეთ და ითამაშეთ არკადული ღილაკები: 7 ნაბიჯი (სურათებით)

ვიდეო: ჩართეთ და ითამაშეთ არკადული ღილაკები: 7 ნაბიჯი (სურათებით)
ვიდეო: 한국에서 인건비를 줄이는 법 - 무인 키오스크 주문기가 있는 만화방에 가다 2024, ნოემბერი
Anonim
შეაერთეთ და ითამაშეთ არკადული ღილაკები
შეაერთეთ და ითამაშეთ არკადული ღილაკები

მე ახლახანს დავიწყე Arduino– ს გამოყენება ჩემი პროექტების შესაქმნელად. როგორც დიზაინერს, მე მიყვარს ჩემი თამაშების/ინტერაქტიული პროექტების პერსონალური ინტერფეისის შექმნა.

ერთი პრობლემა, რომელიც მე წავაწყდი იმაში, რომ სერიული კომუნიკაციის გამოყენება საკმაოდ რთული და მიდრეკილია პრობლემებისა და შეცდომებისკენ და მინდოდა სწრაფი და მარტივი გადაწყვეტა, რომელიც საშუალებას მომცემდა გამომეყენებინა გარე ღილაკები ჩემი თამაშების გასაკონტროლებლად.

როგორც მე მინდოდა plug and play მოწყობილობა, რომლის გამოყენებაც მყისიერად ნებისმიერ კომპიუტერთან შეგეძლო, შევიძინე Arduino Leonardo. ის თითქმის იდენტურია Uno– ს, მაგრამ რამდენიმე განსხვავებით. მთავარი განსხვავება, რომელსაც მე გამოვიყენებ ამ პროექტისათვის, არის ის, რომ ვიმოქმედო როგორც HID. HID, ანუ ადამიანის ინტერფეისის მოწყობილობა არის USB პროტოკოლი, რომელიც საშუალებას აძლევს თქვენს კომპიუტერს ამოიცნოს და მიიღოს კლავიატურებიდან და კომპიუტერის მაუსიდან თითოეული მოწყობილობისთვის მორგებული დრაივერების დაყენების გარეშე.

შენიშვნა: თქვენ ასევე შეგიძლიათ გამოიყენოთ Uno, თუ განაახლეთ firmware, როგორც ეს ნაჩვენებია აქ.

ნაბიჯი 1: მასალები

ამ პროექტისთვის დაგჭირდებათ:

1x HID უნარიანი მიკროკონტროლი (არის რამდენიმე Arduino micro, Due & leonardo, მე ვიყენებ Arduino Leonardo- ს)

1x USB to arduino კაბელი (ლეონარდოსთვის ეს არის USB მიკრო)

3x Arcade ღილაკები (მე ეს ვიყიდე)

1x solderless breadboard

3x 10k ohm რეზისტორები

3x 220 ohm რეზისტორები

ჯუმბერის მავთულები

თქვენ, რა თქმა უნდა, შეგიძლიათ დაამატოთ მეტი ღილაკი, ან ყველაფერი ჩასვათ პურის დაფაზე, რათა ყველაფერი უფრო მუდმივი გახდეს.

ნაბიჯი 2: პროტოტიპირება

პროტოტიპირება
პროტოტიპირება
პროტოტიპირება
პროტოტიპირება
პროტოტიპირება
პროტოტიპირება

ასე რომ, სანამ შევიძენდი არკადულ ღილაკებს, რომელთა გამოყენებაც მინდოდა, მე გამოვცადე ეს სტანდარტული ღილაკებით. დააკავშირეთ ღილაკები სტანდარტული გზით, მე მჯერა, რომ მე გამოვიყენე 10K ohm რეზისტორები.

ლეონარდოს წყალობით პროგრამირება საკმაოდ მარტივია. თქვენ უნდა შეიტანოთ კლავიატურის ბიბლიოთეკა. მე გამოვიყენე Arduino სტანდარტული მაგალითი "კლავიატურის შეტყობინება", როგორც ჩემი კოდის საფუძველი.

ახლა კითხვაა, როგორ გსურთ თქვენი ღილაკების მუშაობა. თქვენ ძირითადად გაქვთ ორი არჩევანი, ერთი ღილაკის დაჭერა და ასოების უწყვეტი ნაკადი, თუ დააჭერთ. ეს ნამდვილად დამოკიდებულია თქვენს პროექტზე, რა გსურთ.

თუ გსურთ, რომ გასაღების დაჭერისას მოხდეს რაიმე შემთხვევის შემთხვევა, როგორიცაა ნახტომი ან ჩართვა/გამორთვა, თქვენ აირჩევთ ერთიანი ბიძგის მეთოდს. ამ მეთოდით თქვენ უყურებთ ღილაკის მდგომარეობას, ის მაღლაა თუ ქვევით? შემდეგ შეადარებ მას წინა მდგომარეობას, უკვე ზემოთ იყო თუ ქვევით? თუ წინა ღილაკის მდგომარეობა იგივეა, რაც ამჟამინდელი ღილაკი, არაფერი მოხდება. მაგრამ თუ ღილაკის მდგომარეობა იცვლება, როგორც თქვენ დააჭერთ ან გაათავისუფლებთ ღილაკს, რაღაც მოხდება. ჩემს კოდში ის მხოლოდ ასოებს აკრიფებს ღილაკის დაჭერისას და არა გათავისუფლებისას, მაგრამ შეგიძლია შეცვალო.

#მოიცავს "კლავიატურას.ჰ"

const int buttonLeft = A0; // შესასვლელი პინი ღილაკზე

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

int previousButtonStateLeft = მაღალი; // pushButton- ის მდგომარეობის შესამოწმებლად

int previousButtonStateRight = მაღალი; int previousButtonStateUp = მაღალი;

void setup () {

// გააკეთეთ pushButton pin შეყვანა: pinMode (buttonLeft, INPUT); pinMode (buttonRight, INPUT); pinMode (buttonUp, INPUT); // კლავიატურაზე კონტროლის ინიციალიზაცია: Keyboard.begin (); }

ბათილი მარყუჟი () {

// წაიკითხეთ ღილაკი: int buttonStateLeft = digitalRead (buttonLeft); // თუ ღილაკის მდგომარეობა შეიცვალა, თუ ((buttonStateLeft! = previousButtonStateLeft) // და ის ამჟამად დაჭერილია: && (buttonStateLeft == HIGH)) {// ჩაწერეთ შეტყობინება Keyboard.print ("a"); } // შეინახეთ მიმდინარე ღილაკის მდგომარეობა შედარებისთვის შემდეგ ჯერზე: previousButtonStateLeft = buttonStateLeft;

// წაიკითხეთ ღილაკი:

int buttonStateRight = digitalRead (ღილაკი მარჯვენა); // თუ ღილაკის მდგომარეობა შეიცვალა, თუ ((buttonStateRight! = previousButtonStateRight) // და ის ამჟამად დაჭერილია: && (buttonStateRight == HIGH)) {// ჩაწერეთ შეტყობინება Keyboard.print ("w"); } // შეინახეთ მიმდინარე ღილაკის მდგომარეობა შედარებისთვის შემდეგ ჯერზე: previousButtonStateRight = buttonStateRight;

// წაიკითხეთ ღილაკი:

int buttonStateUp = digitalRead (buttonUp); // თუ ღილაკის მდგომარეობა შეიცვალა, თუ ((buttonStateUp! = previousButtonStateUp) // და ის ამჟამად დაჭერილია: && (buttonStateUp == HIGH)) {// ჩაწერეთ შეტყობინება Keyboard.print ("d"); } // შეინახეთ მიმდინარე ღილაკის მდგომარეობა შედარებისთვის შემდეგ ჯერზე: previousButtonStateUp = buttonStateUp; }

თუ გსურთ რაღაც განუწყვეტლივ მოხდეს მანამ, სანამ ღილაკს დააჭერთ, როგორც თქვენ გინდათ თქვენ მარცხენა ან მარჯვენა მოძრაობისთვის, უბრალოდ მიეცით უფლება დაწეროს წერილი წინა ღილაკის მდგომარეობის შემოწმების გარეშე. დაიმახსოვრე, რომ დაამატე მცირედი შეფერხება, რომ არ გაგიჟდეს და შეეწინააღმდეგო შენს ღილაკებს. ამ პრობლემის გადაჭრის უფრო ელეგანტური გზები არსებობს, მაგრამ ეს არის მარტივი და სწრაფი.

#მოიცავს "კლავიატურას.ჰ"

const int buttonLeft = A0; // შესასვლელი პინი ღილაკზე

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

void setup () {

// გააკეთეთ pushButton pin შეყვანა: pinMode (buttonLeft, INPUT); pinMode (buttonRight, INPUT); pinMode (buttonUp, INPUT); // კლავიატურაზე კონტროლის ინიციალიზაცია: Keyboard.begin (); }

ბათილი მარყუჟი () {

// წაიკითხეთ ღილაკი: int buttonStateLeft = digitalRead (buttonLeft); თუ (buttonStateLeft == HIGH) // თუ ღილაკზე დაჭერილია {// ჩაწერეთ შეტყობინება Keyboard.print ("a"); დაგვიანება (50); // გადახტომა დაგვიანებისთვის და კომპიუტერის დასაძლევად

// წაიკითხეთ ღილაკი:

int buttonStateRight = digitalRead (ღილაკი მარჯვენა); თუ (buttonStateRight == HIGH) // თუ ღილაკზე დაჭერილია {// ჩაწერეთ შეტყობინება Keyboard.print ("w"); დაგვიანება (50); // გადახტომა დაგვიანებისთვის და კომპიუტერის დასაძლევად

// წაიკითხეთ ღილაკი:

int buttonStateUp = digitalRead (buttonUp); თუ (buttonStateUp == HIGH) // თუ ღილაკზე დაჭერილია {// ჩაწერეთ შეტყობინება Keyboard.print ("d"); დაგვიანება (50); // გადახტომა დაგვიანებულია და საშუალებას მოგცემთ კომპიუტერს დაეწიოთ}}

თქვენ ყოველთვის შეგიძლიათ გამოიყენოთ ორივე მეთოდის ნაზავი, ეს დამოკიდებულია იმაზე, რაც საუკეთესოდ შეესაბამება თქვენს საჭიროებებს.

ნაბიჯი 3: კორპუსის ლაზერული ჭრა

კორპუსის ლაზერული ჭრა
კორპუსის ლაზერული ჭრა

შემთხვევისთვის გამოვიყენე 3 მმ mdf, 2 მმ პლექსიგლასის ჩასადებით. მე დავამატე ჩანართი, რადგან მინდა დავამატო რამდენიმე შუქდიოდი საქმის შიგნიდან შემდგომ ეტაპზე, რათა ის ლამაზი და ბრწყინვალე იყოს.

მე ჩავწერე ჩემი ზომები makercase და გადმოვწერე svg ფაილი. გავხსენი ილუსტრატორში და დავამატე ხვრელები იქ, სადაც მინდოდა. თუ თქვენ არ გაქვთ Illustrator, შეგიძლიათ გამოიყენოთ Inkscape ამ ნაბიჯისათვის.

რა თქმა უნდა, თქვენ არ გჭირდებათ ლაზერული საჭრელის გამოყენება, რადგან ეს არის მარტივი ყუთი, რომელშიც რამდენიმე ხვრელია. საკმაოდ მარტივი უნდა იყოს მისი შექმნა უფრო ტრადიციული დენის ინსტრუმენტების გამოყენებით (ან თუნდაც ხელის ინსტრუმენტებით!) მე უბრალოდ ძალიან ზარმაცი ვარ და მქონდა წვდომა ლაზერულ საჭრელზე.

ნაბიჯი 4: არკადული ღილაკების შედუღება

შედუღების არკადული ღილაკები
შედუღების არკადული ღილაკები
შედუღების არკადული ღილაკები
შედუღების არკადული ღილაკები
შედუღების არკადული ღილაკები
შედუღების არკადული ღილაკები

არკადული ღილაკი (ან მინიმუმ ჩემი) სამი ნაწილისგან შედგება. პლასტიკური გარსაცმები, LED დამჭერი (მასში LED) და მიკრო გადამრთველი. მიკრო გადამრთველი არის ღილაკის ფაქტობრივი ღილაკი და არის ის, რაც დაგჭირდებათ თქვენს არდუინოსთან დასაკავშირებლად. მიკრო გადამრთველზე არის სამი ტერმინალი (ლითონის ნაჭრები, რომლებიც იჭრება, სადაც თქვენ შეაერთებთ მავთულხლართებს). ერთი თავზე (ან ბოლოში, რაც გინდა) არის მიწა. დანარჩენი ორი ტერმინალი არის ნორმალური ღია (NO) და ნორმალური დახურული (NC). NO ნიშნავს, რომ თუ გადამრთველი დაჭერილია ის ქმნის კავშირს. NC ნიშნავს, რომ ღილაკზე დაჭერის შემთხვევაში ის წყვეტს კავშირს. ჩვენ გამოვიყენებთ არა ამ პროექტს. მე დავნიშნე მიწა, NO და NC ჩემს მიკრო შეცვლაზე სურათებში.

ჩემი ღილაკები განათებულია, ასე რომ მე შემაერთეთ მავთულები LED დამჭერზე. დარწმუნდით, რომ დააკოპირეთ თქვენი მავთულები ისე, რომ იცოდეთ რომელი მხარეა ანოდი და რომელი კათოდი (LED- ის დადებითი და უარყოფითი მხარეები).

სათაურის ქინძისთავები დავამაგრე ჩემს მავთულხლართებზე, რათა მათი გამოყენება გამიადვილდეს გამწოვ დაფაზე. მე უბრალოდ გავამაგრე მავთული სათაურის პინზე და დავაყენე ცოტა სითბოს შესამცირებელი მილი, რათა უფრო გამძლე იყოს.

ნაბიჯი 5: დააწყვეთ ღილაკები და შეაერთეთ ისინი თქვენს დაფაზე

დააწყვეთ ღილაკები და შეაერთეთ ისინი თქვენს დაფაზე
დააწყვეთ ღილაკები და შეაერთეთ ისინი თქვენს დაფაზე
დააწყვეთ ღილაკები და შეაერთეთ ისინი თქვენს დაფაზე
დააწყვეთ ღილაკები და შეაერთეთ ისინი თქვენს დაფაზე
დააწყვეთ ღილაკები და შეაერთეთ ისინი თქვენს დაფაზე
დააწყვეთ ღილაკები და შეაერთეთ ისინი თქვენს დაფაზე
დააწყვეთ ღილაკები და შეაერთეთ ისინი თქვენს დაფაზე
დააწყვეთ ღილაკები და შეაერთეთ ისინი თქვენს დაფაზე

ახლა დროა დააწყოთ თქვენი არკადული ღილაკები თქვენს საქმეში. ამოიღეთ ჩამკეტი რგოლი პლასტმასის გარსაცმებიდან და ჩადეთ იგი ხვრელში. მიამაგრეთ ჩაკეტვის ბეჭედი მეორე მხარეს, რათა დააჭიროთ ღილაკს. მიამაგრეთ LED დამჭერი და გადაუგრიხეთ, რომ ჩაკეტოს ადგილზე. გადაადგილდით მიკრო კონცენტრატორებში (არის პატარა ბუდეები და ხვრელები, რომლებიც ერთმანეთთან გასწორებულია, რათა შეინარჩუნოს იგი).

კონცენტრატორების დაფაზე დასაკავშირებლად ამოიღეთ ღილაკები, რომლებიც თქვენ შეიძლება დაამატოთ ან არ დაამატოთ. შეაერთეთ მავთული მიკრო გადართვის მიწიდან არდუინოს მიწასთან და რეზისტორთან (სადაც იყო ღილაკის ფეხი). შეაერთეთ მავთული მიკრო გადამრთველის NO– დან Arduino– ს 5v– ზე.

LED მავთულისთვის დააკავშირეთ უარყოფითი მავთული მიწასთან და პოზიტიური 220OHM რეზისტორის საშუალებით 5 ვ. თუ თქვენ დააკავშირებთ მათ ასე, ისინი ყოველთვის ჩართულები იქნებიან. თქვენ შეგიძლიათ დაამატოთ ისინი კოდში და, თუ გსურთ, ღილაკებთან სინქრონიზებული ჩართვა და გამორთვა.

ნაბიჯი 6: ჯოჯოხეთის კოდირება

ასე რომ, ახლა თქვენ მიამაგრეთ თქვენი საყვარელი ახალი ღილაკები თქვენს ძველ კოდს და მოულოდნელად ის აღარ მუშაობს ისე, როგორც უნდა. ასოები ერთდროულად ორი ან სამი გამოჩნდება და ის არ მუშაობს ისე, როგორც უნდა მარტივი HTML5 თამაშებით. კეთილი იყოს თქვენი მობრძანება ჯოჯოხეთის გამოცხადებაში.

უპირველეს ყოვლისა. კოდი, რომელიც დავწერეთ პროტოტიპის დროს? მუშაობს კარგად და მარტივია, მაგრამ არ არის ელეგანტური. თუ გსურთ დაამატოთ მეტი ღილაკი, თქვენ უნდა დააკოპიროთ და ჩასვათ კოდის ფრაგმენტები და შეცვალოთ ყველა მნიშვნელობა მათ შიგნით. თუ დაივიწყებთ ერთ მათგანს, შეხვალთ შეცდომების გამოსწორების ჯოჯოხეთში. აქ გამოავლინე თემა? კოდირება ჯოჯოხეთია, მაგრამ ძალიან სახალისო, ჯოჯოხეთის პრობლემის გადაჭრა.

ჩვენ გვინდა ლამაზი, მოკლე კოდი. ასე რომ, ჩვენ შევცვლით ყველა ცალკეულ ღილაკს მთელ რიცხვს მასივებში. ამ გზით, თუ გსურთ დაამატოთ მეტი ღილაკი, თქვენ მხოლოდ უნდა შეცვალოთ ღილაკის რაოდენობა, ქინძისთავები, სადაც ისინი მდებარეობს და მათი გამომავალი. ჩვენ ასევე ვცვლით ASCII– ის საკვანძო მონაცემებს, რადგან… ის უკეთესად მუშაობს?

ახლა თუ თქვენ ჩემნაირი ხართ, თქვენ დაწერთ ღილაკების გამოყენების მარტივ და მარტივ გზას და ის არ იმუშავებს ისე, როგორც გსურთ. ასე რომ თქვენ ქმნით ახალ ვერსიებს (გაიხსენეთ ბავშვები, დამატებითი სარეზერვო ასლები!), სცადეთ სხვადასხვა რამ, დაწერეთ მუდმივად უფრო რთული კოდი, რომელიც ჯერ კიდევ არ მუშაობს კარგად და საბოლოოდ დაუბრუნდებით იმ უბრალო კოდს, რომელიც თქვენ დაწერეთ საათის წინ და შეამჩნევთ მცირე შეცდომას მყისიერად აფიქსირებს ყველაფერს.

ნება მომეცით დაგზოგოთ ეს მოგზაურობა, აქ არის სამუშაო კოდი:

პასუხისმგებლობის შეზღუდვის განაცხადი: ეს ტექსტი დაიწერა რამდენიმე საათის განმავლობაში კოდირებისა და შეცდომების დაფიქსირების შემდეგ ძალიან მარტივი კოდი. გთხოვთ, უგულებელყოთ იმედგაცრუების ნიშნები და გაამახვილოთ ყურადღება ქვემოთ განთავსებულ სამუშაო კოდზე;)

#ჩართეთ "Keyboard.h"#განსაზღვრეთ ღილაკი თანხა 3

int ღილაკი Pin = {

A0, A1, A2}; // სად არის ღილაკები? int asciiLetter = {97, 100, 119}; // წერილები ASCII– ში, აქ: a, d, w int buttonState [buttonAmount]; // ღილაკი დაჭერილია თუ არა?

void setup () {

for (int i = 0; i <buttonAmount; i ++) {// ციკლის გავლით მასივის pinMode (buttonPin , INPUT); // დააყენეთ ყველა ქინძისთავები შესაყვანად}}

ბათილი მარყუჟი () {

for (int i = 0; i <buttonAmount; i ++) // მასივის გავლით {buttonState = digitalRead (buttonPin ); // რას აკეთებენ ღილაკები? if (buttonState == HIGH) {// თუ ღილაკზე დაჭერილია Keyboard.press (asciiLetter ); // გაუგზავნე შესაბამისი წერილი} სხვას // თუ ღილაკს არ დაჭერილი {Keyboard.release (asciiLetter ); // გაათავისუფლე წერილი}}

}

ნაბიჯი 7: ყველაფერი მუშაობს

ისიამოვნეთ თქვენი plug & play მორგებული კონტროლერით!

თუ ეს ინსტრუქცია მოგეწონათ, გთხოვთ გაითვალისწინოთ ხმის მიცემა კონკურსში!

გირჩევთ: