Mündəricat:

Bir köynəkdə çevik ekran oynayan tennis: 8 addım (şəkillərlə)
Bir köynəkdə çevik ekran oynayan tennis: 8 addım (şəkillərlə)

Video: Bir köynəkdə çevik ekran oynayan tennis: 8 addım (şəkillərlə)

Video: Bir köynəkdə çevik ekran oynayan tennis: 8 addım (şəkillərlə)
Video: Kim nə başa düşdü ❓ 2024, Iyul
Anonim
Bir köynək üzərində çevik ekran oynayan tennis
Bir köynək üzərində çevik ekran oynayan tennis
Bir köynək üzərində çevik ekran oynayan tennis
Bir köynək üzərində çevik ekran oynayan tennis
Bir köynək üzərində çevik ekran oynayan tennis
Bir köynək üzərində çevik ekran oynayan tennis

Bu, 2013 -cü il üçün mənim Halloween kostyumumdur. Təxminən bir ildir ki, işdədir və yaratmaq üçün bir neçə adam saat çəkmişdir. Ekranın ölçüsü 14x15 pikseldir, buna görə də olduqca aşağı qətnamə olsa da hələ də əyləncəli şeylər edə bilər. Zədələnmədən qatlana bilməsə də, fiziki cəhətdən bütün istiqamətlərdə elastikdir. USB vasitəsilə pro meqa ilə birləşdirilmiş tək düymə və sürüşmə qabından ibarət bir nəzarətçi var. Uzun müddət canlı saxlamaq üçün lazımi gərginliyi əldə etmək üçün ardıcıl olaraq bağlanan 2200 mAh həcmli iki dəhşətli batareya və sonra istifadəyə yararlı olması üçün 5 Voltluq tənzimləyici istifadə edir. Bütün elektroniklər köynəyin içərisindəki ciblərə qoyulmuşdur ki, çıxarıla bilsin və köynək yuyulsun. Pong funksional bir oyun oynayır. Əvvəlcə Tom Thumb şriftinin dəyişdirilmiş bir versiyasını istifadə edərək sevimli mavi hərflərlə "PONG PLAY" sözləri ilə bəzəyir (https://robey.lag.net/2010/01/23/tiny-monospace-font.html). Beş saniyədən sonra düyməni basmaq və ya düyməni basmamaq və yaxşı bir təcrübə buraxmaq seçimi verilə bilər. Düyməni basmağı seçəndə oyun başlayır. Sağdakı qırmızı kürək, kompüter kürəyidir və sağdakı yaşıl kürək, yuxarı və aşağı hərəkət etmək üçün sürüşmə qabı tərəfindən idarə olunan oyunçu kürəyidir. Hər tərəf bir xal qazanmağa çalışarkən top ətrafa sıçrayır. Oyunçu topu sürətləndirmək üçün avarının kənarı ilə vura bilər (gözəl bir xüsusiyyət), kompüter bunu edə bilmir və bunun əvəzinə topdan bir qədər yavaş hərəkət edərək ilişib qalır. Bir nöqtə vurulduqda, qol vuran tərəflərdə bir piksel ağa çevrilir. Altdan ikili sayılır. yaşıl və ya qırmızı sıfır, ağ 1 olduğu 21. qazanmaq üçün hesab (və ya kimin 21 xal almaq asılı olaraq itirmək) və belə oyunçu avar 10101 oxuyur zaman, "SİZ QALDI" mətni göstərilir. Yenidən dəyişdirilmiş Tom Thumb -da. Eyni şey olur, ancaq "SİZ İDİRİRSİNİZ" əvəzinə göstərilir. Qələbə və ya məğlubiyyətdən sonra oyun Pong Play -dən dərhal sonra yenidən başlayacaq. Tamamilə yenidən başlatmaq üçün "Sehrli Qutunun" ekranı istisna olmaqla bütün elektronikası olan qutusu olaraq yenidən başladın.

Addım 1: Materiallar və Alətlər

Alətlər və materiallar
Alətlər və materiallar
Alətlər və materiallar
Alətlər və materiallar

* İlə işarələnmiş şeylər isteğe bağlıdır, lakin tövsiyə olunur və buna görə də müəyyən bir qaydada deyil … Materiallar: 4 metrlik Adafruit Neopixle metr başına 60 piksel 1 köynək * 1 cüt asma 1/2 yard parça kifayət qədər olacaq (Qeyri dartıcı toxunuşa üstünlük verilir) 6 ayaqlı USB-dən kişiyə USB-yə kişi kabel 1 USB-dişi bir qadın konnektoru 3 2 pinli JST dişi konnektorlar 4 2 pinli JST kişi telləri batareya şarj cihazı 2 6600 mAh batareyalar 1 Arcade üslubunda düymə 1 arduino pro-mega 1 FTDI başlığı 1 kəsmə lövhəsi olan 1 USB B qadın konnektoru 1 açma/söndürmə açarı (keçid) 1 sıfırlama açarı (keçid və ya ani) 1 sürüşmə potensiometr *1 sürüşmə qazan düyməsi 1 yüksək amperli bağlayıcı cütü *1 proyekt qutusu 1 5V 3+ amper gərginlik tənzimləyicisi kiçik bir az plastik bəzi lehim bəzi tel bəzi iplik *bir az isti yapışqan *bir qədər elastik bir müddət (bəlkə də "bəzilərindən" bir az çox) bəzi əzmkarlıq (yəqin ki, bunun bir az ehtiyacına ehtiyacınız olacaq) bəzi istilik büzücü borular və ya elektrik lenti bəzi super yapışqan dəstəyi bəzi dəmir Alətlər *Yardım Əlləri Normal Əl s (və ya onlara daxil olan kimsə) Lehimləmə Dəmiri *İsti Yapışqan Tabancası Dremel və ya Zımpara Çisel Tel Soyucular Tel Kəsicilər Zımba Tabancası Vida Sürücü Testerə Sancaqları Tikiş Maşını Kumaş Qayçı

Addım 2: LED şeridini kiçik zolaqlara kəsin

LED şeridini kiçik zolaqlara kəsin
LED şeridini kiçik zolaqlara kəsin
LED şeridini kiçik zolaqlara kəsin
LED şeridini kiçik zolaqlara kəsin
LED şeridini kiçik zolaqlara kəsin
LED şeridini kiçik zolaqlara kəsin

İstədiyiniz kəsici qabdan istifadə edin və zolağı hər biri 15 piksel uzunluğunda olan 14 seqmentə kəsin. Yalnız "DO" "DIN" "+5V" və "GND" kimi bir şey yazılmış mis izləri arasında kəsin. Əgər artıq mis üzərində lehimlənmişsə, dərhal kəsin. Açıq misdən çox kəsməməyə çalışın, ancaq bir az ləkələsəniz yaxşı olar. 14 zolağın hamısı kəsildikdən sonra, zolaqları lehimləmək üçün yoldan çıxarmaq üçün hər tərəfdən bir az rezin kəsin.

Addım 3: Ekranı Birlikdə Lehimləmək

Ekranı Birlikdə Lehimləmək
Ekranı Birlikdə Lehimləmək
Ekranı Birlikdə Lehimləmək
Ekranı Birlikdə Lehimləmək
Ekranı Birlikdə Lehimləmək
Ekranı Birlikdə Lehimləmək

Teli götürün və təxminən 3,5 düym (9 sm) seqmentlərə kəsin. Mənim vəziyyətimdə, lehimləmə zamanı düz tutmağı asanlaşdırmaq üçün üç fərqli rəngim var, amma bir rəng yaxşı işləyəcək. Bu kiçik oğlanlardan təxminən 40 -a ehtiyacınız olacaq, ancaq hər halda bir cüt kəsin. Telin kəsilməsini bitirdikdən sonra, uclarını soyun və qalaylayın (lehimləmə təcrübəniz varsa, növbəti paraqrafa keçə bilərsiniz), yəni bir az plastik çıxardıqdan sonra hər telin uclarına bir az lehim qoyun. Lehimi qızdırmayın və telə keçməyə çalışmayın, misin altından dəmir lehimləyərək qızdırın və lehimi üstünə qoyun. Səbirli olun və qaynar telin lehim əriməsini gözləyin. Başlamaq üçün lehimləmə dəmirini sərt etmək cazibədardır (səbirsizliyim və hisslərinizi dəqiq bilirəm), amma lehim də yapışmayacaq. Şerit hissələrinin hər bir ucunda açıq mis izləri üçün də eyni şeyi edin. Əgər artıq lehim varsa, narahat olmayın. Şerit üçün daha sonra asanlaşdırmaq üçün kiçik bir höyük qurmaq istəyə bilərsiniz. Şeritlə işləyərkən bunu tez bir zamanda edin və zolağa istilik tətbiq etmək üçün çox vaxt sərf etməməyə çalışın. Lehimi iz üzərində əritmək üçün lazım olanı edin. İlk zolağın sonuna qədər hər bir izə bir tel lehimləyin (İlk zolaq, telləri və bağlayıcısı olanı, açıq ucuna lehimləyin). Zolağa baxsanız, teli lehimlədiyiniz yerdə sona qədər gedən kiçik oxlar görəcəksiniz. Başqa bir zolaq götürün ki, oxlar əks istiqamətə yönəlsin və GND izindən gələn teli digərinin GND izinə, +5V -dən +5V -ə və s. Bunu oxların hər hissədən sonra istiqamətləri dəyişdirdiyinə əmin olaraq təkrarlayın ki, əgər onları təqib etsəniz yuxarı və aşağı ziqzaq verər və sonunda uzun zolağa uzana bilər. Bütün 14 zolaq lehimləndikdən sonra onları LED -in bir ızgara halına gətirməsi üçün düzün və sıraya düzün. Daha sonra zolağa zərər vermədən çıxarıla biləcək bir üsulla onları bir yerdə saxlayın. Scotch tape istifadə etdim. Hər şeyi bir yerdə saxlamaq üçün kifayət qədər yapışqan, lakin qalıq buraxacaq qədər yapışqan deyil. Zımba və ya yapışan bant kimi qalıcı bir şey tövsiyə etmirəm. Hər şey bir yerə yapışdırıldıqdan sonra +5V altındakı şeriddən bir teli dərhal yanındakı telə lehimləyin. Bütün alt hissədə elektrik kranları keçməyincə təkrarlayın. LED xətti irəlilədikcə ekran qaralmır.

Addım 4: Core Electronics -in lehimlənməsi

Core Electronics -in lehimlənməsi
Core Electronics -in lehimlənməsi
Core Electronics -in lehimlənməsi
Core Electronics -in lehimlənməsi
Core Electronics -in lehimlənməsi
Core Electronics -in lehimlənməsi

USB B qırılma lövhəsini (BOB) USB B konnektoruna lehimləyin. Uyğun telləri USB A konnektoruna lehimləyin. Bu veb saytında tapıldığı kimi, konnektorun çıxışına baxmağı məsləhət görürəm, https://image.pinout.net/pinout_USB_files/pc_usb_connectors_pinout.png. USB A konnektorunda tellərin digər uclarını harada lehimləmək barədə narahat olmayın; bu nəzarətçi addımında əhatə olunacaq. Məlumat bağlayıcısını kişi bağlayıcısından deyil, dişi konnektordan kəsin (Dişi bağlayıcı digər ucundan alınmışdır). Kişi JST konnektorlarını batareyanın uclarına lehimləyin ki, qırmızı qırmızıya, qara qara olsun. Açıq tellər üzərində istilik büzücü boruları əridin (lehimdən əvvəl sürüşdürün) ki, qısa olmasın və ya elektrik lenti və ya isti yapışqan kimi başqa bir şey istifadə etməsin. Bütün qadın JST konnektorlarına bəzi telləri lehimləyin. Sancaqların yerindən tərpənməməsi üçün bir kişi ucu taxdığınızdan əmin olun. Qütblərə diqqət yetirin və tellərin kişi bağlayıcıları ilə uyğun olduğundan əmin olun. Lehim telləri bir dəfə yüksək gərginlikli konnektora (ancaq cüt deyil), hər hansı bir rəngin uyğun gəldiyindən və hər hansı bir sürüşmə pininin qarşısını almaq üçün bir -birinə bağlandığından əmin olur. Dişi konnektorunu/tel qurğusunu lehimləyin ki, güc tənzimləyicisinin eşik gərginliyindən keçsin deyə paralel deyil, ardıcıl olaraq bağlanır. Beləliklə, müsbət teli digər qurğunun mənfi telinə lehimləyin, buna görə indi bir lehimsiz müsbət tel və bir mənfi lehimsiz tel var və iki lehimli tel fərqli bağlayıcılara lehimlənir. Mənfi teli götürün və başqa yerdə mənfi telə lehimləmək üçün saxlayın. İndi pozitiv teli götürün və açara lehimləyin Üç və ya daha çox sancaq varsa (və ya "açılmağın" birdən çox yolu) varsa, onu orta pinə lehimləyin. Qeyd edək ki, "Orta pin" fiziki olaraq ortada olmaya bilər. Bunu müəyyən etməyin yolu, açar hər hansı bir vəziyyətdə olduqda hər zaman başqa bir pinə bağlanacaq pin tapmaqdır. Heç bir pin belə deyilsə, çox xüsusi bir açarınız var; hər hansı bir pinə bağlayın və açara lehimlənmiş növbəti telin ən az bir vəziyyətdə bu telə bağlanacağından əmin olun. İndi gərginlik tənzimləyicisindəki müsbət giriş telini yuxarıda müzakirə edildiyi kimi keçidin əks ucuna lehimləyin. Pozitiv gərginliyi lehimsiz yüksək cərəyan bağlayıcısının müsbət ucuna lehimləyin. Mənfi giriş telini götürün və yüksək cərəyan bağlayıcısının mənfi ucuna lehimləyin. İndi gücü Arduino və Power zolağına paralel olaraq lehimləyəcəyik. İndi gərginlik tənzimləyicisinin çıxış tellərini götürün və həm müsbət, həm də mənfi tərəflərində iki ədəd tel lehimləyin, beləliklə Y şəklində çıxsın. Led şerit qurğusunun müsbət və mənfi tellərinə iki pinli konnektoru lehimləyin. Hansı növ bağlayıcıdan istifadə etməyinizin əhəmiyyəti yoxdur, bu JST və ya mənim vəziyyətimdə bir güc/audio kabeli və ya bir şey ola bilər (əmin deyiləm və heç bir şəkil olmadığı üçün üzr istəyirəm). Müsbət elektrik tellərindən birini işıq şeridi üçün əks konnektorun müsbət ucuna, mənfi tellərdən birini isə konnektordakı digər pinə lehimləyin. Eyni şeyi bir kişi JST konnektoru/tel qurğusu üçün edin. Şortdan qaçmaq üçün lehim oynaqlarını izolyasiya etməyi unutmayın. İndi USB B konnektoru ilə nə edəcəyimizə keçək. Müsbət teli Arduino Pro Mega üzərindəki 5v çuxura lehimləyin. Torpaq telini götürün və GND çuxuruna lehimləyin. D+ götürün və rəqəmsal pinə (və ya bu halda çuxura) 40. Lehim D- analog pin 15-ə qədər, LED şeritli kişi konnektoru ilə birləşən dişi konnektorun məlumat ucunu 6-cı pinə və torpaq telini bir GND pininə bağlayın. Maskeleme və ya skotç lenti, telləri lövhəyə yapışdırmaq üçün əla işləyir, belə ki, lehimləmək üçün çevrildikdə yıxılmırlar. İndi bir anlıq düyməni götürün və bir ucunu VCC pininə (və ya hər hansı bir gərginlik çıxış pininə) və digər ucunu RESET pininə lehimləyin.

Addım 5: Nəzarətçi

Nəzarətçi
Nəzarətçi
Nəzarətçi
Nəzarətçi
Nəzarətçi
Nəzarətçi

Birincisi, başlamaq üçün düzgün forma seçməkdir. Hamısı nəzarətçinin necə qurulmasını istəməyinizdən asılıdır. Daha çox düz bir nəzarətçi istədim, buna görə 3 1/2 "3/4" taxtadan bir parça aldım. hissələri işləmək üçün uyğun və rahat görünən bir şəkildə təşkil edin. Bütün parçaların getməli olduğu yerləri çəkmək üçün fransız əyrisi, pusula, üçbucaq və düz kənar istifadə edin. Seçdiyiniz kəsici alətdən istifadə edərək əsas konturu kəsin. Bir qadağan mişarı ən yaxşı olardı, amma yaxşı işləyən bir mübarizə mişarı istifadə etdim. Hamar keçid etmək üçün kənarlarını zımpara edin, sonra daha rahat etmək üçün küncləri zımpara edin. Şalter üçün çuxur qazın, sonra altından uyğunlaşdıracaq hissəni qum, kəsik və/və ya Dremel ilə çıxarın. Üstü ilə heç bir şey etməməyə çalışın və içəri girməsi üçün bükərək, açaraq və ya başqa bir şeylə uyğunlaşdıra biləcəyiniz şeyi zımpara edin. İçəri girəndən sonra plastik qoz ilə bərkidin. keçid Potansiyometr düyməsinin daxil olması üçün bir yer qazın və bir yerə çırpın ki, batırılsın və hər tərəfə sığsın. Bir vida tuta bilməsi üçün bəzi deliklər qazın. USB A konnektorunun kiçik hissələrini bükün ki, bu da ümumi genişliyi bir qədər artırsın (şəkillərə baxın). Konnektorun uyğun olduğunu yoxlamaq üçün tədricən yoxlayaraq bağlayıcı üçün bir hissə kəsin. Konnektoru yuvasına super yapışdırın. Kiçik bir plastik parçası götürün və bağlayıcıya uyğun olacaq bir şəkil kəsin (şəkillərə baxın) və sonra taxtaya zımbalanın. Qarşınıza çıxa biləcək parçaları kəsin. Potansiyometr daxil edin və düyməni bağlayın. Müsbət teli potansiyometrenin uclarından birinə (dəyişən hissəyə deyil) və mənfi teli əks ucuna lehimləyin. D-pinini qazandakı dəyişən pinə lehimləyin. Müsbət tel ilə qazandakı pimdən bir düyməni düymənin pinlərindən birinə lehimləyin. Lehim D+ düymənin digər pininə. Ehtiyat teli kəsin və lazım olan parçaları izolyasiya edin.

Addım 6: Köynək

Köynək
Köynək
Köynək
Köynək
Köynək
Köynək

İşığı keçirəcək rahat bir köynək tapın. Bu əsas ağ köynəyi seçdim. İşığın içəridən parıldadığı göründüyü müddətcə rəngin və üslubun əhəmiyyəti yoxdur. Ancaq ön tərəfdəki qrafikləri məsləhət görmürəm. Harada istədiyinizə qərar verməyinizə kömək etmək üçün köynəyin üzərinə hər şeyi qoyun və üzərinə çəkmək üçün silinə bilən işarələmə vasitəsi istifadə edin. Mənim (tanıdığım bəzi insanları nəzərdə tuturam) asanlıqla yuyulan parçaları işarələmək üçün hazırlanmış bir qələm var. Batareyaların, nəzarətçi qutusunun və ekranın ölçüsünü ölçün və uyğun olan kağız parçalarını kəsin. Sonra kağızı uzanmayan bir parça ilə yapışdırın. Bir toxuculuq bunun üçün yaxşı işləyir. Sonra bir dikiş üçün təxminən dörddə bir düym buraxaraq düzbucaqlı kəsin. Sonra kağız parçasını bələdçi kimi istifadə edərək, parçaları parça içərisinə qatlayın. İndi kağız çıxarıla bilər. Üst olacaq cib hissəsində üç dəfə özünü qatlayın. Yerində saxlamaq üçün ütüləyin və bərkidin. Qıvrımın ortasına qədər bir tikiş tikin. İndi küncdən götürün və bükün ki, bir-birinə dik olmayan kənarları paralel olsun və küncə ən yaxın olan ütülü qırış boyunca görünsün (Şəkillər həqiqətən kömək edir). Bunu digər künc üçün də edin. Cibinizdən bir keçid açarınız olsaydı, cibin altına toxunduğunuz yerdə bir düymə çuxuru tikin. Sonra bir düymə çuxuru tikin və orta hissəni kəsin. Həqiqətən ətraflı təlimat verə bilmərəm, çünki düymə delikləri düzəltmək üçün əla bir vasitəm var idi. Cib tikilməzdən əvvəl dəlik açdığınızdan əmin olun. Bir neçə sancaq götürün və cib üçün işarələrin künclərindəki köynəkdən keçirin. Cibinizi götürün və hər küncünü bir köynəyə (köynəyin içərisinə) qoyun, dikiş üçün dörddə bir düym buraxın və köynəyə bərkidin. Cib bağlandıqdan sonra. cibini tutmayan sancaqları çıxarın və cibini köynəyə tikin. Bütün ciblər üçün təkrarlayın. Ekranı tutan böyük cib üçün cibin altındakı tellər üçün boşluq buraxın. Köynəyə bir deşik açmaq üçün yeri işarələyin və arxasına bir dəmir götürün (parçanın daha parlaq hissəsi ilə) və ütüləyin. Sonra, kiçik bir çuxur üçün (keçid açarı üçün istifadə etdiyim kimi) bir düymə dəliyi düzəldin. Daha böyük bir çuxur üçün konturu qeyd edin və xətt boyunca bir ziqzaq dikişi istifadə edin (və ya əyrinizdə və ya nələriniz var) və orta hissəni kəsin. İstəyirsinizsə, ciblərin ağırlığını, ön tərəfdəki ciblərə və arxa klipi şalvarın üstünə tutmaq üçün asma istifadə edə bilərsiniz. Mən də dərimə toxunacaq asma hissələrinin üstünə tikilmiş kiçik bir qol qolu aldım. İki köynək bir az çox qıza bilər, buna görə də seçdim və kiçik parça qolundan istifadə etdim.

Addım 7: Proqramlaşdırma

Proqramlaşdırma
Proqramlaşdırma

Və kod budur. Yaxşı şərh olunan bir neçə hissə var, amma böyük əksəriyyəti deyil. Fərqli hissələrlə bağlı suallarınız varsa, ya mənə xətt nömrəsini (bir nömrəli #include ilə) verə bilərsiniz, ya da xətlərin və yerləşdiyi funksiyanın (loop () və ya compMovePaddle ()) və bunu sizə izah etmək üçün əlimdən gələni edəcəyəm, sonra bunu izah edən koda bir şərh əlavə edin. #include #define PIN 6 // int düyməsiPin = 40 oyunu üçün giriş pinləri olduğunu söyləyir; // hesabı diktə edir, çünki bu, iki tərəfli bir cərgədə saxlanılır, çünki oyunçu intierScore [5] = {0, 0, 0, 0, 0}; int compScore [5] = {0, 0, 0, 0, 0}; // topun istiqamətini dikt edir int bvd = 0; // 0 aşağı, 1 yuxarıdır int bhd = 0; // 0 sağa, 1 sola // topların mövqeyini dik bvp = 8; int bhp = 6; // topun sürətli rejimdə olub olmadığını yoxlayır boolean fast = false; // hesab olub olmadığını yoxlayır. boolean cIsPoint = yanlış; boolean pIsPoint = yalan; // avar mövqeləri int cPaddle = 0; int pPaddle = 0; uzun əvvəlkiMillis = 0; uzun əvvəlkiMillisForComp = 0; // sürətli və yavaş hərəkət edən top üçün gecikmə vaxtlarını təyin edin "IntIn" in normInt və fastInt int normInt = 50 aralığı üçündür; int fastInt = 10; // qalibiyyət yoxlamaq üçün istifadə olunur. 1 oyunçu qalibiyyətidir, -1 kompüter qalibiyyətindədir və 0 hələ heç bir şey olmamışdır int qalib = 0; // səhvdən qurtulmaq üçün. addOne ifadəsində istifadə olunur və başqa heç bir yerdə yoxdur. int olan = 0; // Başlamadan əvvəl göstərilən şey, -1 qaçış int pongPlay = {1, 2, 3, 4, 10, 11, 12, 13, 16, 18, 20, 27, 29, 33, 34, 41, 42, 61, 62, 63, 70, 71, 72, 76, 85, 86, 88, 91, 92, 94, 100, 101, 102, 103, 131, 132, 136, 139, 144, 145, 146, 147, 148, 161, 162, 166, 175, 183, 185, 192, 194, 195, 196, 197, 198, 199, 204, 205, 206, 207, 208, -1}; // intwWin qazanarsan = {1, 2, 3, 4, 5, 16, 17, 18, 19, 20, 27, 33, 34, 39, 46, 47, 48, 49, 54, 55, 56, 57, 58, 77, 78, 79, 84, 88, 91, 92, 93, 94, 95, 99, 103, 106, 110, 114, 118, 130, 131, 132, 144, 145, 146, 147, 151, 162, 163, 168, 169, 170, 177, 181, 192, 193, 204, 205, 206, 207, -1}; // int itirdinsəLose = {1, 3, 5, 16, 17, 18, 19, 20, 24, 26, 28, 31, 32, 32, 33, 34, 35, 39, 46, 47, 48, 49, 62, 65, 77, 78, 79, 84, 86, 88, 91, 94, 99, 103, 106, 110, 122, 123, 124, 130, 131, 132, 144, 148, 152, 153, 154, 162, 163, 168, 169, 170, 181, 192, 193, 204, 205, 206, 207, 208, -1}; // led şeridi qurur Adafruit_NeoPixel strip = Adafruit_NeoPixel (210, PIN, NEO_RGB + NEO_KHZ800); // qurma, giriş üçün pin 40 -ı döndərmir, zolağa başlayır, // mesajını göstərir və göstərir. void setup () {pinMode (buttonPin, INPUT); strip.begin (); for (int i = 0; pongPlay > 0; i ++) {strip.setPixelColor (pongPlay , strip. Color (0, 0, 255)); } strip.show (); gecikmə (5000); while (digitalRead (buttonPin) == LOW) {// Bu bir tələdir! (düyməyə basılana qədər.)}} void loop () {clearScreen (); // (int i = 0; i <5; i ++) {if (playerScore == 1) {strip.setPixelColor (204-i, strip. Color (255, 255, 255)); } başqa if ((playerScore == 0)) {strip.setPixelColor (204-i, strip. Color (0, 255, 0)); } if (compScore == 1) {strip.setPixelColor (5+i, strip. Color (255, 255, 255)); } başqa if ((compScore == 0)) {strip.setPixelColor (5+i, strip. Color (255, 0, 0)); }} // topu başlanğıc mövqeyinə çəkir strip.setPixelColor (98, strip. Color (255, 255, 255)); strip.show (); // topun yuxarı və ya aşağı enməsinə qərar verir (pIsPoint == false && cIsPoint == yalan) {clearScreen (); işarəsiz uzun cariMillis = millis (); // oyunçuya avar mövqeyi təyin edir pPaddle = checkPaddlePos (); // növbəti mövqeyi yoxlayır checkNext (); // topu hərəkət etdirmək əgər (sürətli == yalan) {if (currentMillis - previousMillis> normInt) {previousMillis = currentMillis; moveBall (); }} başqa if (sürətli == doğru) {if (currentMillis - previousMillis> fastInt) {previousMillis = currentMillis; moveBall (); }} // topu çəkin əgər (bhp%2! = 0) {strip.setPixelColor (bhp*15+14-bvp, strip. Color (255, 255, 255)); } else if (bhp%2 == 0) {strip.setPixelColor (bhp*15+bvp, strip. Color (255, 255, 255)); } // kompüter avarlarının hərəkəti compMovePaddle (); // draw's avarçəkənlər drawPaddles (); // əslində hər şeyi qoyun.strip.show (); // (pIsPoint == doğru) {hansı = 0; bhd = 0; addOne (); fasilə; } başqa if (cIsPoint == doğru) {hansı = 1; bhd = 1; addOne (); fasilə; }} if (qalibiyyət == 1) {clearScreen (); for (int i = 0; youWin > 0; i ++) {strip.setPixelColor (youWin , strip. Color (255, 0, 0)); strip.show (); } gecikmə (5000); for (int i = 0; i <5; i ++) {playerScore = 0; compScore = 0; } qalib = 0; } if if (win == -1) {clearScreen (); for (int i = 0; youLose > 0; i ++) {strip.setPixelColor (youLose , strip. Color (0, 255, 0)); strip.show (); } gecikmə (5000); for (int i = 0; i <5; i ++) {playerScore = 0; compScore = 0; } qalib = 0; } pIsPoint = yanlış; cIsPoint = yalan; bvp = 8; bhp = 6; bvd = təsadüfi (0, 2); // 0 aşağı, 1 yuxarı sürətlə = yalan; } // Oyunun AI boşluğu compMovePaddle () {unsigned long currentMillis = millis (); if (currentMillis - previousMillisForComp> 51) {previousMillisForComp = currentMillis; əgər (bvp> = 13 && 10-cPaddle 0) {cPaddle--; } başqa halda (bvp = 0 && cPaddle <10) {cPaddle ++; } başqa halda (bvp-3> 10-cPaddle && 10-cPaddle> = 0 && cPaddle> 0) {cPaddle--; } başqa halda (bvp <10-cPaddle && 10-cPaddle <= 10) {cPaddle ++; }}} // topu hərəkətə keçirir moveBall () {if (bhd == 0) {bhp--; } başqa əgər (bhd == 1) {bhp ++; } əgər (bvd == 0) {bvp--; } başqa əgər (bvd == 1) {bvp ++; }} // massivə birini əlavə edir. Hansı biri 0 olarsa, oyunçunun hesabına əlavə olunur. 1 -dirsə, kompüterlərə void addOne () {if (which == 0) {// ifa edirsə, oyunçunun balıdırsa // əlavə et. Bu necə bildiyim sadə bir yoldur. for (int i = 0; i <5; i ++) {// loop if (playerScore == 0) {// əgər bu dəyər sıfır oyunçu olarsaScoreScore = 1; // 1 fasilə edin; // sonra gedin} başqa {// 1 oyunçu olarsa ScScore = 0; // sıfıra çevirin və}}} başqa əgər (hansı == 1) {for (int i = 0; i <5; i ++) {if (compScore == 0) {compScore = compScore +1; fasilə; } başqa {compScore = 0; }}} // Kiminsə qalib olub olmadığını yoxlayır. if (compScore [0] == 1 && compScore [2] == 1 && compScore [4] == 1) {win = -1; } başqa halda (playerScore [0] == 1 && playerScore [2] == 1 && playerScore [4] == 1) {win = 1; }} // topları növbəti mövqedə yoxlayır void checkNext () {// yoxlayın (bhp == 13) {pIsPoint = doğru; } başqa əgər (bhp == 0) {cIsPoint = true; } // əgər bir xal toplanmışsa, bu işin qalan hissəsini keçməkdənsə (pIsPoint == yalan || cIsPoint == yalan) {// topu şaquli olaraq yoxlayırsa (bvp+bvd == 15) {bvd = 0; } başqa əgər (bvp+bvd == 0) {bvd = 1; } // topu yatay olaraq yoxlayırsa (bhp+bhd == 13) {// əvvəlcə kompüter tərəfində (bvp> = 10-cPaddle && bvp <= 10-cPaddle+4) {if (bhd == 1) {bhd = 0; } başqa əgər (bhd == 0) {bhd = 1; } sürətli = yalan; } başqa if (bvp+bvd == 10-cPaddle || bvp+bvd == 10-cPaddle+5) {if (bvp! = 0 && bvp! = 14) {if (bvd == 0) {bvd = 1; } başqa əgər (bvd == 1) {bvd = 0; } bhd = 1; } başqa əgər (bvp == 0 || bvp == 14) {bhd = 1; } sürətli = yalan; }} else if (bhp+bhd == 1) {// onda oyunçu tərəfində əgər (bvp> = pPaddle && bvp <= pPaddle+4) {// avara normal bir nöqtədə dəyir? // topu sıçrayın! əgər (bhd == 1) {bhd = 0; } başqa əgər (bhd == 0) {bhd = 1; }} else if (bvp+bvd == pPaddle || bvp+bvd-5 == pPaddle) {// (bvp! = 0 && bvp! = 14) olarsa küncdəki avara dəyirmi? // yuxarı yox aşağı aşağı? // Topu sıçrayın! əgər (bvd == 0) {bvd = 1; } başqa əgər (bvd == 1) {bvd = 0; } bhd = 1; sürətli = doğru; } başqa əgər (bvp == 0 || bvp == 14) {// yuxarı yuxarıdır, yoxsa aşağı? // topu sıçrayın! bhd = 0; fast = doğru; // topu daha sonra sürətli hərəkət etdirmək üçün dəyəri təyin edin}}}}} int checkPaddlePos () {// qazanı oxuyur və (analogRead (A15) <93) uyğun olaraq avar mövqeyinə qərar verir; } else if (analogRead (A15) <186) {qaytar 1; } else if (analogRead (A15) <279) {return 2; } else if (analogRead (A15) <372) {return 3; } else if (analogRead (A15) <465) {return 4; } else if (analogRead (A15) <558) {return 5; } else if (analogRead (A15) <652) {return 6; } else if (analogRead (A15) <745) {return 7; } else if (analogRead (A15) <837) {qaytar 8; } else if (analogRead (A15) <= 931) {return 9; } else if (analogRead (A15) <= 2014) {qaytar 10; }} void drawPaddles () {// draw, avarçəkənləri düzgün yerində tutur və (int i = 0; i <5; i ++) {if (playerScore == 1) {şeridi üçün hesabı avarda göstərir. setPixelColor (pPaddle+i, strip. Color (255, 255, 255)); } başqa if ((playerScore == 0)) {strip.setPixelColor (pPaddle+i, strip. Color (255, 0, 0)); } if (compScore == 1) {strip.setPixelColor (199+cPaddle-i, strip. Color (255, 255, 255)); } başqa if ((compScore == 0)) {strip.setPixelColor (199+cPaddle-i, strip. Color (0, 255, 0)); }}} void clearScreen () {for (int i = 0; i <= 210; i ++) {strip.setPixelColor (i, strip. Color (0, 0, 0)); } strip.show (); }

Addım 8: Hazır məhsul

Hazır məhsul
Hazır məhsul
Hazır məhsul
Hazır məhsul

İşdə hazır köynək!

Tövsiyə: