Mundarija:

Arduino va Touchpad Tic Tac Toe: 8 qadam (rasmlar bilan)
Arduino va Touchpad Tic Tac Toe: 8 qadam (rasmlar bilan)

Video: Arduino va Touchpad Tic Tac Toe: 8 qadam (rasmlar bilan)

Video: Arduino va Touchpad Tic Tac Toe: 8 qadam (rasmlar bilan)
Video: Arduino - Tic Tac Toe Game with Touchpad 2024, Iyun
Anonim
Arduino va sensorli panel Tic Tac Toe
Arduino va sensorli panel Tic Tac Toe

Yoki kirish va chiqishni ko'paytirish, bitlar bilan ishlash mashqlari. Va Arduino tanloviga ariza.

Bu har bir narsani bir -biriga bog'lash uchun displey uchun 3x3 rangli ikki rangli LEDlar, oddiy rezistiv sensorli panel va Arduino yordamida tik tac toe o'yini. Bu qanday ishlashini ko'rish uchun videoni tomosha qiling: Loyiha nima talab qiladi: Ehtiyot qismlar va sarf materiallari Bitta taxta (yoki tasma taxtasi) To'qqiz rangli ikkita LED, umumiy katodli To'qqizta bir xil qarshilik, 100-220 ohm oralig'ida Oltita bir xil rezistorlar. 10kohm - 500kohm oralig'ida Bitta qutb, ikki martalik kalit, bir nechta bosh pim, bir nechta elektr simli shaffof akril, qalinligi ~ 1 mm, yon tomonida 8 sm. Umumiy qiymati 20 AQSh dollaridan oshmasligi kerak. Asboblar Arduino -ni sozlash (Arduino Duemilanove, Arduino IDE, kompyuter, USB kabeli) Oddiy elektr asboblari (multimetr, lehim lehim quroli, sim kesgich, sim kesuvchi) Arduino bilan bog'liq hamma narsa bo'lishi mumkin. https://www.arduino.cc saytida topilgan. Qurilish bilan davom eting!

1 -qadam: LED matritsasini ulash

LED matritsasini ulash
LED matritsasini ulash
LED matritsasini ulash
LED matritsasini ulash

LED yonishi uchun uning ikkala simini ulash lozim. Agar biz 18 ta LEDning har biriga (9 qizil, 9 yashil) bir juft pim bag'ishlamoqchi bo'lsak, Arduino -dagi pinlar tezda tugaydi. Biroq, multiplekslash yordamida biz barcha LED -larni faqat 9 ta pin bilan bog'lay olamiz! LEDlar uch ustunli, katodlari esa oltita qatorga guruhlangan, ma'lum bir anod chizig'ini yuqori va ma'lum bir katod chizig'ini past qilib, boshqa anod va katod liniyalarida yuqori impedansga ega bo'lish orqali biz Qaysi LEDni yoqishni xohlayotganimizni tanlang, chunki oqimning faqat bitta mumkin yo'li bor, masalan, ikkinchi rasmda, yashil anodni 1 satr balandlikda va katodni pastda, pastki chapda yashil LED yonadi.. Bu holda joriy yo'l ko'k rangda ko'rsatilgan, lekin agar siz turli xil chiziqlarda bir nechta LEDni yoqmoqchi bo'lsangiz? Bunga erishish uchun biz tirishqoqlikdan foydalanamiz. LED chiziqlarining juftligini juda tez tanlab, bu tanlangan barcha LEDlar bir vaqtning o'zida yonib turishini tasavvur qiladi.

2 -qadam: LED matritsasi tartibi

LED matritsasi tartibi
LED matritsasi tartibi
LED matritsasi tartibi
LED matritsasi tartibi

Quyidagi sxemada LEDlar qanday qilib simli ulanganligi ko'rsatilgan (G1-G9: yashil LEDlar, R1-R9: qizil LEDlar). Bu diagramma bitta qizil va yashil LEDlar uchun mo'ljallangan, agar siz ikki rangli oddiy katodli qizil/yashil LEDlardan foydalansangiz, qizil/yashil juftlik uchun faqat bitta katodli oyog'ingiz bor. Arduino -dan (Duemilanovedagi 3, 5, 6, 9, 10, 11 -pinlar), shunda bizda keyinchalik yo'qolish kabi effektlar bo'lishi mumkin. Katod chiziqlari 4, 7 va 8 -gachasi pimlarga kiradi. Har bir katod va anod chizig'ida himoya uchun 100 ohmli rezistorlar mavjud.

3 -qadam: LED matritsasiga murojaat qilish

Tik tok kodi uchun biz LEDlar haqida quyidagi ma'lumotlarni saqlashimiz kerak bo'ladi: - LED yonadimi yoki yo'qmi - yoniq bo'lsa, qizil yoki yashil bo'ladimi Buning bir usuli - shtatni saqlash. holatni ifodalash uchun uchta raqamdan foydalangan holda 9 hujayrali qatorda (0 = o'chirilgan, 1 = qizil yoqilgan, 2 = yashil yoqilgan). Har safar biz LED holatini tekshirishimiz kerak, masalan, yutuq sharti bor -yo'qligini tekshirish uchun biz qator bo'ylab aylanib o'tishimiz kerak bo'ladi. Bu juda samarali usul, lekin juda zerikarli. To'qqiz bitli ikkita guruhdan foydalanish yanada soddalashtirilgan usul bo'ladi. To'qqiz bitli birinchi guruh LEDlarning o'chish holatini saqlaydi, to'qqiz bitli ikkinchi guruh esa rangni saqlaydi. Keyin, LED holatini boshqarish oddiy arifmetik va siljish masalasiga aylanadi. Bu erda ishlaydigan misol. Aytaylik, biz tac toe panjarasini grafik tarzda chizamiz va birinchi navbatda yoqish holatini ko'rsatish uchun 1 va 0 soniyalarni ishlatamiz (1 yoqilgan, 0 o'chirilgan): 000 000 = pastki chap LEDli matritsa 100 100 010 = diagonalli matritsa LEDlar yonadi 001 Agar biz hujayralarni chap pastki qismdan sanab chiqsak, yuqoridagi tasvirlarni bitlar qatori sifatida yozishimiz mumkin. Birinchi holda, bu 100000000, ikkinchisida esa 001010100 bo'ladi. Agar biz ularni ikkilik tasvirlar deb hisoblasak, bitlarning har bir seriyasini bitta raqamga jamlash mumkin (birinchi holatda 256, 84 ikkinchi holatda). Shunday qilib, matritsaning holatini saqlash uchun massivni ishlatish o'rniga, biz faqat bitta raqamdan foydalanishimiz mumkin! Xuddi shunday, biz ham LED rangini xuddi shunday ifodalashimiz mumkin (1 qizil, 0 yashil). Keling, birinchi navbatda barcha LEDlar yonib ketgan deb faraz qilaylik (shuning uchun yoqish holati 511 bilan ko'rsatilgan). Quyidagi matritsa LEDlarning rang holatini ifodalaydi: 010 yashil, qizil, yashil 101 qizil, yashil, qizil 010 yashil, qizil, yashil Endi, LED matritsasini ko'rsatishda biz har bir bitni aylanib o'tishimiz kerak, avval yoqish holatida, keyin rang holatida. Masalan, aytaylik, bizning yoqish holati 100100100, rang holati esa 010101010. LED matritsasini yoritish algoritmi: 1-qadam. Ikkilik 1 (ya'ni bit) niqob). Qadam 2. Agar rost bo'lsa, LED yonadi. Rang holatini ikkilik bilan bitli ravishda qo'shing. 1 -qadam. Agar rost bo'lsa, qizil LEDni yoqing. Agar bu noto'g'ri bo'lsa, yashil LEDni yoqing. 4-qadam. O'chirish holatini ham, rang holatini ham bir oz o'ngga siljiting (ya'ni bitni almashtirish). 5 -qadam. To'qqiz bit o'qilmaguncha 1 - 4 -qadamlarni takrorlang. E'tibor bering, biz matritsani orqaga to'ldiramiz - biz 9 -yacheykadan boshlaymiz, keyin 1 -yacheykaga o'tamiz. Bundan tashqari, yoqish va rang holatlari imzo qo'yilgan tamsayı turi o'rniga belgisiz tamsayı turi (so'z) sifatida saqlanadi. Buning sababi shundaki, agar biz ehtiyot bo'lmasak, o'zgaruvchan belgini bexosdan o'zgartirishimiz mumkin. LED matritsasini yoritish kodi biriktirilgan.

4 -qadam: Sensorli panelni qurish

Sensorli panelni qurish
Sensorli panelni qurish
Sensorli panelni qurish
Sensorli panelni qurish
Sensorli panelni qurish
Sensorli panelni qurish
Sensorli panelni qurish
Sensorli panelni qurish

Sensorli panel ingichka akril varaqdan yasalgan bo'lib, u LED matritsasini yopish uchun etarlicha katta. Keyin, chiziqli va ustunli simlarni akril lentaga mahkam yopishtiring. Shaffof lenta, shuningdek, kesishmalarda, simlar orasidagi izolyatsion ajratuvchi sifatida ishlatiladi. Barmoq yog'ining tasmaning yopishqoq tomoniga tushishiga yo'l qo'ymaslik uchun toza asboblardan foydalanganingizga ishonch hosil qiling. Barmoq izlari dog'lari nafaqat chirkin ko'rinishga ega, balki yopishqoqlikni ham kamaytiradi. Har bir satrning bir uchini kesib oling va boshqa uchini uzunroq simga lehimlang. Ulagichlarni lehimlashdan oldin rezistorni simlar bilan bir qatorda lehimlang. Bu erda ishlatiladigan rezistorlar 674k ni tashkil qiladi, lekin 10k va 1M oralig'idagi har qanday qiymat yaxshi bo'lishi kerak. Arduino-ga ulanish 6 ta analog pin yordamida amalga oshiriladi, ular 14-16-gachasi simli tarmoqlar qatoriga ulangan va 17-19-pinlar ulangan. ustunlar.

5 -qadam: Sensorli panel - bu qanday ishlaydi

Sensorli panel - bu qanday ishlaydi
Sensorli panel - bu qanday ishlaydi
Sensorli panel - bu qanday ishlaydi
Sensorli panel - bu qanday ishlaydi

Minimal pinli LED matritsasini o'rnatish uchun biz chiziqli multipleksorni ishlatganimizdek, biz sensorli sensorlar qatorini o'rnatish uchun shunga o'xshash chiziqli multipleksorni ishlatishimiz mumkin, undan keyin biz LEDlarni faollashtirishimiz mumkin. Ushbu sensorli panelning kontseptsiyasi oddiy. Bu asosan simli tarmoq bo'lib, uchta yalang'och simlar ketma -ket ishlaydi va uchta yalang'och simlar satrlar ustidagi ustunlarda ishlaydi. Har bir kesishish nuqtasida ikkita simning tegishiga to'sqinlik qiladigan kichik kvadrat izolyatsiya joylashgan. Chorrahaga tegib turgan barmoq ikkala sim bilan aloqa qiladi, natijada ikkita sim o'rtasida ulkan, lekin cheklangan qarshilik paydo bo'ladi. Barmoq orqali bir simdan ikkinchisiga kichik oqim oqishi mumkin, shuning uchun qaysi kesishma bosilganligini aniqlash uchun quyidagi usul ishlatilgan: 1 -qadam: Barcha ustunli chiziqlarni OUTPUT LOW holatiga qo'ying. 2 -qadam: Qator satrlarini "INPUT" ga o'rnating, ichki tortishishlarni faollashtiring. 3 -qadam: qiymat berilgan chegaradan pastga tushguncha, har bir satr satrida analog o'qing. 4-qadam: 1-3-qadamlarni takrorlang, lekin endi ustunlar kirish sifatida, qatorlar esa chiqish sifatida. Bu sizga bosilgan kesishma qaysi ustun ekanligini bildiradi, shovqin ta'sirini kamaytirish uchun bir qancha o'qishlar olinadi va keyin o'rtacha hisoblanadi. O'rtacha natija chegara bilan taqqoslanadi, chunki bu usul chegarani tekshiradi, shuning uchun u bir vaqtning o'zida bosishni aniqlash uchun mos emas. Biroq, tac toe navbat bilan ketayotgani uchun, bir marta bosish kifoya, sensorli panel qanday ishlashini ko'rsatadigan eskiz, LED matritsasida bo'lgani kabi, qaysi kesishma bosilganligini ko'rsatish uchun bitlardan foydalaniladi.

6 -qadam: Hammasini bir joyga to'plash

Hamma narsani bir joyga to'plash
Hamma narsani bir joyga to'plash

Endi barcha alohida komponentlar tayyor bo'lgach, ularni birlashtirish vaqti keldi. Siz simli tarmoq sensori bilan sinxronizatsiya qilish uchun LED matritsali kodidagi pin raqamlarini qayta tartiblashingiz kerak bo'lishi mumkin. O'zingiz xohlagan mahkamlagich yoki yopishtiruvchi bilan simli panjarani mahkamlang va chiroyli taxtaga yopishib oling. 12 -pin va Arduino erini almashtiring. Bu kalit 2 ta o'yinchi rejimi va 1 ta o'yinchi rejimi o'rtasida almashish (mikrokontrollerga qarshi).

7 -qadam: Tic Tac Toe dasturlash

O'yin kodi biriktirilgan. Keling, birinchi navbatda, tac toe o'yinini ikkita o'yinchi rejimida turli bosqichlarga ajratamiz: 1 -qadam: A o'yinchi chorrahaga tegib to'ldirilmagan katakchani tanlaydi. 2 -qadam: bu uyali LED A rang bilan yonadi. 3 -qadam: "A" o'yinchi yutganligini tekshiring. 4 -qadam: "B" o'yinchisi to'ldirilmagan katakchani tanlaydi. 5 -qadam: bu hujayra uchun LED "B" rangi bilan yonadi. 6-qadam: "B" o'yinchisining g'alaba qozonganligini tekshiring. 7-qadam: "G'alaba sharti" bo'lmaguncha yoki barcha hujayralar to'ldirilmaguncha 1-6 ni takrorlang. Hujayralarni o'qish: Dasturni o'qish va LED matritsasini ko'rsatish o'rtasida.. Tarmoq sensori nolga teng bo'lmagan qiymatni qayd qilmasa, bu pastadir davom etadi. Kesish tugmachasi bosilganda, bosilgan hujayraning joylashuvi saqlanadi, agar hujayraning to'ldirilmaganligini tekshirib ko'rsatsak: o'qish holati aniqlanganda (o'zgaruvchi bosilganda), u joriy hujayra holati bilan taqqoslanadi (GridOnOff o'zgaruvchisida saqlanadi). ozgina qo'shimchalar yordamida. Agar bosilgan katak to'ldirilmagan bo'lsa, LEDni yoqishni davom eting, aks holda katakchalarni o'qishga qayting. Ranglarni almashtirish: Kimning burilishini yozish uchun burilishli boolean o'zgaruvchi ishlatiladi. Hujayra tanlanganida tanlangan LED rangi bu o'zgaruvchiga qarab belgilanadi, u har bir hujayra tanlanganida o'zgaradi. G'alaba shartini tekshirish: faqat 8 ta yutuq sharti bor va ular qatorda so'z o'zgaruvchilari sifatida saqlanadi (winArray). O'yinchining hujayralardagi to'ldirilgan pozitsiyalarini yutuq shartlari bilan solishtirish uchun ikkita bitli qo'shimchalar qo'llaniladi. Agar o'yin bo'lsa, dastur g'alaba qozonish tartibini ko'rsatadi, shundan so'ng u yangi o'yinni boshlaydi, durang sharti tekshiriladi: to'qqiz burilish qayd etilgan bo'lsa va hali g'alaba sharti bo'lmasa, o'yin durang bo'ladi. LEDlar o'chadi va yangi o'yin boshlanadi. Bir o'yinchi rejimiga o'tish: Agar kalit yoqilgan bo'lsa, dastur bitta o'yinchi rejimiga o'tadi, birinchi navbatda inson o'yinchisi boshlanadi. Inson o'yinchisining navbatida, dastur tasodifiy hujayrani tanlaydi. Shubhasiz, bu eng aqlli strategiya emas!

8 -qadam: Izohlar va qo'shimcha yaxshilanishlar

Bu erda bitta o'yinchi rejimi ko'rsatiladigan video, unda tasodifiy harakatlar o'ynaladi: bu erda ko'rsatiladigan dastur - bu yalang'och suyaklarning minimal versiyasi. Bu bilan boshqa ko'p ishlarni bajarish mumkin: 1) LEDlarni bir vaqtning o'zida uchta yoqish Joriy kod bir vaqtning o'zida faqat bitta LEDni ko'rsatadi. Biroq, bu erda ko'rsatilgan simlar yordamida, bir vaqtning o'zida bitta katod chizig'iga ulangan barcha LEDlarni yoqish mumkin. Shunday qilib, to'qqizta pozitsiyani aylanib o'tish o'rniga, siz uchta katod chizig'ini aylanib o'tishingiz kifoya. 2) LEDlarni ko'rsatish uchun uzilishlardan foydalaning LED displeyining tartibiga va ishlov berish hajmiga qarab, LEDlar ma'lum darajada ko'rsatishi mumkin. miltillovchi Uzilishlardan foydalanib, LEDlarning vaqtini aniq nazorat qilish mumkin, bu esa displeyning silliqlashiga olib keladi. 3) Aqlli kompyuter o'yinchisi Oqim kodi atigi bir necha kbni egallaydi, bu esa kompyuterni yanada oqilona ishlashini ta'minlaydi. Oyoq barmog'i. Umid qilamanki, men sizga bu ko'rsatmalarni o'qishni yoqtirgandim, chunki men u ustida ishlashdan zavqlandim!

Tavsiya: