Агуулгын хүснэгт:

Arduino болон Touchpad Tic Tac Toe: 8 алхам (зурагтай)
Arduino болон Touchpad Tic Tac Toe: 8 алхам (зурагтай)

Видео: Arduino болон Touchpad Tic Tac Toe: 8 алхам (зурагтай)

Видео: Arduino болон Touchpad Tic Tac Toe: 8 алхам (зурагтай)
Видео: Live coding C - On continue l'interface utilisateur de la smartwatch 2024, Арваннэгдүгээр
Anonim
Arduino ба Touchpad Tic Tac Toe
Arduino ба Touchpad Tic Tac Toe

Эсвэл оролт, гаралтын мултиплекс хийх, битүүдтэй ажиллах дасгал. Мөн Arduino тэмцээнд оролцох өргөдөл.

Энэ бол дэлгэцэн дээр 3х3 хэмжээтэй хоёр өнгийн LED, энгийн эсэргүүцэх мэдрэгчтэй самбар, Arduino ашиглан бүх зүйлийг хооронд нь уях зорилгоор хийдэг tac toe тоглоомын хэрэгжилт юм. Энэ нь хэрхэн ажилладагийг үзэхийн тулд видеог үзнэ үү: Энэхүү төсөлд юу шаардлагатай вэ: Сэлбэг хэрэгсэл ба хэрэглээний материал Нэг ширхэг самбар (эсвэл туузан хавтан) Есөн давхар өнгийн LED, нийтлэг катод Есөн ижил резистор, 100-220 ом-ийн зургаа ижил эсэргүүцэлтэй. 10kohm - 500kohm хүрээ Нэг дан шон, хоёр шидэлт унтраалга Толгойн зүү Бөөн цахилгаан утас Нэг тунгалаг нийлэг, ~ 1 мм зузаантай, хажуу талдаа 8 см тунгалаг наалдамхай тууз Heatshrinks (заавал биш) Дээрх бүгд байна. Нийт өртөг нь $ 20 доллараас хэтрэхгүй байх ёстой. Нэг хэрэгсэл нь Arduino тохиргоо (Arduino Duemilanove, Arduino IDE, компьютер, USB кабель) Ердийн цахилгаан хэрэгсэл (мультиметр, гагнуурын буу, утас таслагч, утас таслагч) Arduino -той холбоотой бүх зүйл байж болно. https://www.arduino.cc дээрээс олж болно. Бүтээлээ үргэлжлүүлээрэй!

Алхам 1: LED матрицыг холбох

LED матрицыг холбох
LED матрицыг холбох
LED матрицыг холбох
LED матрицыг холбох

LED гэрэл асахын тулд түүний хоёр хоёуланг нь холбох ёстой. Хэрэв бид 18 LED (9 улаан, 9 ногоон) тус бүрт хос тээглүүр зориулах юм бол Arduino -ийн зүү хурдан дуусах болно. Гэсэн хэдий ч мультиплекс хийснээр бид бүх LED -ийг ердөө 9 тээглүүрээр шийдвэрлэх боломжтой болно. Үүнийг хийхийн тулд LED -ийг хөндлөвч хэлбэрээр холбосон болно. LED -ийг гурваар нь багана болгон, катодуудыг нь зургаагаар эгнээнд бүлэглэв. Анодын тодорхой шугамыг өндөр, катодын шугамыг бага болгож, бусад бүх анод ба катодын шугамд өндөр эсэргүүцэл үзүүлснээр бид Одоогийн авч болох ганц боломжит зам байгаа тул аль LED -ийг асаахыг сонгоно уу, жишээлбэл, хоёр дахь зурагт ногоон анод 1 шугамыг өндөр, катод 1 шугамыг доод талд, зүүн доод ногоон LED асна. Энэ тохиолдолд одоогийн замыг цэнхэр өнгөөр харуулав, гэхдээ та өөр өөр шугам дээр нэгээс олон LED асаахыг хүсвэл яах вэ? Үүнд хүрэхийн тулд бид алсын харааг тууштай ашиглах болно. Хос LED шугамыг маш хурдан сонгосноор сонгосон бүх LED нэгэн зэрэг асдаг гэсэн ойлголтыг өгдөг.

Алхам 2: LED матрицын зохион байгуулалт

LED матрицын зохион байгуулалт
LED матрицын зохион байгуулалт
LED матрицын зохион байгуулалт
LED матрицын зохион байгуулалт

Доорх хэлхээний диаграм нь LED-ийг хэрхэн холбосон болохыг харуулж байна (G1-G9: ногоон LED, R1-R9: улаан LED). Энэ диаграм нь нэг улаан, ногоон LED -д зориулагдсан бөгөөд хэрэв та хоёр өнгийн ердийн катодын улаан/ногоон LED ашиглаж байгаа бол улаан/ногоон хос тутамд нэг л катодын хөл байх ёстой. Arduino -ийн (Duemilanove дээрх 3, 5, 6, 9, 10, 11 зүү), ингэснээр бид дараа нь бүдгэрэх гэх мэт эффект авчрах болно. Катодын шугамууд нь 4, 7, 8. тээглүүрт ордог. Катод ба анодын шугам бүр 100 ом эсэргүүцэлтэй байдаг.

Алхам 3: LED матриц руу хандах

Tac toe кодын хувьд бид LED -ийн талаархи дараах мэдээллийг хадгалах чадвартай байх ёстой: 9 эсийн массивт мужийг илэрхийлэх гурван цифрийг ашиглана (0 = унтраах, 1 = улаан асаах, 2 = ногоон асаах). Бид LED -ийн төлөв байдлыг шалгаж байх хэрэгтэй, жишээлбэл, ялалтын нөхцөл байгаа эсэхийг шалгахын тулд массивыг тойрох шаардлагатай болно. Энэ бол ажиллахад тохиромжтой, гэхдээ нэлээд эвгүй арга юм. Илүү оновчтой арга бол есөн битийн хоёр бүлгийг ашиглах явдал юм. Есөн битийн эхний бүлэг нь LED-ийн асаах статусыг хадгалдаг бол есөн битийн хоёр дахь бүлэг нь өнгийг хадгалдаг. Дараа нь LED төлөвийг удирдах нь зүгээр л арифметик болон шилжих асуудал юм. Энд ажилласан жишээ байна. Бид tac toe сүлжээгээ графикаар зурж, эхлээд 1 ба 0-ийг ашиглан асаах горимыг (1 асаалттай, 0 унтраалттай) илэрхийлнэ: 000 000 = зүүн доод LED ассан матриц 100 100 010 = диагональтай матриц LED -ууд 001 асдаг Хэрэв бид нүднүүдийг зүүн доод талаас нь тоолж үзвэл бид дээрх дүрслэлүүдийг цуврал бит хэлбэрээр бичиж болно. Эхний тохиолдолд энэ нь 100000000, хоёр дахь тохиолдолд 001010100 байх болно. Хэрэв бид эдгээрийг хоёртын дүрслэл гэж үзвэл битийн цуврал бүрийг нэг тоогоор нэгтгэж болно (эхний тохиолдолд 256, 84 хоёр дахь тохиолдолд). Матрицын төлөв байдлыг хадгалахын тулд массив ашиглахын оронд бид ганц тоог ашиглаж болно! Үүний нэгэн адил бид LED -ийн өнгийг ижил аргаар илэрхийлж болно (1 нь улаан, 0 нь ногоон). Эхлээд бүх LED асдаг гэж үзье (ингэснээр асаах статусыг 511-ээр илэрхийлнэ). Доорх матриц нь LED -ийн өнгөний төлөв байдлыг илэрхийлнэ: 010 ногоон, улаан, ногоон 101 улаан, ногоон, улаан 010 ногоон, улаан, ногоон Одоо LED матрицыг харуулахдаа бид бит бүрийг тойрч гарах ёстой. эхлээд асаах горимд, дараа нь өнгөний төлөвт. Жишээлбэл, манай асаах төлөв нь 100100100, өнгөний төлөв нь 010101010 байна. Энд LED матрицыг гэрэлтүүлэх бидний алгоритм байна: Алхам 1. Хоёртын 1 (өөрөөр хэлбэл бит маск хийх). Алхам 2. Хэрэв энэ үнэн бол LED асдаг. Өнгөний төлөвийг хоёртын хувилбараар битээр нэмээрэй. Алхам 3. Хэрэв энэ үнэн бол улаан LED -ийг асаана уу. Хэрэв энэ нь худлаа бол ногоон өнгийн LED гэрлийг асаагаарай. Алхам 4. Нэг унтраах байдал ба өнгөний төлөвийг хоёуланг нь баруун тийш (өөрөөр хэлбэл бит шилжүүлэх) шилжүүлэх. Алхам 5. Бүх есөн битийг унших хүртэл 1 - 4 -р алхамуудыг давтана. Бид матрицыг буцааж бөглөж байгааг анхаарна уу - бид 9 -р нүднээс эхэлж, дараа нь 1 -р нүд рүү буцаж орно. Мөн идэвхжүүлэлт ба өнгөний төлөвүүд нь гарын үсэг зурсан бүхэл тоон хэлбэрийн оронд тэмдэггүй бүхэл тоон төрөл (үг) хэлбэрээр хадгалагддаг. Учир нь жаахан шилжихдээ болгоомжтой байхгүй бол хувьсагчийн тэмдгийг санамсаргүйгээр өөрчилж магадгүй юм. LED матрицыг гэрэлтүүлэх кодыг хавсаргав.

Алхам 4: Мэдрэгч самбарыг бүтээх

Мэдрэгч самбарыг бүтээх
Мэдрэгч самбарыг бүтээх
Мэдрэгч самбарыг бүтээх
Мэдрэгч самбарыг бүтээх
Мэдрэгч самбарыг бүтээх
Мэдрэгч самбарыг бүтээх
Мэдрэгч самбарыг бүтээх
Мэдрэгч самбарыг бүтээх

Мэдрэгч самбар нь LED матрицыг бүрхэх хангалттай том нимгэн нийлэг хуудаснаас бүтээгдсэн. Дараа нь эгнээний баганын утсыг нийлэг хуудсан дээр наалдуулж, тунгалаг туузаар наа. Ил тод соронзон хальс нь утас хоорондын тусгаарлагч тусгаарлагч болгон ашиглагддаг бөгөөд хурууны өөхийг соронзон хальсны наалдамхай тал руу орохоос урьдчилан сэргийлэхийн тулд цэвэр хэрэгсэл ашиглахаа мартуузай. Хурууны хээний толбо нь муухай харагдахаас гадна соронзон хальсыг наалдахгүй болгож, мөр бүрийн нэг төгсгөлийг хайчилж, нөгөө үзүүрийг урт утсаар гагнана. Холбогч дээр гагнахаасаа өмнө резисторыг утастай холбоно. Энд ашигладаг резисторууд нь 674k боловч 10k ба 1M-ийн хоорондох утга нь сайн байх ёстой. Arduino-тай холбогдохын тулд 6 аналог 6-р зүү ашиглан 14-16-р голтой утсан сүлжээнд холбосон ба 17-19-р тээглүүрийг холбоно. багана.

Алхам 5: Touch Pad - Энэ нь хэрхэн ажилладаг талаар

Touch Pad - Энэ нь хэрхэн ажилладаг
Touch Pad - Энэ нь хэрхэн ажилладаг
Touch Pad - Энэ нь хэрхэн ажилладаг
Touch Pad - Энэ нь хэрхэн ажилладаг

Хамгийн бага голтой LED матрицыг тохируулахын тулд бид хөндлөвч мультиплексор ашигласан шиг, ижил төстэй хөндлөвч мультиплексор ашиглан мэдрэгч мэдрэгчийг бий болгож, дараа нь LED -ийг идэвхжүүлэх боломжтой болно. Энэхүү мэдрэгчтэй дэвсгэрийн тухай ойлголт нь маш энгийн. Энэ нь үндсэндээ утсан сүлжээ бөгөөд гурван нүцгэн утас эгнээгээр, гурван нүцгэн утас нь эгнээнээс дээш багананд гүйдэг. Уулзвар цэг бүрт хоёр утас хүрэхээс сэргийлдэг жижиг дөрвөлжин тусгаарлагчтай. Уулзвар дээр хүрэх хуруу нь хоёр утастай холбоо барих бөгөөд ингэснээр хоёр утасны хооронд асар том боловч хязгаарлагдмал эсэргүүцэл үүснэ. Жижиг гүйдэлтэй боловч илрэх боломжтой гүйдлийг нэг утаснаас нөгөө утас руу хуруугаараа дамжуулж болно. Аль уулзвар дээр дарагдсан болохыг тодорхойлохын тулд дараах аргыг ашигласан: Алхам 1: Баганын бүх мөрийг OUTPUT LOW болгож тохируулна уу. Алхам 2: Мөрүүдийн мөрийг INPUT болгон тохируулж, дотоод таталтыг идэвхжүүлнэ. 3 -р алхам: Өгөгдсөн босго хэмжээнээс доош унах хүртэл мөр бүр дээр аналог уншина уу. Алхам 4: 1-3-р алхамуудыг давтана, гэхдээ одоо багануудыг оролт, мөрүүдийг гаралт болгоно. Энэ нь дарагдсан огтлолцол аль багана болохыг хэлж өгдөг бөгөөд дуу чимээний нөлөөг багасгахын тулд хэд хэдэн уншилтыг аваад дараа нь дунджаар тооцдог. Дундаж үр дүнг босготой харьцуулж үзнэ. Энэ арга нь босгыг л шалгадаг тул нэгэн зэрэг даралтыг илрүүлэхэд тохиромжгүй болно. Гэсэн хэдий ч, tac toe нь ээлжлэн явагддаг тул нэг товчлуурыг уншихад л хангалттай бөгөөд touchpad хэрхэн ажилладагийг харуулсан ноорог зургийг LED матрицын нэгэн адил аль огтлолцол дээр дарагдсан болохыг харуулсан болно.

Алхам 6: Бүх зүйлийг нэгтгэх

Бүх зүйлийг хамтад нь хийх
Бүх зүйлийг хамтад нь хийх

Одоо бүх бие даасан бүрэлдэхүүн хэсгүүдийг хийж дууссаны дараа тэдгээрийг нэгтгэх цаг болжээ. LED матриц дээр утсан сүлжээг давхарлах. Утасны сүлжээний мэдрэгчтэй синхрончлохын тулд та LED матрицын кодын зүү дугаарыг өөрчлөх шаардлагатай байж магадгүй юм. Утасны сүлжээг өөрийн хүссэн бэхэлгээ эсвэл цавуугаар бэхлээд, сайн тоглох самбар дээр наалдана уу. Энэ унтраалга нь 2 тоглуулагчийн горим ба 1 тоглогчийн горим (микроконтроллерын эсрэг) хооронд шилжих ёстой.

Алхам 7: Tic Tac Toe програмчлах

Тоглоомын кодыг хавсаргасан болно. Эхлээд tic tac toe тоглоомыг хоёр тоглогчийн горимд янз бүрийн алхамаар задалж үзье: Алхам 1: А тоглогч огтлолцол дээр хүрч бөглөөгүй нүдийг сонгоно. Алхам 2: Тухайн үүрний LED нь А өнгөөр асдаг. 3 -р алхам: А тоглогч ялсан эсэхийг шалгана уу. 4 -р алхам: В тоглогч бөглөөгүй эсийг сонгоно. 5 -р алхам: Тухайн үүрний LED нь B өнгөөр асна. Алхам 6: В тоглогч ялсан эсэхийг шалгаарай. 7-р алхам: 1-6-ийг ялах нөхцөл болтол эсвэл бүх нүд бөглөх хүртэл давтана.. Сүлжээний мэдрэгч тэг биш утгыг бүртгээгүй л бол энэ давталт үргэлжлэх болно. Уулзварыг дарах үед дарагдсан нүдний байрлалыг дардаг. Нүд дүүрээгүй эсэхийг шалгах: Байршлын уншилт авах үед (дарагдсан хувьсагч) тухайн нүдний одоогийн төлөвтэй харьцуулагддаг (GridOnOff хувьсагчид хадгалагддаг) битийн нэмэлтийг ашиглан. Хэрэв дарагдсан нүдийг бөглөөгүй бол LED -ийг асааж, эсүүдийг уншихаар буцаана уу. Нүдийг сонгох үед сонгосон LED өнгийг энэ хувьсагч тодорхойлдог бөгөөд энэ нь нүдийг сонгох бүрт ээлжлэн солигддог. Ялалтын нөхцлийг шалгах: Зөвхөн 8 боломжит ялалтын нөхцөл байдаг бөгөөд эдгээр нь массивт (winArray) үгийн хувьсагч хэлбэрээр хадгалагддаг.). Тоглогчийн үүрний байрлалыг ялалтын нөхцөлтэй харьцуулахын тулд хоёр битийн нэмэлтийг ашигладаг. Хэрэв таарч байвал хөтөлбөр хожих горимыг харуулдаг бөгөөд үүний дараа шинэ тоглоом эхэлнэ. Сугалааны нөхцөлийг шалгах: Есөн эргэлт бүртгэгдсэн бөгөөд хожих нөхцөл байхгүй хэвээр байвал тоглоом тэнцсэн болно. Дараа нь LED нь унтарч, шинэ тоглоом эхэлнэ. Нэг тоглогчийн горимд шилжих: Хэрэв унтраалга асаалттай байгаа бол програм нь нэг тоглуулагчийн горимд шилжиж, хүний тоглогч эхэлнэ. Хүний тоглогчийн ээлжийн төгсгөлд програм нь санамсаргүй нүдийг сонгоно. Мэдээжийн хэрэг, энэ бол хамгийн ухаалаг стратеги биш юм!

Алхам 8: Тэмдэглэл ба цаашдын сайжруулалт

Энд нэг тоглогчийн горимыг харуулсан видео байгаа бөгөөд програм нь огт санамсаргүй байдлаар тоглодог: Энд үзүүлсэн програм нь зөвхөн ясны хамгийн бага хувилбар юм. Үүний тусламжтайгаар өөр олон зүйлийг хийж болно: 1) LED -ийг нэг дор гурван удаа асаах Одоогийн код нь зөвхөн нэг л LED -ийг харуулдаг. Гэсэн хэдий ч энд утсыг харуулснаар нэг катодын шугамд холбогдсон бүх LED -ийг нэгэн зэрэг асаах боломжтой болно. Тиймээс, бүх есөн байрлалаар дугуй унахын оронд гурван катодын шугамыг тойроход л хангалттай. 2) LED -ийг харуулахын тулд тасалдлыг ашигла LED дэлгэцийн горим, боловсруулалтын хэмжээ зэргээс шалтгаалан LED нь тодорхой хэмжээгээр харуулах болно. анивчдаг. Тасалдлыг ашигласнаар LED -ийн цагийг нарийн хянаж, дэлгэцийг жигд болгох болно. 3) Илүү ухаалаг компьютер тоглуулагч Цахилгаан код нь хэдхэн кб эзэлдэг бөгөөд энэ нь илүү ухаалаг компьютерийг ажиллуулахад бага зэрэг үлдэх болно. Хөлийн хуруу тоглогч. Энэ зааварчилгааг унших нь надад маш их таалагдсан гэж найдаж байна.

Зөвлөмж болгож буй: