Мазмуну:

Көйнөктө ийкемдүү понг ойноо: 8 кадам (сүрөттөр менен)
Көйнөктө ийкемдүү понг ойноо: 8 кадам (сүрөттөр менен)

Video: Көйнөктө ийкемдүү понг ойноо: 8 кадам (сүрөттөр менен)

Video: Көйнөктө ийкемдүү понг ойноо: 8 кадам (сүрөттөр менен)
Video: Дождливый ноябрь_Рассказ_Слушать 2024, Ноябрь
Anonim
Көйнөктө ийкемдүү понг ойноо
Көйнөктө ийкемдүү понг ойноо
Көйнөктө ийкемдүү понг ойноо
Көйнөктө ийкемдүү понг ойноо
Көйнөктө ийкемдүү понг ойноо
Көйнөктө ийкемдүү понг ойноо

Бул менин 2013 -жылдагы Хэллоуин костюмум. Ал бир жылдай иштеп жатат жана аны жаратуу үчүн бир нече адам саат талап кылынган. Экран 14-15 пиксель, ошондуктан, абдан төмөн чечим, бирок ал дагы эле кызыктуу нерселерди кыла алат. Ал бузулбай бүктөлбөсө да, физикалык жактан бардык жактан ийкемдүү. Анын USB аркылуу про мегага туташкан бир баскычтан жана слайддан турган контроллери бар. Аны узак убакытка чейин тирүү кармоо үчүн, керектүү чыңалууга ээ болуу үчүн сериялуу зымдуу 2200 мАч эки батарейканы, андан кийин 5 вольттуу жөндөгүчтү колдонууга жарайт. Бардык электроника көйнөктүн ичиндеги чөнтөктөргө салынган, ошондуктан алар чечилип, көйнөктү жуушат. Бул понгдун функционалдык оюнун ойнойт. Ал адегенде Том Thumb тамгасынын өзгөртүлгөн версиясын колдонуп, кооз көк тамгалар менен "PONG PLAY" деген сөздөр менен кооздоп турат (https://robey.lag.net/2010/01/23/tiny-monospace-font.html). Беш секунддан кийин баскычты басуу же басууну баспоо жана артында эң сонун тажрыйба калтыруу мүмкүнчүлүгү берилиши мүмкүн. Ким баскычты басууну чечсе, оюн башталат. Оң жактагы кызыл калак - бул компьютердин калагы, ал эми жашыл калак - оюнчунун калакчасы, ал өйдө жана ылдый жылыш үчүн слайд казаны тарабынан башкарылат. Ар бир тарап упай топтоого аракет кылып жатканда топ тегеренип секирет. Оюнчу топту ылдамдатуу үчүн калактын учу менен ура алат (жакшы өзгөчөлүк), бирок компьютер муну кыла албайт, анын ордуна топко караганда бир аз жайыраак кыймыл менен тыгылып калат. Упай топтолгондо, пиксел капталдагы калакта ак түскө өзгөрөт. Ал ылдыйдан бинардык түрдө эсептелет. мында жашыл же кызыл нөл, ак болсо 1. 21 - утуучу упай (же кимдин 21 упай алганына жараша уттуруу), андыктан оюнчу калак 10101ди окуганда "СИЗ УТУҢУЗ" тексти көрсөтүлөт. Дагы бир жолу өзгөртүлгөн Том Бармагында. Ушундай эле нерсе болот, бирок анын ордуна "СЕНИ АЖЫРАТЫҢ" көрсөтүлөт. Жеңиш же утулуштан кийин оюн Pong Playден кийин дароо башталат. Толугу менен кайра баштоо үчүн "Сыйкырдуу кутучанын" өчүрүү баскычы басылат, экрандан башка бардык электроника менен кошо белгилүү.

1 -кадам: материалдар жана инструменттер

Материалдар жана куралдар
Материалдар жана куралдар
Материалдар жана куралдар
Материалдар жана куралдар

А * менен белгиленген нерселер милдеттүү эмес, бирок сунушталат Жана эч кандай тартипте эмес … Материалдар: 4 ярд Adafruit Neopixle 60 пиксель метр тилкеге 1 футболка * 1 жуп асма 1/2 ярд кездеме жетиштүү болот (Жок чоюлма токуу артыкчылыктуу) 6 фут USB Эркек эркек эркек кабелине 1 USB Аял коннектор 3 2 пин JST аял коннекторлору 4 2 пин JST эркек зымдар батарейка кубаттоочу 2 6600 мАч батареялар 1 Аркада стили Баскыч 1 arduino про-мега 1 FTDI баш 1 USB B аял туташтыргычы менен 1 ажыратуу тактасы 1 күйгүзүү/өчүрүү (которуштуруу) 1 баштапкы абалга келтирүү (которуштуруу же убактылуу) 1 слайд потенциометр *1 слайд казан баскычы 1 жогорку ампер туташтыргычы жуп *1 проект иши 1 5V 3+ амп чыңалуу жөндөгүчү кичине бир аз пластмассадан кээ бир зымга кээ бир зымга кээ бир жипке *бир аз ысык желимге *бир аз ийкемдүү бир аз убакытка (балким "кээ бирлерине караганда" бир аз өжөрлүккө (сизге чындыгында бир аз керек болот) кээ бир жылуулукту кысуучу түтүктөр же электр лента кээ бир супер клей кээ бир темирди колдоого алат *Жардам колдору Кадимки кол s (же аларга кирүү мүмкүнчүлүгү бар бирөө) Лампочка *Hot Glue Gun Dremel or Sandpaper Chisel Wire Stripers Wire Cutters Staple Gun Screw Driver Pins Тигүү Машинасы Кайчы

2 -кадам: LED тилкесин кичинекей тилкелерге кесип алыңыз

LED тилкесин кичинекей тилкелерге кесип алыңыз
LED тилкесин кичинекей тилкелерге кесип алыңыз
LED тилкесин кичинекей тилкелерге кесип алыңыз
LED тилкесин кичинекей тилкелерге кесип алыңыз
LED тилкесин кичинекей тилкелерге кесип алыңыз
LED тилкесин кичинекей тилкелерге кесип алыңыз

Сиз каалаган идишти колдонуңуз жана тилкени 14 сегментке бөлүңүз, узундугу 15 пиксель. Жез издеринин ортосунда гана "DO" "DIN" "+5V" жана "GND" деп белгиленген. Эгерде ал буга чейин жездин үстүнө ээрип кеткен болсо, анда алар жөн эле кесилет. Ачык жезди көп кесип албоого аракет кылыңыз, бирок аны кичине чалып койсоңуз жакшы болот. Бардык 14 тилке кесилгенден кийин, тилкелерди ширетүү үчүн жолдон чыгарыш үчүн, ар бир четинен бир аз резинаны кыркып алыңыз.

3 -кадам: Экранды чогуу ширетүү

Экранды чогуу ширетүү
Экранды чогуу ширетүү
Экранды чогуу ширетүү
Экранды чогуу ширетүү
Экранды чогуу ширетүү
Экранды чогуу ширетүү

Зымды алып, болжол менен 3,5 дюймдук (9 см) сегменттерге бөлүңүз. Менин учурда, мен ширетүүдө түз жүрүүнү жеңилдетүү үчүн үч түрдүү түстө болом, бирок бир түс жакшы эле иштейт. Сизге бул кичинекей балдардын 40ка жакыны керек болот, бирок андай учурда дагы бир жупту кесип салыңыз. Зымды кесип бүткөндөн кийин, учтарын сыйрып, калемпирлеңиз (эгер сизде ширетүү тажрыйбасы бар болсо, анда кийинки абзацка өтсөңүз болот), бул кичинекей пластикти алып салгандан кийин, ар бир зымдын учуна бир аз ширетүүнү коюңуз. Лайнерди жылытпаңыз жана зымга өтүүгө аракет кылбаңыз, жездин түбүнөн темирди кошуп жылытыңыз жана үстүнкү жагына коюңуз. Чыдамдуу болуңуз жана ысык зымдын эрип кетишин күтүңүз. Баштоо үчүн ширетүүчү темирди катаалдатуу азгырык болот (менин чыдамсыздыгым жана мен сенин сезимиңди так билем), бирок ширетүүчү жабышпайт. Тилкелердин ар бир учунда ачык жез издери үчүн ушундай кылыңыз. Эгерде мурунтан эле ширеси бар болсо, бул жөнүндө кабатыр болбоңуз. Тилке үчүн кийинчерээк жеңилдетүү үчүн кичине дөбө курууну кааласаңыз болот. Тасма менен иштөөдө, муну тез жасаңыз жана тилкеге жылуулукту колдонууга көп убакыт коротпоого аракет кылыңыз. Солярды издин үстүнө эритүү үчүн эмне кылыш керек, ошону кылыңыз. Биринчи тилкенин аягына чейин ар бир изге зым менен ширетүү (Биринчи тилке зымдар жана туташтыргычы бар, аны ачык учуна чейин ширетүү). Эгерде сиз тилкени карасаңыз, анда кичинекей жебелерди көрөсүз, анын аягына чейин сиз зымды ширетип койгонсуз. Жебелер карама -каршы тарапты көрсөтүп турушу үчүн дагы бир тилкени алыңыз жана GND изинен келген зымды экинчисинин GND изине, +5Vдан +5Vга ж. Муну кайталаңыз, жебелер ар бир бөлүмдөн кийин багытты алмаштырат, эгерде сиз аларды ээрчисеңиз, ал зиг -загды өйдө -ылдый түшүрүп, аягында узун тилкеге созулушу мүмкүн. Бардык 14 тилке ширетилгенден кийин, аларды жайгаштырып, анан тизип, LEDдин торун түзүңүз. Андан кийин аларды тилкеге зыян келтирбестен кийинчерээк алып салууга боло турган ыкманы колдонуп бирге кармаңыз. Мен скотч колдондум. Бардыгын чогуу кармоо үчүн жетиштүү жабышчаак, бирок калдык калтыра турганчалык жабышчаак эмес. Мен степлер же скотч сыяктуу туруктуу нерсеге эч нерсе сунуш кылбайм. Баары скотч менен бекитилгенден кийин +5V астындагы тилкеден зымды ошол замат анын жанына туташтырыңыз. Түбүнүн түбү электр крандары бүт тарапка өтмөйүнчө кайталаңыз. Бул LED диапазону өнүгүп жатканда экран күңүрт болбойт.

4 -кадам: Негизги электрониканы ширетүү

Негизги электрониканы ширетүү
Негизги электрониканы ширетүү
Негизги электрониканы ширетүү
Негизги электрониканы ширетүү
Негизги электрониканы ширетүү
Негизги электрониканы ширетүү

USB B туташтыргычына USB B сындыруучу тактасын (BOB) кошуңуз. Тиешелүү зымдарды USB A туташтыргычына туташтырыңыз. Мен бул веб-сайттан табылган туташтыргычтын пин-чыгышын кароону кеңеш берем, https://image.pinout.net/pinout_USB_files/pc_usb_connectors_pinout.png. USB A туташтыргычындагы зымдардын башка учтарын азыр кайда ширетүү керек деп кабатыр болбоңуз; бул контролер кадамында камтылат. Маалымат коннекторун эркек туташтыргычтан эмес, аял коннекторунан кескиле (Аял туташтыргычы башка четинен алынган). Эркек JST туташтыргычтарын аккумулятордун учуна чейин кызылга, караны карага кетирет. Ачык зымдардын үстүнөн жылытуучу түтүктү эритип алыңыз (ширетүүдөн мурун жылып кетиңиз), ошондуктан алар кыска же электр лента же ысык желим сыяктуу башка нерсени колдонбошу үчүн. Кээ бир зымдарды аял JST коннекторлорунун баарына кошуңуз. Пиндер айланып кетпеши үчүн эркек учу сайылганын тактаңыз. Полярдуулуктан этият болуңуз жана зымдар эркек коннекторлору менен дал келерин текшериңиз. Solder зымдары жогорку чыңалуудагы туташтыргычка (бирок бул жуп эмес), дагы бир жолу, түстөрдүн бири -бирине шайкеш келишине жана кандайдыр бир жылдыруучу казыктын алдын алуу үчүн бириктирилгенине ынануу. Аялды жөн эле туташтыргычты/зымдын курамын электрдик регулятордун босоголук чыңалуусунан алуу үчүн, алар параллелдүү эмес, серия түрүндө зым менен байланыштырылат. Ошентип, позитивдүү зымды башка жамааттын терс зымына ээрчиңиз, андыктан азыр бизде бир оңголбогон оң зым жана бир терс туташпаган зым бар жана эки ширетилген зым ар кандай туташтыргычтарга ширетилген. Терс зымды алып, башка жакка терс зымга ширетүү үчүн сактап коюңуз. Эми позитивдүү зымды алып, аны которгучка кошуңуз Эгерде үч же андан көп казык бар болсо (же "күйгүзүүнүн" бир нече жолу бар болсо), аны ортоңку казыкка туташтырыңыз. Көңүл бургула, "Орто пин" физикалык түрдө ортодо болбошу мүмкүн. Аны аныктоонун жолу - бул, качан болбосун күйгүзүү күйгүзүлгөндө, башка пинге туташып турган пинти табуу. Эгерде мындай пин жок болсо, анда сизде өзгөчө бир которгуч бар; жөн гана аны каалаган пинге туташтырыңыз жана которгучка кошулган кийинки зым ошол зымга жок дегенде бир абалда туташтырылганын текшериңиз. Эми жогоруда талкуулангандай, чыңалуу жөндөгүчүнүн оң кабыл алуу зымын которгучтун карама -каршы жагына ширеткиле. Позитивдүү чыңалууну ширетилбеген жогорку агымдагы туташтыргычтын оң жагына чыгарыңыз. Терс кабыл алуу зымын алып, жогорку ток туташтыргычтын терс аягына чейин аны lehim. Эми биз күчтү Arduino жана Power тилкесине параллелдүү түрдө ширетебиз. Эми чыңалуу жөндөгүчүнүн чыгуучу зымдарын алып, оң жана терс учтарындагы эки даана зымды ээрчиңиз, андыктан алар Y формасында чыгат. Жетектөөчү тилкенин оң жана терс зымдарына эки пин туташтыргычты кошуңуз. Сиз колдонгон туташтыргычтын кандай түрү экени маанилүү эмес, ал JST же менин учурда кандайдыр бир кубат/аудио кабели же бир нерсе болушу мүмкүн (мен так билбейм жана эч кандай сүрөттөрүм үчүн кечирим сурайм). Оң тилкелердин бирин жарык тилкеси үчүн карама -каршы туташтыргычтын оң жагына, ал эми терс зымдардын бирин туташтыргычтын башка пинине туташтырыңыз. Ошол эле нерсени кылыңыз, бирок эркек JST туташтыргычы/зым чогултуу үчүн. Шорттон качуу үчүн ширетүүчү түйүндөрдү жылуулоону унутпаңыз. Эми USB B туташтыргычы менен эмне кылуу керектигин карап көрөлү. Позитивдүү зымды Arduino Pro Megaдагы 5v тешигине кошуңуз. Жер зымын алып, аны GND тешигине кошуңуз. D+ алып, аны санариптик пинге (же бул учурда, тешикке) 40. Solder D- аналогдук пинге 15. LED тилкесинин эркек туташтыргычы менен жупташкан ургаачы туташтыргычтын маалымат учун 6-пинге жана жерге зым GND пинге. Маска же скотч лентага зымдарды кармап туруу үчүн абдан жакшы иштейт, андыктан аны эритип берүү үчүн оодарылып кеткенде алар түшпөйт. Эми бир мүнөттүк баскычты алып, зымды бир четинен VCC пинине (же кандайдыр бир чыңалуу чыгаруучу пинге) жана экинчи учун RESET пинге чейин кошуңуз.

5 -кадам: Контроллер

Контроллер
Контроллер
Контроллер
Контроллер
Контроллер
Контроллер

Биринчиден, баштоо үчүн туура форманы тандоо. Мунун баары контроллердин структураланышын каалаганыңыздан көз каранды. Мен дагы жалпак контролерду кааладым, ошондуктан 3 1/2 "3/4" тактай алдым. бөлүктөрдү иштөө үчүн ыңгайлуу жана ыңгайлуу кылып жайгаштырыңыз. Француз ийри сызыгын, компасты, үч бурчтукту жана түз четин колдонуп, бардык бөлүктөр кайда кетиши керектигин сызыңыз. Сиз тандаган кесүүчү куралды колдонуп, негизги контурду кесип алыңыз. Тыюу салынган араа эң жакшы болмок, бирок мен жакшы иштеген чыракты колдондум. Ыкчам өтүү үчүн четтерин тегиздеңиз, андан кийин ыңгайлуураак болушу үчүн бурчтарын кумдаңыз. Коммутатор үчүн тешикти тешип чыккыла, андан кийин кум, чүкө жана/же Дремелдин түбүнө ылайыктуу кылып бөлүп алыңыз. Чокусу менен эч нерсе кылбоого аракет кылыңыз жана ага кирүү үчүн керектүү нерселерди бурап, бурап же башка нерселерди кум менен тазалаңыз. Ал пластикалык гайка менен бекитилип, которуу. Потенциометрдин туткасына туура келген жерди бургулаңыз жана бир жерди тешип алыңыз, ошондо ал батып кетет. Бир бураманы кармап турушу үчүн бир аз тешиктерди бургула. USB A туташтыргычынын кичинекей бөлүктөрүн бүгүп, анын жалпы туурасы бир аз көбөйөт (сүрөттөрдү караңыз). Коннектордун бир бөлүгүн бөлүп, туташтыргыч туура келгенин текшерүү үчүн бара -бара текшерип туруңуз. Коннекторду анын уячасына супер клей. Пластмассадан кичине бөлүк алып, аны туташтыргычка туура келген формага кесип (сүрөттөрдү караңыз), анан жыгачка чаптап коюңуз. Жолго түшө турган бөлүктөрдү кесип салыңыз. Потенциометрди бурап, баскычты тиркеңиз. Позитивдүү зымды потенциометрдин учтарынын бирине (өзгөрмөлүү бөлүгүн эмес) жана терс зымды карама -каршы четине кошуңуз. D-пинди казандагы өзгөрмөлүү пинге кошуңуз. Позитивдүү зым менен казандын төөнөгүчүнөн зымды түймөктөгү казыктардын бирине туташтырыңыз. S+ S баскычын баскычтын башка түйүнүнө салыңыз. Запастык зымды кыркып, керектүү бөлүктөрдү жылуулаңыз.

6 -кадам: көйнөк

Рубашка
Рубашка
Рубашка
Рубашка
Рубашка
Рубашка

Жарыкты өткөрө турган ыңгайлуу көйнөк табыңыз. Мен бул негизги ак футболканы тандадым. Жарыктын ичинен көрүнүп турганы үчүн түсү же стили маанилүү эмес. Бирок мен алдыңкы графиканы сунуштабайм. Каалаган жериңизди чечүүгө жардам берүү үчүн көйнөктүн бардыгын жайып коюңуз жана аны чийүү үчүн өчүрүлүүчү белгилөө куралын колдонуңуз. Менде (мен билген кээ бир адамдарды билдирет) жонокой жууп кетүүчү кездемелерди белгилөө үчүн арналган карандашым бар. Батареялардын, контроллердин корпусунун жана экранынын өлчөмүн өлчөп, дал келүү үчүн кагаз кесимдерин кесип алыңыз. Андан кийин кагазды чоюлбай турган кездемеге кадап коюңуз. Бул үчүн токуу жакшы иштейт. Андан кийин тегерегине болжол менен төрттөн бир дюйм калтырган тик бурчтукту кесип алыңыз. Андан кийин кагазды колдонмо катары колдонуп, кездемеге бүктөмдөрдү салыңыз. Эми кагазды алып салса болот. Чөнтөктүн эң үстүңкү бөлүгүндө үч жолу өзүн өзү бүктөп коюңуз. Орнунда кармаш үчүн үтүктөп, кадап коюңуз. Капкактын ортосуна чейин тигилет. Эми бурчту алып, бүктөп койсоңуз, тигилбеген тигилген четтери параллель болуп, бурчка эң жакын үтүктөлгөн бырышты бойлоп тигилет (Сүрөттөр чындап жардам берет). Муну башка бурч үчүн да жасаңыз. Эгерде сизде чөнтөктөн алмаштыргыч чыкса, чөнтөктүн түбүнө баскычтын тешигин тигүүчү жерге тигиңиз. Андан кийин баскычтын тешигин тигип, ортоңку бөлүгүн кесип алыңыз. Мен деталдуу көрсөтмөлөрдү бере албайм, анткени менде баскычтын тешиктерин жасоо үчүн сонун курал бар болчу. Чөнтөк тигиле электе эле тешиктерди жаса. Бир аз төөнөгүчтү алып, чөнтөк үчүн белгилердин бурчтарындагы көйнөктөн өткөрүңүз. Чөнтөктү алып, ар бир бурчту төөнөгүчкө (көйнөктүн ичине) салып, тигиш үчүн төрттөн бир дюйм калтырып, көйнөгүнө кадап коюңуз. Чөнтөк кыпчылгандан кийин. чөнтөктү кармабаган төөнөгүчтөрдү алып салыңыз жана чөнтөктү көйнөккө тигиңиз. Бардык чөнтөктөр үчүн кайталаңыз. Экранды кармаган чоң чөнтөк үчүн чөнтөктүн түбүндөгү зымдар үчүн боштук калтырыңыз. Көйнөгүңүзгө тешик коюу үчүн жерди белгилеп, жөлөнгүчкө үтүктү алып (кездеменин жалтырак бөлүгү менен) жана үтүктөңүз. Андан кийин, кичинекей тешик үчүн (мен которуштуруу үчүн колдонгон сыяктуу), баскычтын тешигин жасаңыз. Чоңураак тешик үчүн контурду белгилеп, сызык боюнча зигзаг тигүүнү колдонуңуз (же ийри же сизде эмне бар) жана ортоңку бөлүгүн кесип алыңыз. Кааласаңыз, чөнтөктөрдүн салмагын кармоо үчүн асма колдоно аласыз, алдыңкы чөнтөктөргө кармалган эки клип жана шымга арткы клип. Мен ошондой эле териме тийип турган илгичтердин бөлүктөрүнүн үстүнө тигилген кичинекей жеңди алдым. Эки көйнөк бир аз ысып кетиши мүмкүн, ошондуктан мен кичинекей кездеменин жеңин колдондум.

7 -кадам: Программалоо

Программалоо
Программалоо

Жана бул жерде код. Жакшы комментарийленген бир нече бөлүктөр бар, бирок басымдуу көпчүлүгү жок. Эгерде сизде ар кандай бөлүктөр боюнча суроолор болсо, анда мага линиянын номерин (биринчи сап катары #кошуу менен) же линиянын (лордун) көчүрмөсүн жана ал жайгашкан функцияга (loop () же compMovePaddle ()) жана мен аны сизге түшүндүрүү үчүн колумдан келгендин баарын кылам, андан кийин аны түшүндүргөн кодго комментарий кошуңуз. #include #define PIN 6 // int buttonPin = 40 оюнунун кирүү түйүндөрү экенин айтат; // эсепти эки эселенген массивде сактайт, анткени ал esier int playerScore [5] = {0, 0, 0, 0, 0}; int compScore [5] = {0, 0, 0, 0, 0}; // топтун багытын жазат int bvd = 0; // 0 ылдый, 1 өйдө int bhd = 0; // 0 оң, 1 солго // шарлардын ордун көрсөтөт int bvp = 8; int bhp = 6; // топтун тез режимде болорун текшерет логикалык fast = false; // анын упай экенин текшерет. логикалык cIsPoint = false; логикалык pIsPoint = false; // калак позициялары int cPaddle = 0; int pPaddle = 0; long previousMillis = 0; көп мурункуMillisForComp = 0; // тез жана жай кыймылдаган топтун кечигүү убактысын коюңуз normIntтеги "Int" жана fastInt int normInt = 50; int fastInt = 10; // утушту текшерүү үчүн колдонулат. 1 -бул оюнчунун жеңиши, -1дин компьютердик жеңиши, жана 0 эч нерсе болгон жок int int = 0; // катадан арылуу үчүн. addOne билдирүүсүндө колдонулат жана башка эч жерде. int which = 0; // Башталганга чейин көрсөтүлгөн нерсе, -1 -бул 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}; // эгер сиз int youWin утуп алсаңыз = {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 youLose = {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 тилкесин орнотот Adafruit_NeoPixel strip = Adafruit_NeoPixel (210, PIN, NEO_RGB + NEO_KHZ800); // орнотуу, киргизүү үчүн 40 -пинди бурбайт, тилкени баштайт, // билдирүүсүн көрсөтөт жана аны көрсөтөт. void setup () {pinMode (buttonPin, INPUT); strip.begin (); үчүн (int i = 0; pongPlay > 0; i ++) {strip.setPixelColor (pongPlay , strip. Color (0, 0, 255)); } strip.show (); кечигүү (5000); while (digitalRead (buttonPin) == LOW) {// Бул тузак! (баскыч басылганга чейин)}} void loop () {clearScreen (); // калактарды тартат (int i = 0; i <5; i ++) {if (playerScore == 1) {strip.setPixelColor (204-i, strip. Color (255, 255, 255)); } else if ((playerScore == 0)) {strip.setPixelColor (204-i, strip. Color (0, 255, 0))); } if (compScore == 1) {strip.setPixelColor (5+i, strip. Color (255, 255, 255)); } else if ((compScore == 0)) {strip.setPixelColor (5+i, strip. Color (255, 0, 0))); }} // топту баштапкы абалына тартат strip.setPixelColor (98, strip. Color (255, 255, 255)); strip.show (); // топ көтөрүлүп же түшүп баратканын чечет (pIsPoint == false && cIsPoint == false) {clearScreen (); белгисиз узак currentMillis = millis (); // оюнчу калакчасынын ордун дайындайт pPaddle = checkPaddlePos (); // кийинки позицияны текшерет checkNext (); // топту жылдыруу эгерде (тез == жалган) {if (currentMillis - previousMillis> normInt) {previousMillis = currentMillis; moveBall (); }} else if (fast == true) {if (currentMillis - previousMillis> fastInt) {previousMillis = currentMillis; moveBall (); }} // топту тарт (if 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)); } // компьютер калактарынын кыймылы compMovePaddle (); // draw's калактарды drawPaddles (); // чындыгында баарын койду.strip.show (); // упай топтолгонун текшерүү, эгерде (pIsPoint == true) {кайсы = 0; bhd = 0; кошуу бири(); тыныгуу; } else if (cIsPoint == true) {кайсы = 1; bhd = 1; кошуу бири(); тыныгуу; }} if (win == 1) {clearScreen (); for (int i = 0; youWin > 0; i ++) {strip.setPixelColor (youWin , strip. Color (255, 0, 0)); strip.show (); } кечигүү (5000); for (int i = 0; i <5; i ++) {playerScore = 0; compScore = 0; } win = 0; } else if (win == -1) {clearScreen (); for (int i = 0; youLose > 0; i ++) {strip.setPixelColor (youLose , strip. Color (0, 255, 0)); strip.show (); } кечигүү (5000); for (int i = 0; i <5; i ++) {playerScore = 0; compScore = 0; } win = 0; } pIsPoint = false; cIsPoint = жалган; bvp = 8; bhp = 6; bvd = random (0, 2); // 0 ылдый, 1 өйдө тез = жалган; } // Оюн AI үчүн жараксыз compMovePaddle () {unsigned long currentMillis = millis (); if (currentMillis - previousMillisForComp> 51) {previousMillisForComp = currentMillis; if (bvp> = 13 && 10-cPaddle 0) {cPaddle--; } else if (bvp = 0 && cPaddle <10) {cPaddle ++; } else if (bvp-3> 10-cPaddle && 10-cPaddle> = 0 && cPaddle> 0) {cPaddle--; } else if (bvp <10-cPaddle && 10-cPaddle <= 10) {cPaddle ++; }}} // топту жокко чыгарат moveBall () {if (bhd == 0) {bhp--; } else if (bhd == 1) {bhp ++; } if (bvd == 0) {bvp--; } else if (bvd == 1) {bvp ++; }} // массивге бирин кошот. Эгерде whichOne 0 болсо, анда ал оюнчунун упайына кошулат. Эгерде бул 1 болсо, анда ал компьютерге vOdO addOne () {if (which == 0) {// if this the player's score // Add one. Бул мен кантип билеримдин жөнөкөй жолу. for (int i = 0; i <5; i ++) {// loop if (playerScore == 0) {// if that value is zero zeroScoreScore = 1; // it 1 break; // анда кет} башка {// эгерде ал 1 оюнчу болсо ScScore = 0; // аны нөлгө айландыр жана}}} else if (which == 1) {for (int i = 0; i <5; i ++) {if (compScore == 0) {compScore = compScore +1; тыныгуу; } else {compScore = 0; }}} // Кимдир бирөө утуп алганын текшерет. if (compScore [0] == 1 && compScore [2] == 1 && compScore [4] == 1) {win = -1; } else if (playerScore [0] == 1 && playerScore [2] == 1 && playerScore [4] == 1) {win = 1; }} // топтордун кийинки позициясын текшерет void checkNext () {// чек (эгер bhp == 13) {pIsPoint = true; } else if (bhp == 0) {cIsPoint = true; } // эгерде упай топтолсо, калган нерселердин үстүнөн өтүп кетиңиз, эгер (pIsPoint == false || cIsPoint == false) {// топту тигинен текшерет, эгер (bvp+bvd == 15) {bvd = 0; } else if (bvp+bvd == 0) {bvd = 1; } // топту горизонталдуу түрдө текшерет, эгерде (bhp+bhd == 13) {// биринчи компьютер тарапта болсо (bvp> = 10-cPaddle && bvp <= 10-cPaddle+4) {if (bhd == 1) {bhd = 0; } else if (bhd == 0) {bhd = 1; } fast = false; } if if (bvp+bvd == 10-cPaddle || bvp+bvd == 10-cPaddle+5) {if (bvp! = 0 && bvp! = 14) {if (bvd == 0) {bvd = 1; } else if (bvd == 1) {bvd = 0; } bhd = 1; } else if (bvp == 0 || bvp == 14) {bhd = 1; } fast = false; }} else if (bhp+bhd == 1) {// анда оюнчу тарабында if (bvp> = pPaddle && bvp <= pPaddle+4) {// ал калакты кадимки жерде уруп жатабы? // топту секир! if (bhd == 1) {bhd = 0; } else if (bhd == 0) {bhd = 1; }} else if (bvp+bvd == pPaddle || bvp+bvd-5 == pPaddle) {// эгерде (bvp! = 0 && bvp! = 14) {// ал калакты бурчка уруп жатабы? жогору же төмөн эмес? // Топту секир! if (bvd == 0) {bvd = 1; } else if (bvd == 1) {bvd = 0; } bhd = 1; тез = чын; } else if (bvp == 0 || bvp == 14) {// ал өйдөбү же төмөнбү? // топту секир! bhd = 0; fast = true; // маанини кийинчерээк топту тез кыймылдатуу үчүн коюңуз}}}}} int checkPaddlePos () {// казанды окуйт жана калактын ордун чечет, эгерде (analogRead (A15) <93) {return 0; } else if (analogRead (A15) <186) {return 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) {return 8; } else if (analogRead (A15) <= 931) {return 9; } else if (analogRead (A15) <= 2014) {return 10; }} void drawPaddles () {// draw калактарды туура жеринде көрсөтөт жана калакта упайын көрсөтөт (int i = 0; i <5; i ++) {if (playerScore == 1) {strip. setPixelColor (pPaddle+i, strip. Color (255, 255, 255)); } else 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))); } else if ((compScore == 0)) {strip.setPixelColor (199+cPaddle-i, strip. Color (0, 255, 0)); }}} жараксыз clearScreen () {үчүн (int i = 0; i <= 210; i ++) {strip.setPixelColor (i, strip. Color (0, 0, 0)); } strip.show (); }

8 -кадам: даяр продукт

Даяр Продукт
Даяр Продукт
Даяр Продукт
Даяр Продукт

Мына, даяр көйнөк!

Сунушталууда: