Mundarija:

"Birlik" o'yiniga javob beradigan chiroqlar bilan Arduino o'yin boshqaruvchisi :: 24 qadam
"Birlik" o'yiniga javob beradigan chiroqlar bilan Arduino o'yin boshqaruvchisi :: 24 qadam

Video: "Birlik" o'yiniga javob beradigan chiroqlar bilan Arduino o'yin boshqaruvchisi :: 24 qadam

Video:
Video: Biznes boshlashni eng oson yo'li 100% Mening LOYIXAM SIZ UCHUN TICONI O'YINIGA START BERDIM 2024, Noyabr
Anonim
"Birlik" o'yiniga javob beradigan chiroqlar bilan Arduino o'yin boshqaruvchisi
"Birlik" o'yiniga javob beradigan chiroqlar bilan Arduino o'yin boshqaruvchisi

Birinchidan, men bu narsani so'z bilan yozdim. Men birinchi marta ko'rsatmalarni ishlataman, shuning uchun aytganda: kodni yozing, bilingki, men bu qadamning yuqori qismidagi tasvirni nazarda tutyapman.

Ushbu loyihada men 2 ta alohida kodni ishga tushirish uchun 2 ta arduino -dan foydalanaman, chunki men uni bittasi bilan ishlashda muammolarga duch keldim.

Bular Uno va Leonardo

Umuman olganda, bu loyihani kengaytirish uchun sizga kerak bo'lgan narsa.

· 7 ta tugma

· 23 ta o'tish simlari

· 1 arduino Leonardo + usb kabeli

· 4 ta qarshilik · 4 ta LED

· 1 arduino uno + usb kabeli

· 2 ta non paneli

1 -qadam: boshqaruv tugmalarini Arduino -ga ulash

Boshqaruv tugmachalarini Arduino -ga ulash
Boshqaruv tugmachalarini Arduino -ga ulash

Ushbu qismni ulash uchun sizga nima kerak:

· 7 ta tugma

· 14 ta o'tish simlari

· 1 arduino Leonardo + usb kabeli

· Non taxtasi

Tugmalarni ulash juda oddiy, lekin tezda rasm shaklida ko'rsatish uchun tartibsizlikka aylanishi mumkin.

· Birinchi navbatda, tugmachalarni yuqoridagi rasmda men belgilagan joylarga joylashtiring.

· Ikkinchidan, siz arduino Leonardodagi er uyasidan non taxtasining minus qatoriga o'tish moslamasini ulashni xohlaysiz.

· Endi siz minus qatorning istalgan joyidan o'tish tugmachasini o'ng tugmachasiga mos keladigan qatorga bog'lab qo'yasiz. bu unga kuch beradi.

· Keyin siz tugmachaning chap piniga to'g'ri keladigan qatordan o'tish simini Leonardoning raqamli kirish uyalariga ulashni xohlaysiz. Bu yerdagi tugmalar uchun men 2 - 3 - 4 - 5 - 6 - 7 - 8 uyalarini ishlatardim

Men faqat tasvirga 8 -raqamga kiradigan simni ko'rsatdim, chunki u sizga bir -biridan o'tgan barcha simlarni ko'rsatish juda tartibsiz rasmga aylanadi.

2 -qadam: Arduino Leonardoni kodlash:

Arduino Leonardoni kodlash
Arduino Leonardoni kodlash

Buning uchun Leonardodan nima uchun foydalanayotganimni aytib berish uchun. Chunki Uno -da ma'lum bir chip borki, u kompyuterni usb kiritish qurilmasi sifatida tan olmaydi. Bu klaviatura kabi. Bu bizga loyiha dasturchilari sifatida hayotimizni do'zaxni osonlashtiradigan biror narsa qilishga imkon beradi. Klaviatura emulyatsiyasi. Biz kompyuterni aldab o'tamiz, biz klaviaturadagi ba'zi tugmachalarni bosamiz deb o'ylaymiz, chunki biz aslida boshqaruvchimizdagi tugmachalarni bosamiz.

Endi men ketmoqchiman, siz kodni asta -sekin o'ylab topdingiz.

Birinchidan, biz Keyboard.h ni o'z ichiga olamiz. Bu bizga kodimizda ishlatadigan klaviatura funktsiyalaridan foydalanish imkonini beradi.

3 -qadam:

Rasm
Rasm

Keyin biz foydalanadigan raqamli kirish joylarini aniqlashimiz kerak

Leonardo har bir tugma uchun.

Men ham taqlid qilmoqchi bo'lgan kalit nomi bilan ularning har biriga ism qo'ydim.

4 -qadam:

Rasm
Rasm

U erdan biz sozlash funktsiyasiga o'tamiz. Bu aytadi

arduino ishga tushganda nima qiladi.

Avval biz ketma -ket portni ochadigan va ma'lumotlarni uzatish tezligini 9600 bps ga o'rnatadigan Serial.begin yozamiz

va biz hamma kirishlar deb nomlangan pinlarni belgilaymiz.

5 -qadam:

Rasm
Rasm

Va nihoyat, biz tekshiradigan loop funktsiyasini yozamiz

tugmalar bosilmoqda va arduino -ga bunga qanday javob berish kerakligini aytib bering.

Avval biz Keyboard.begin yozamiz, u arduinoga klaviatura funktsiyalari yordamida bizni qidirishi kerakligini aytadi

6 -qadam:

Rasm
Rasm
Rasm
Rasm
Rasm
Rasm

Keyin har bir tugma uchun biz shunga o'xshash if/else so'zini yozamiz

Men bu erda arduino -ga aytganlarim: Agar nazoratchi tugmachasining chap tugmasi bosilsa, kompyuter bizni "a" tugmachasini bosamiz deb o'ylashga majbur qiladi, agar unday bo'lmasa, biz tugmani qo'yib yubordik deb o'ylashga majbur qiling.

Siz asosan ushbu kod blokini tekshirgichingizdagi har bir tugma uchun takrorlaysiz. har bir o'zgaruvchining o'zgarishi va o'zgaruvchiga taqlid qilish kerak bo'lgan kalitlar bilan

7 -qadam:

Rasm
Rasm

Biz kompyuterga bu erga bosishni aytgan kalitlar - W - A - S - D

Kompyuter o'yinlari va E-Q-bu harakat standarti va bu kodda bo'sh joy "men tugmachalari sifatida men tanlayman-o'chirish va o'chirish". O'zingizning o'yiningiz/boshqaruvchingiz uchun yaxshiroq bo'lgan har qanday tugmachani o'zgartirishingiz mumkin.

Va nihoyat, biz arduino -ga Keyboard.end -ni tekshirishni to'xtatishni aytamiz

8 -qadam: Harakatni birlikda kodlash:

Birlikdagi kodlash harakati
Birlikdagi kodlash harakati

Birinchidan, sizga shuni aytmoqchimanki, men buni 2 -o'yin uchun qilaman

siz ko'rmoqchi bo'lgan misollar buning uchun yaratilgan. Asosan men vektor2 -ni qaerda ishlatayotganimni anglatadi, agar siz 3dda ishlayotgan bo'lsangiz, siz vektor3 -dan foydalanasiz. chunki siz 3D -da harakatning qo'shimcha o'lchami haqida qayg'urishingiz kerak bo'ladi.

Endi men arduino tomonida klaviatura emulyatsiyasidan foydalandim, chunki Unity -da biz ishlatadigan klaviaturadagi kalitlarni taniy oladigan narsa bor.

Agar siz loyihangizni birgalikda ochsangiz, Tahrir -> Loyiha sozlamalari -> Kirish -ga o'ting. Siz inspektoringizda kirish menejeri ochilishini ko'rishingiz mumkin. Agar siz "Eksa" tugmachasini bosgan bo'lsangiz, odatda biz hozir qilayotganlar kabi kompyuter boshqaruvchilari uchun ishlatiladigan bir nechta kirish nomlari ochilishini ko'rishingiz mumkin. Biz foydalanmoqchi bo'lgan ikkita kirish-bu gorizontal va vertikal, bu sizning taxminingizga ko'ra, W-A-S-D.

Avval siz o'zingizning o'yinchi bo'ladigan birlik sahnalarida ierarxiya ob'ektini yaratmoqchisiz. Menimcha, bu kichkina odam. Bu sizga kerak bo'lgan hamma narsa bo'lishi mumkin, lekin o'yinim uchun men bu odamni yaratdim.

9 -qadam:

Rasm
Rasm

Siz bu o'yinchiga 2 narsani berishni xohlaysiz. 2D va

a Rigidbody 2d va ularni yuqoridagi rasmga o'xshash qilib tahrir qiling.

10 -qadam:

Rasm
Rasm

Keyin siz loyihalar papkasiga kirishni xohlaysiz va

C# skript. Men buni PlayerMovement deb nomladim.

Ushbu skriptda siz 2 o'zgaruvchini aniqlaysiz. Men "MoveSpeed" deb nomlangan ommaviy float. Bu sizning qanchalik tez yurishingizni aniqlaydi. Va men RigidPlayer deb ataydigan shaxsiy Rigidbody2D. Bu sizning futbolchilaringizni qattiq tanlaydilar.

Birlik muharririga kirishni unutmang, o'yinchi ushbu yangi skriptni inspektorga sudrab olib kelib qo'shadi va moveSpeed uchun raqam qiymatini o'rnatadi.

11 -qadam:

Rasm
Rasm

Endi Start () da siz bitta narsani qilmoqchisiz va bu shunday

Sizning RigidPlayer sizning to'lovchingiz rigidbody 2d ni topishiga ishonch hosil qiling. Siz buni quyidagi kod satri bilan bajarasiz:

12 -qadam:

Rasm
Rasm

Keyin yangilanishga o'tamiz (). Mana biz qayerga ketyapmiz

o'yinchini harakatga keltirish uchun.

Biz buni gorizontal (AD) va vertikal (SW) salbiy va ijobiy kalitlarga qaraydigan va buni raqam sifatida qo'llagan holda, o'yinchini itarish uchun qattiq tanamizga 2d qo'yadigan juda oddiy if ifodasi bilan qilamiz. yo'nalish. Bu raqam moveSpeed o'zgaruvchisiga ko'paytiriladi.

13 -qadam:

Rasm
Rasm

Nihoyat, o'yinchi qachon harakatlanishni to'xtatganiga ishonch hosil qilmoqchisiz

siz hech narsani bosmaysiz. Bu sizga shunday yoqadi:

Agar siz boshqa 3 tugmani ishlatmoqchi bo'lsangiz, buni if ifoda bilan bajaring: if (Input. GetKeyDown (Keycode. Space))

bo'sh joy uchun va bo'sh joy o'rniga boshqa tugmalar uchun siz tanlagan boshqa kalitlarning harfini qo'ying.

14 -qadam: Chiroqlarni Arduino -ga ulash

Chiroqlarni Arduino -ga ulash
Chiroqlarni Arduino -ga ulash

·

Ushbu qismni ulash uchun sizga nima kerak:

· 9 ta o'tish kabeli

· 4 ta rezistor

· 4 ta LED

· 1 arduino uno + usb kabeli

· Non taxtasi

Chiroqlar ulanishi Uno orqali amalga oshiriladi.

Bu yuqoridagi rasmga o'xshaydi:

Siz rezistorlarni LEDlarning uzun tomoniga bog'lab qo'yasiz. Keyin siz raqamli pin raqamidan o'tish moslamasini rezistorlarga bog'laysiz. bu holda men raqamli pinli uyalardan foydalanardim 9 -10 -11 -12, bu raqamlar chiroqlar kodiga etib kelganimizda tegishli bo'ladi.

U erdan siz arduino Uno -ning er uyasidan tepadagi rasmdagi qora sim bilan ko'rinib turgan joyga o'tish joyini bog'lamoqchisiz.

Keyin siz har bir LEDning qisqa uchiga 4 ta o'tish moslamasini olib kelishni xohlaysiz

15 -qadam: Arduino Uno -ni kodlash

Arduino Uno -ni kodlash
Arduino Uno -ni kodlash

Yaxshi, avval biz o'z o'zgaruvchilarimizni yana aniqlaymiz

Shunday qilib, biz birinchi navbatda o'z chiroqlarimiz uchun qaysi raqamli kirishni ishlatamiz. Va biz myCol nomli char yasaymiz [20].

16 -qadam:

Rasm
Rasm

Keyin sozlashda biz yana Serial.begin qilishni xohlaymiz. Barcha LED -larimizni Chiqish rejimiga qo'ying va ishga tushganda hammasini o'chiring.

17 -qadam:

Rasm
Rasm

Va nihoyat, siz loop funktsiyasini yozmoqchisiz.

Bu Arduino -ga ketma -ket keladigan har qanday ma'lumotlarni ikkita hodisadan biri sodir bo'lguncha o'qishiga olib keladi. Yoki chiziqli tasma belgisi aniqlanadi; Bu lf bilan belgilanadi, u 10 ga o'rnatiladi va bu birinchi dalil yoki ma'lum miqdordagi bayt o'qilgan. Bu uchinchi dalil va bu misol uchun faqat bitta bayt o'rnatilgan. Ma'lumotlar myCol o'zgaruvchisida saqlanadi, u char va 20 chegarasiga o'rnatiladi. ReadBytesUntilgacha bu ikkinchi dalil. Yoki buni tushuntirishning boshqa usuli - Serial.readBytesUntil (terminatorCharacter, buffer, byteLimit);

Va if iboralari birlik signal berganda ma'lum chiroqlar yonishini ta'minlaydi. Bu holda menda 4 xil rangdagi chiroqlar bor, shuning uchun men yashil LEDni yoqish uchun b, ko'k LEDni yoqish uchun b, qizil LEDni yoqish uchun va sariq LEDni yoqish uchun birlikni yuboraman.

18 -qadam: Chiroqlar birligi tomonini kodlash:

Birlik tarafidagi kodlash chiroqlari
Birlik tarafidagi kodlash chiroqlari

Bu ishga kirishdan oldin, avvalambor, 2 narsaga e'tibor bering.

1. arduino kodlash dasturida Tool -> Port -> ga o'ting va sizning UNO qaysi COM yoqilganligini tekshiring. Mening vaziyatimda uning COM3 (bu kodda muhim bo'ladi)

2. birlikda Tartibga solish -> Loyiha sozlamalari -> O'yinchi -ga o'ting, keyin inspektorda boshqa sozlamalarni bosing, Api muvofiqligi darajasiga o'ting va uni. NET 2.0 pastki tarmog'idan. NET 2.0 -ga o'zgartiring.

Bu bajarildi. Keling, unga kiraylik.

Ierarxiyangizni o'ng tugmasini bosing va bo'sh yaratish -ni bosing.

Bu biz uchun bitta skriptni ushlab turish uchun sizning o'yiningizda mavjud bo'lgan bo'sh o'yin ob'ekti bo'ladi. Men bu ob'ektni Init deb nomladim.

19 -qadam:

Rasm
Rasm

Keyin loyihalar yorlig'iga o'ting va yangi C# skriptini yarating

va uni Yuborish deb nomlang.

Siz qilayotgan birinchi narsa - bu kodni ishlatadigan bo'limlaridagi satrlarga yozish:

System. IO. Ports -dan foydalanish;

System. Threading -dan foydalanish;

shuning uchun biz SerialPort o'zgaruvchisidan foydalanishimiz mumkin

20 -qadam:

Rasm
Rasm

bu skriptda biz quyidagi o'zgaruvchilarni tuzamiz. E'tibor bering, menda COM3 bor, u erda bu siz uchun boshqacha bo'lishi mumkin, biz bu qadamning boshida muhokama qilganmiz. Agar u 3 raqamini siz aytgan raqam bilan almashtirsa.

21 -qadam:

Rasm
Rasm

Boshida biz skriptni OpenConnection -dan foydalanishni aytamiz

biz yozadigan funksiya

yangilanish - bu hamma narsadan ko'ra ko'proq sinov, lekin agar siz uni qo'shishni xohlasangiz, uni birlikka yuborilgan xabarlarni sinab ko'ring. Siz buni halollik bilan e'tiborsiz qoldirishingiz mumkin.

22 -qadam:

Rasm
Rasm

Endi OpenConnection funktsiyasini bajaring. Bu shunchaki katta

if/else ulanishni ochiq tutib tursa, uni yozilganidek nusxa ko'chiring va siz yaxshi bo'lishingiz kerak.

23 -qadam:

Rasm
Rasm

Endi men tekshirgan arduino kodidan eslang

birlik unga yuborilishini bildiradi.

yaxshi, bu erda sodir bo'ladi. Mening holatimda menda 4 ta chiroq bor, shuning uchun men juda oddiy 4 funktsiyani yozdim. Ular faqat chaqirilganda arduinoga xat yuborishadi. Arduino bu harfni olganida, u ko'rsatilgan harfga mos keladigan chiroqni yoqadi.

24 -qadam:

Rasm
Rasm

Siz buni qanday qilib chaqirishim mumkin, deb hayron bo'lishingiz mumkin

funktsiya? Siz buni o'zingizning o'yiningiz uchun ishlatadigan boshqa har qanday c# skriptlarida bitta oddiy chiziq bilan bajarasiz. Yuborish. NameFunctionhere ();. Masalan, mening o'yinimda o'yinchi oldiga 4 ta rangli sharni yig'ish vazifasi qo'yilgan. Men kichkina ssenariy yozdim, u yaqinlashib, o'ng tugmachani bosganida, uni ko'taradi va bu holda arduinoga bu holatda sariq orbni olish to'g'risida signal yuboradi. Bilingki, men sariq LEDni yoqishim kerak:

Siz bu bitta kod qatorini xohlagan joyingizga qo'yishingiz mumkin. Agar siz o'yin boshlanganda yonishini xohlasangiz, uni start funktsiyasiga qo'ying. U o'lganda yonishini xohlaysizmi, buni o'yinchilarning o'limi vazifasiga kiriting. Bir oz tajriba o'tkazing. Men ekranni chalg'itmasdan to'plashingiz kerak bo'lgan orblarni kuzatib borish uchun chiroqlarni o'yindan tashqarida ui elementiga aylantirishni tanlayman.

Tavsiya: