Mündəricat:

Arduino və Touchpad Tic Tac Toe: 8 addım (şəkillərlə)
Arduino və Touchpad Tic Tac Toe: 8 addım (şəkillərlə)

Video: Arduino və Touchpad Tic Tac Toe: 8 addım (şəkillərlə)

Video: Arduino və Touchpad Tic Tac Toe: 8 addım (şəkillərlə)
Video: SKR Pro V1.1 - TMC2209 UART with Sensor less Homing 2024, Iyun
Anonim
Arduino və Touchpad Tic Tac Toe
Arduino və Touchpad Tic Tac Toe

Və ya giriş və çıxış multipleksiyasında və bitlərlə işləməkdə bir məşq. Və Arduino yarışması üçün bir təqdimat.

Bu, bir ekran üçün 3x3 rəngli LED -lərdən, sadə müqavimətli toxunma panelindən və hər şeyi bir araya gətirmək üçün Arduino -dan istifadə edərək tik tac toe oyununun tətbiqidir. Necə işlədiyini görmək üçün videoya baxın: Bu layihə üçün nə lazımdır: Parçalar və istehlak materialları Bir mükəmməl lövhə (və ya şerit lövhə) Doqquz rəngli LED, ümumi katot Doqquz eyni rezistor, 100-220 ohm aralığında Altı eyni rezistor 10kohm - 500kohm diapazonu Bir tək dirək, ikiqat atma açarı Bir dəstə başlıq sancağı Bir dəstə elektrik teli Bir kiçik kvadrat şəffaf akril, ~ 1 mm qalınlığında, yan tərəfdə 8 sm Şəffaf yapışan bant Heatshrinks (isteğe bağlı) Yuxarıda göstərilənlərin hamısı Alətlər Bir Arduino qurğusu (Arduino Duemilanove, Arduino IDE, kompüter, USB kabeli) Adi alətlər (multimetr, lehim lehim tüfəngi, tel kəsicilər, tel kəsici) Arduino ilə əlaqəli hər şey ola bilər. https://www.arduino.cc saytında tapıldı. Quruluşa davam edin!

Addım 1: LED matrisinin bağlanması

LED matrisinin bağlanması
LED matrisinin bağlanması
LED matrisinin bağlanması
LED matrisinin bağlanması

Bir LEDin yanması üçün hər iki ucu bağlanmalıdır. 18 LED -in hər birinə bir cüt sancaq (9 qırmızı, 9 yaşıl) həsr etsək, Arduinonun pinləri tez tükənərdi. Bununla birlikdə, multipleksləmə ilə bütün LED -lərə yalnız 9 pinlə müraciət edə biləcəyik! LED -lər üç sütundan, katotları isə altıdan ibarət cərgələrdə qruplaşdırılır. Xüsusi bir anod xətti yüksək, müəyyən bir katot xətti aşağı olmaqla və bütün digər anod və katod xətlərində yüksək bir empedansa malik olaraq İstədiyiniz LED -in yandırılmasını seçin, çünki cərəyanın keçə biləcəyi yalnız bir yol var, məsələn, ikinci rəqəmdə yaşıl anodu 1 xəttin hündürlüyünə və katotun 1 xəttini aşağıya qoyaraq sol alt yaşıl LED yanır.. Bu vəziyyətdə cari yol mavi rəngdədir, amma fərqli xətlərdə birdən çox LED yandırmaq istəyirsinizsə nə etməli? Buna nail olmaq üçün görmə əzmindən istifadə edəcəyik. Çox sürətli LED xətləri seçərək, bütün seçilmiş LED -lərin eyni anda yandığını xəyal edir.

Addım 2: LED Matrix Layout

LED Matrix Layout
LED Matrix Layout
LED Matrix Layout
LED Matrix Layout

Aşağıdakı dövrə diaqramı, LED-lərin fiziki olaraq necə bağlandığını göstərir (G1-G9: yaşıl LEDlər, R1-R9: qırmızı LEDlər). Bu diaqram tək qırmızı və yaşıl LED -lər üçündür, əgər ikiqat rəngli ümumi katot qırmızı/yaşıl LED -lərdən istifadə edirsinizsə, qırmızı/yaşıl cütlükdə tel bağlamalı olduğunuz yalnız bir katod ayağı var. Qırmızı və yaşıl anod xətləri PWM pinlərinə daxil olur Arduino (Duemilanove üzərindəki sancaqlar 3, 5, 6, 9, 10, 11), beləliklə daha sonra solma kimi effektlərə sahib ola bilərik. Katod xətləri 4, 7 və 8. pinlərə daxil olur. Hər bir katot və anod xətlərinin qorunması üçün 100 ohm rezistorları vardır.

Addım 3: LED matrisinə müraciət edin

Tic tac barmaq kodu üçün LEDlər haqqında aşağıdakı məlumatları saxlaya bilməli olacağıq: - bir LED yanar və ya yanmaz - yanarsa, qırmızı və ya yaşıl olsun Bunu etmənin bir yolu vəziyyəti saxlamaqdır. vəziyyəti bildirmək üçün üç rəqəmdən istifadə edərək 9 hüceyrəli bir sıra (0 = söndürülmüş, 1 = qırmızı açıq, 2 = yaşıl açıq). Hər dəfə LED -in vəziyyətini yoxlamalıyıq, məsələn, bir qazanma şərtinin olub olmadığını yoxlamaq üçün, sıra boyunca dövr etməliyik. Bu tətbiq oluna bilən bir üsuldur, əksinə çaşqındır. Daha rasional bir üsul doqquz bitdən ibarət iki qrupdan istifadə etmək olar. Doqquz bitdən ibarət birinci qrup LED-lərin açılma vəziyyətini, doqquz bitdən ibarət ikinci qrup isə rəngi saxlayır. Sonra, LED vəziyyətlərini manipulyasiya etmək sadəcə bir qədər arifmetik və dəyişmə məsələsinə çevrilir. İşdə işləyən bir nümunə. Gəlin tic tac barmağımızı qrafik olaraq çəkdiyimizi və əvvəlcə açma vəziyyətini təmsil etmək üçün 1s və 0s istifadə edin (1 açıq, 0 söndürülmüş): 000 000 = sol alt LED yanan matris 100 100 010 = diaqonallı matris LEDlər 001 yandı Əgər hüceyrələri sol altdan saysaq, yuxarıdakı təsvirləri bir sıra bit olaraq yaza bilərik. Birinci halda, bu 100000000 olardı, ikinci halda isə 001010100 olardı. Bunları ikili təsvirlər olaraq düşünsək, hər bir bit seriyası tək bir ədədə (ilk halda 256, 84 ikinci halda). Matrisin vəziyyətini saxlamaq üçün bir sıra istifadə etmək əvəzinə, yalnız bir ədəd istifadə edə bilərik! Eynilə, LED -in rəngini eyni şəkildə təmsil edə bilərik (1 qırmızı, 0 yaşıl). Əvvəlcə bütün LED-lərin yandığını düşünək (buna görə açma vəziyyəti 511 ilə təmsil olunur). Aşağıdakı matris daha sonra LED -lərin rəng vəziyyətini təmsil edəcək: 010 yaşıl, qırmızı, yaşıl 101 qırmızı, yaşıl, qırmızı 010 yaşıl, qırmızı, yaşıl İndi, LED matrisi göstərilərkən, hər biti keçmək lazımdır, əvvəl açılma vəziyyətində, sonra rəng vəziyyətində. Məsələn, deyək ki, açma vəziyyətimiz 100100100, rəng vəziyyətimiz isə 010101010-dur. LED matrisini işıqlandırmaq üçün alqoritmimiz budur: Addım 1. İkili 1 (yəni bit maskalanma). Addım 2. Doğrudursa, LED yanır. İndi ikili 1 ilə rəng vəziyyətinə bir az əlavə edin. Addım 3. Doğrudursa, qırmızı LED -i yandırın. Yalan olarsa, yaşıl LED -i yandırın. Addım 4. Həm açılma vəziyyətini, həm də rəng vəziyyətini bir az sağa (məsələn, bit dəyişmə) keçin. Addım 5. Doqquz bitin hamısı oxunana qədər 1 - 4 -cü addımları təkrarlayın. Diqqət yetirin ki, matrisi geriyə doldururuq - 9 -cu xanadan başlayırıq, sonra 1 -ci hücrəyə qayıdırıq. Həmçinin, açılma və rəng vəziyyətləri imzalanmış tam ədəd növü əvəzinə işarəsiz bir tamsayı növü (söz) olaraq saxlanılır. Bunun səbəbi budur ki, diqqətli olmasaq, dəyişkənliyin işarəsini təsadüfən dəyişə bilərik. LED matrisini işıqlandırmaq üçün kod əlavə olunur.

Addım 4: Touch Pad qurmaq

Touch Pad qurmaq
Touch Pad qurmaq
Touch Pad qurmaq
Touch Pad qurmaq
Touch Pad qurmaq
Touch Pad qurmaq
Touch Pad qurmaq
Touch Pad qurmaq

Toxunma paneli, LED matrisinin üstünü örtmək üçün kifayət qədər böyük olan nazik akril təbəqədən hazırlanmışdır. Sonra sətir və sütun tellərini akril lövhəyə yapışdırın, şəffaf lentdən istifadə edin. Şəffaf lent də kəsişmələrdə tellər arasındakı izolyasiya ayırıcısı kimi istifadə olunur. Barmaq yağının lentin yapışqan tərəfinə girməsinin qarşısını almaq üçün təmiz vasitələrdən istifadə etməyi unutmayın. Barmaq izi ləkələri nəinki çirkin görünür, həm də lenti daha az yapışqan edir. Hər sətrin bir ucunu kəsin, digər ucunu isə daha uzun bir telə lehimləyin. Konnektorlara lehim etməzdən əvvəl, rezistoru tellərlə birlikdə lehimləyin. Burada istifadə olunan rezistorlar 674k-dır, lakin 10k ilə 1M arasındakı hər hansı bir dəyər yaxşı olmalıdır. Arduino ilə əlaqələr 6 analoqlu pinlə, tel ızgarası sıralarına 14-16 sancaqlar və 17-19 sancaqlar ilə bağlanır. sütunlar.

Addım 5: Touch Pad - Necə Çalışır

Touch Pad - necə işləyir
Touch Pad - necə işləyir
Touch Pad - necə işləyir
Touch Pad - necə işləyir

Minimum sancaqlar olan bir LED matrisi qurmaq üçün bir çarpaz multiplekserdən istifadə etdiyimiz kimi, oxşar bir çarpaz multiplekserdən istifadə edərək bir sensor sensor dəsti qura bilərik ki, bundan sonra LED -ləri aktivləşdirək. Bu toxunma panelinin konsepsiyası sadədir. Əslində bir tel ızgarasıdır, üç çılpaq tel satırda və üç çılpaq tel satırın üstündəki sütunlarda işləyir. Hər kəsişmə nöqtəsində iki telin toxunmasını maneə törədən kiçik bir izolyasiya kvadratı var. Kəsişmə nöqtəsinə toxunan bir barmaq hər iki tellə təmas quracaq və nəticədə iki tel arasında böyük, lakin sonlu bir müqavimət yaranacaq. Kiçik bir cərəyan, ancaq aşkar edilə bilən bir cərəyan barmağınızla bir teldən digərinə keçə bilər. Hansı kəsişmənin basıldığını müəyyən etmək üçün aşağıdakı metoddan istifadə edilmişdir: Addım 1: Bütün sütun sətirlərini Çıxış LOW olaraq təyin edin. Addım 2: Daxili çəkmələr aktiv olaraq satır sətirlərini GİRİŞ olaraq təyin edin. Addım 3: Dəyər verilən həddən aşağı düşənə qədər hər bir sətirdə analoq oxuyun. Addım 4: 1-3-cü addımları təkrarlayın, ancaq indi sütunları giriş, satırları isə çıxış kimi. Səs -küyün təsirini minimuma endirmək üçün bir neçə oxunuş alınır və sonra ortalanır. Ortalama nəticə daha sonra bir eşik ilə müqayisə edilir. Bununla birlikdə, tac barmağı növbə ilə davam etdiyinə görə, bir düyməni oxumaq kifayətdir. Əlaqə toxunma panelinin necə işlədiyini göstərən bir eskizdir. LED matrisində olduğu kimi, hansı kəsişmənin basıldığını göstərmək üçün bitlər istifadə olunur.

Addım 6: Hər şeyi bir yerə yığın

Hər şeyi bir yerə yığmaq
Hər şeyi bir yerə yığmaq

İndi bütün fərdi komponentlər hazır olduqdan sonra, hamısını bir yerə yığmağın vaxtı gəldi. Tel şəbəkə sensoru ilə sinxronizasiya etmək üçün LED matris kodundakı pin nömrələrini yenidən düzəltməyiniz lazım ola bilər. Tel ızgarasını seçdiyiniz bərkidicilərlə və ya yapışdırıcılarla yerində möhkəmləndirin və gözəl bir oyun lövhəsinə yapışdırın. 12 pinlə Arduinonun zəmini arasında keçid əlavə edin. Bu keçid 2 oyunçu rejimi ilə 1 oyunçu rejimi arasında keçid etməkdir (mikro nəzarətçiyə qarşı).

Addım 7: Tic Tac Toe proqramlaşdırılması

Oyunun kodu əlavə olunur. İlk olaraq tic tac toe oyununu iki oyunçu rejimində müxtəlif addımlara ayıraq: Addım 1: Oyunçu A kəsişməyə toxunaraq doldurulmamış bir hüceyrə seçir. Addım 2: Bu hüceyrə üçün LED A rəngi ilə yanır. Addım 3: A Oyunçunun qalib olub olmadığını yoxlayın. Addım 4: Oyunçu B doldurulmamış hüceyrəni seçir. Addım 5: Bu hüceyrə üçün LED B rəngi ilə yanır.. Adım 6: B Oyunçusunun qalib olub olmadığını yoxlayın. Addım 7: Qazanma şərti yaranana qədər və ya bütün hüceyrələr doldurulana qədər 1-6-ı təkrarlayın.. Şəbəkə sensoru sıfır olmayan bir dəyəri qeyd etmədiyi müddətcə bu döngə davam edəcək. Bir kəsişmə basıldığında, Basılan dəyişən basılan hüceyrənin mövqeyini saxlayır. Hüceyrənin doldurulmadığını yoxlayın: Bir mövqe oxunuşu əldə edildikdə (dəyişən Basıldı), mövcud hüceyrə vəziyyəti ilə müqayisə olunur (GridOnOff dəyişənində saxlanılır) bir az əlavə etməklə. Sıxılmış hüceyrə doldurulmamışdırsa, LED -i yandırmağa davam edin, əks halda hüceyrələri oxumağa qayıdın. Bir hüceyrə seçildikdə seçilən LED rəngi, hər dəfə bir hüceyrə seçiləndə dəyişən bu dəyişən tərəfindən müəyyən edilir. Qazanma vəziyyətinin yoxlanılması: Yalnız 8 mümkün qazanma şərti var və bunlar bir sıra söz dəyişənləri olaraq saxlanılır (winArray). Oyunçunun doldurulmuş hüceyrə mövqelərini qazanma şərtləri ilə müqayisə etmək üçün iki bitli əlavə istifadə olunur. Bir matç varsa, o zaman proqram yeni bir oyuna başladıqdan sonra qalibiyyət proqramını göstərir. Püşk şərtinin yoxlanılması: Doqquz dönüş qeydə alındıqda və hələ də heç bir qalibiyyət şərti yoxdursa, oyun heç -heçədir. LEDlər sönür və yeni bir oyun başlayır. Bir oyunçu rejiminə keçid: Açar açıq vəziyyətdədirsə, proqram bir oyunçu rejiminə keçir, insan oyunçusu əvvəlcə başlayır. İnsan oyunçusunun növbəsinin sonunda, proqram sadəcə təsadüfi bir hüceyrə seçir. Aydındır ki, bu ən ağıllı strategiya deyil!

Addım 8: Qeydlər və Əlavə Təkmilləşdirmələr

Burada bir oyunçu rejimini göstərən, tamamilə təsadüfi hərəkətlər edən bir video: Burada göstərilən proqram yalnız minimal, çılpaq sümüklər versiyasıdır. Bununla bir çox başqa işlər görülə bilər: 1) LEDləri bir anda üç dəfə yandırmaq Mövcud kod eyni anda yalnız bir LED göstərir. Ancaq burada göstərilən naqillərlə eyni anda bir katot xəttinə qoşulmuş bütün LED -ləri yandırmaq mümkündür. Beləliklə, bütün doqquz mövqedə velosiped sürmək əvəzinə, etməniz lazım olan şey, üç katod xətti boyunca keçməkdir. 2) LEDləri göstərmək üçün fasilələrdən istifadə edin LED göstərmə rejimindən və işlənmə miqdarından asılı olaraq, LEDlər müəyyən dərəcədə titrəmək. Fasilələrdən istifadə edərək, LED -lərin vaxtı dəqiq şəkildə idarə oluna bilər və daha hamar bir ekrana səbəb olardı. 3) Daha ağıllı bir kompüter oyunçusu Cərəyan kodu yalnız bir neçə kb -ı tutur və daha ağıllı bir kompüter tic tacının tətbiqi üçün bir az daha çox şey buraxır. ayaq pleyeri. Ümid edirəm ki, bu təlimatı oxumaqdan zövq aldım, üzərində işləyərkən çox əyləndim!

Tövsiyə: