Мазмуну:

Lego Mini Memory Game: 5 кадам (Сүрөттөр менен)
Lego Mini Memory Game: 5 кадам (Сүрөттөр менен)

Video: Lego Mini Memory Game: 5 кадам (Сүрөттөр менен)

Video: Lego Mini Memory Game: 5 кадам (Сүрөттөр менен)
Video: КЫЙКЫРДЫ - ЖОГОЛДУ ₽200.000 / ТАШТАНДЫК: Тынчтык 2024, Ноябрь
Anonim
Image
Image
Lego Mini Memory Оюн
Lego Mini Memory Оюн

Бир жыл мурун, мен Lego Mini Cooperге LED диоддорун орнотуу боюнча инструкцияны жазгам. Жаңычылдык, LED ди смартфондун жардамы менен башкарылышы мүмкүн (же бул үчүн каалаган веб -браузер аркылуу).

Мен ошол Нускоодо кыскача сүрөттөлгөндөй, ошол кездеги аракеттердин көбү бүт нерсенин талкаланып кетпестен Мини менен өткөрүлүшүнө байланыштуу болгон. Мени таң калтырган нерсе, Mini кийин Коннектикуттан Торонтого болгон сапарынан аман калды жана ошондон бери аздыр -көптүр иштеди.

"Эгерде ал бузулбаса, ал аны оңдоп -түзөгөнгө чейин" менин эпитафиям болот, андыктан Мини Рождество үчүн үйүнө кайтып келгенде, Lego Mini 2.0 убактысы келген. Кантсе да, эгерде Tesla унааларына программалык камсыздоонун жаңыртууларын киргизе алса, бул канчалык кыйын болушу мүмкүн?

Менде бир нече идея бар болчу:

  • Колдонуучунун интерфейсин жакшыртыңыз
  • Мүйүз кош!
  • "Авто чырактар" мүмкүнчүлүгүн жакшыртуу; жана, эң башкысы
  • Оюн функциясын кошуңуз (телефонуңуз менен Mini чырактарын күйгүзүү жана жаңыртуу эртеби -кечпи түшөөрүн түшүндүм)

Оюн функциясы эң чоң тапшырма болгон, анткени ал мага оюндун кандай болушу мүмкүн экени дароо эле ачык болгон жок. Mini аны иштетүү менен алектенген оюнду улантуу үчүн өтө назик (мүмкүн, Женганын депрессиялык вариантынан башка). Дагы бир тоскоолдук - мен өмүрүмдө эч качан оюнду программалаган эмесмин.

Бир жыл жемишсиз ойлонгондон кийин, мен Хакстердеги долбоорго туш келип калдым, анда 1970 -жылдардагы Симон аттуу эстутум оюнчугун тууроо үчүн Arduino Uno колдонулат. Кыскача айтканда, Саймон түзмөгү жарыктын ырааттуулугун ойноткон, андан кийин оюнчу эстеп, баскычтарды басып ойнотушу керек болчу. Ар бир ийгиликтүү турдан кийин тизмектин узундугу жогорулады.

Керектүү винтаж болгондугуна карабастан, мен бул оюн жөнүндө эч качан уккан эмесмин, жана айта кетишим керек, бул күндүн ичинде оюн -зоок үчүн өткөн нерсе таң калыштуу. Андан да таң калыштуусу, Саймон оюну Амазонкада дагы эле сатыкта жана жакшы пикирлерди чогултууда. Ооба, бул менин максаттарыма ылайыкташуу үчүн башкы талапкер болушу керек болчу. Кантсе да, Миниде жарыктар бар болчу, ошондуктан мен физикалык баскычтарды таштап, смартфон аркылуу колдонуучунун киргизүүсүн алуум керек болчу. Программа жагында, демек, бул негизинен кесүү жана чаптоо жумушу болмок окшойт.

Бирок адегенде мен аппараттык жабдууларга кичине өзгөртүүлөрдү киргизишим керек болчу.

1 -кадам: Компоненттер, Куралдар жана Ресурстар

Компоненттер, инструменттер жана ресурстар
Компоненттер, инструменттер жана ресурстар

Эгерде сиз бул долбоорду Lego Mini менен кайталап жатсаңыз, анда менин мурунку Нускамада көрсөтүлгөн бардык нерселер керек болот. Сизге керек болгон кошумча нерсе - бул мүйүз үчүн жана оюн учурунда бир топ тажатма үндөрдү чыгаруу үчүн колдонулган пассивдүү ызылдак (өчүрүлүшү мүмкүн).

Программалык камсыздоону талкуулап жатканда түшүнүктүү боло тургандай, оюн үчүн Lego Mini колдонуунун кажети жок. Сиз башка Lego комплектин колдонсоңуз болот, же чынында эле ESP8266 иштеп чыгуу тактасына илинген нандын үстүндөгү LED диапазону. Кээ бир реле менен сиз үйүңүздүн бөлмөсүнүн жарыгын колдоно аласыз. Балдар, бул тууралуу биринчи кезекте ата -энеңерден сурагыла.

Ошо сыяктуу эле, оригиналдуу долбоор үчүн тизмеленгендерден башка эч кандай кошумча инструменттердин же ресурстардын кереги жок.

Эгерде сиз долбоордун баштапкы сүрөттөмөсүн окуган саналуу адамдардын катарында болсоңуз, анда Lego Mini менин чоңоюп калган кызыма белек катары сатылып алынганын билишет, ал дээрлик окшош "чыныгы" Мини бар же дээрлик окшош Бул "Классика" эмес, Жаңы Мини болушу мүмкүн. Маанилүү кошумча компоненттердин жоктугу бул жаңы долбоорду ого бетер кызыктырды, анткени ал Lego Mini 2.0ди жаңы жылдык белек катары эффективдүү түрдө бир тыйынга туруп кайра белек кылууга мүмкүндүк берет. Genius!

2 -кадам: Аппараттык өзгөртүү

Аппараттык өзгөртүү
Аппараттык өзгөртүү

Оригиналдуу долбоордо жеке башкарылуучу RGB ички LEDлер болгон. Булар мен иштеп чыгуу тактасы катары колдонгон NodeMCUдагы үч казыкты жалмап кетишти. Lego Mini ээси менен дискреттик кеңешүүдөн кийин, RGB светодиоддору аз колдонулган өзгөчөлүк экени аныкталган. Бул маанилүү чалгындоо болчу, анткени мага зумур/мүйүз үчүн казыкты бошотуу керек болчу.

Жогорудагы схема баштапкы долбоордон алынган. Бул долбоорго керектүү болгон жалгыз өзгөрүү RGB светодиоддорун алып салуу жана үч боштондук казыкты төмөнкүдөй колдонуу болгон:

  • D1 сигналды башкаруу сигналы үчүн (ошондой эле түздөн -түз 5VDC электр булагына туташтырылган)
  • Ак ички LED үчүн D7
  • D8, мен "дискотека" деп атаган түстүү LEDдердин жаркыраган биринин

Зумзер өзү кыймылдаткыч бөлүмүнүн астына тыкан жабылып калгандыктан, зымдарды NodeMCUге кайра иштетүү бир заматта болду.

3 -кадам: GUIди жаңыртуу

GUI жаңыртылууда
GUI жаңыртылууда
GUI жаңыртылууда
GUI жаңыртылууда
GUI жаңыртылууда
GUI жаңыртылууда

GUIди жаңыртуунун биринчи кадамы төрт өзүнчө веб баракты түзүү болгон:

  • Смартфонуңуздагы ыңгайлаштырылган сөлөкөт аркылуу ишке кирүүчү жана башка барактарга шилтеме берген "экранда экран"
  • Жарыкты көзөмөлдөгөн "Controls" баракчасы (жана азыр, албетте, мүйүз)
  • "Оюн" баракчасы
  • Конфигурация параметрлерин камтыган орнотуу баракчасы:

    • Үндү күйгүзүү жана өчүрүү
    • Убакыт алкагын коюу (Мини интернеттен убакыт алат, ошондо ал жарыкты керектүү убакытта жаркырата алат)
    • "Авто чырактардын" качан айланадагы жарык деңгээлине жараша фараларды күйгүзүп жана өчүрө тургандыгын тууралоо
    • Жогорку упай жана жогорку упай берүүчүнүн атын баштапкы абалга келтирүү (EEPROMдо сакталган)

Функцияларды ушундай жол менен бөлүү, колдонмого окшош тажрыйбаны пайда кылат. Ар кандай ыкмаларды колдонуп көргөндөн кийин, мен Arduino башкы эскизинин 232ден 236га чейинки сызыктарындагы кодду көрдүм. Бул абдан жакшы иштейт - жөн гана индексиңиздин файлын түзүңүз, андан кийин кийинки баракчаларды page1, page2 ж.б. атагыла, мен бардык ресурстук файлдарды (CSS жана сүрөттөр) түпкү маалымат папкасына салууга туура келди, бирок бул чындыгында сайттар үчүн көйгөй эмес бул өлчөм.

Андан кийин, мен CSS жана Javascript менен иштешим керек эле, ал Lego Miniге тиешелүү окшойт. Мен эки тема жөнүндө эч нерсе билбегендиктен, мен бактылуу болгон нерсени алардан мурун, бул жерде көп Google бар болчу. Мен бул жерде CodePenге CSS стилиндеги лего кирпичти уялбастан көчүрүү менен баштадым. Мен ошондой эле баскычтарды текст менен белгилөөдөн баш тартып, Icons8дин жөнөкөй графикасын колдонуп, менин максаттарыма ылайыктуу болгон. Калган түрү ошол жерден өз ордуна келди. Барактар мен сынап көргөн бардык iPhone'дордо абдан жакшы көрсөтүлөт. Бул Android телефондоруна да тиешелүү деп үмүттөнөбүз (Chrome браузеринин столунда ОК окшойт).

4 -кадам: Оюн коду

Оюн коду
Оюн коду

NodeMCU сервери менен смартфондун браузеринин ортосундагы байланыш Websockets аркылуу болот. Колдонуучу баскычты баскандан кийин, браузер NodeMCUге бир же бир нече Mini чырактарына туура келген текстти жөнөтөт. Оюндун агымын көзөмөлдөө үчүн кошумча белгилер жөнөтүлөт. Андан кийин Arduino коду алынган символдун негизинде иш -аракет кылат. Websocket байланышы экилик жана тексттик символдорду гана башкара алат, андыктан бүтүн сандар үчүн (мисалы, убакыт алкагы) бир аз которуу керек.

Мен айткандай, мен башында негизги оюн функциялары үчүн шилтемеленген Hackster долбоорунун кодун колдонууну күткөн элем. Мен күткөн нерсе, оюнчу баскычты баскандан кийин, тийиштүү LED күйүп, код туура келгенин текшерүү үчүн бардык диоддордо санарипти окуйт (Hackster проекти физикалык баскычтын киришин текшерет, бирок ошол эле ой). Бул кандайдыр бир деңгээлде иштеди, бирок мага дагы эле түшүнүксүз болгон себептерден улам, кемчиликсиз эмес. 10% жөнүндө Мини туура эмес баскыч басылганын айтат, чынында, туура болгон. Сериалдык монитордо жана браузердин консолунда көргөн нерселеримдин негизинде баары жакшы көрүндү, андыктан ал эмне үчүн иштебей калганын билбейм.

Ката текшерүүнү киргизүүгө аракет кылгандан кийин, мен LED абалдарын окуу идеясын таштадым жана Websocket текстинин "ырааттуулук" массивинде сакталган туура пинге туура келерин текшерүүчү "жооп" массивин түздүм. эстөө үчүн жарык ырааттуулугун ойнойт. Бул 100% ишенимдүү окшойт, бирок мен аны ишке ашыруу ыкмасы бир аз татаал болсо да. Бул ыкманы ойлоп тапкандан кийин, мен кээ бир санариптик кулпунун иштөө ыкмасын кызыктуу изилдөө жана оюнда колдонулган ыкмага окшош болгон окуяга туш болдум.

Кнопкаларды киргизүү убактысы азыр браузер тарабында Javascript менен иштелип жатат (мен баскычты киргизүүнүн ортосунда абдан берешен 10 секундга уруксат берем) жана оюндун агымы азыр толугу менен катаал эмес, оюнчу тарабынан көзөмөлдөнөт. Дисплей кийинки баскычты басуу үчүн калган убакытты көрсөтүүчү терезелерди камтыйт жана оюнчу ырааттуулукту туура тапшырганга чейин калган киргизүүлөрдүн санын камтыйт.

Жогорку упай EEPROMде сакталат (же ESP8266 дүйнөсүндө EEPROM үчүн эмне өтөт) жана эгер оюнчу жаңы жогорку упайга жетсе, калкыма терезе аларга EEPROMдо сакталып турган аталышын киргизүүгө мүмкүндүк берет. Бул баалуулуктарды Орнотуу баракчасы аркылуу баштапкы абалга келтирсе болот (мунун мыйзамдуу себептери болушу мүмкүн деп ишенем).

Мунун баарын айткандан кийин, мен Hackster оюн кодунун татыктуу бөлүгүн кайра колдондум, ал ишти тездетет.

5 -кадам: Коддун калган бөлүгү

Калган код
Калган код

Hackster долбоорунун кодуна салыштырмалуу, менин Arduino эскизим абдан чоң көрүнөт, атүгүл маалымат файлдарында HTML, CSS жана Javascript жок. Бирок эскиздин негизги бөлүгүн серверди түзүү жана башкаруу, NTP убактысын алуу, mDNS алуу, абадан жаңыртууну камсыз кылуу, WiFi башкаруу, SPIFFS файлын башкаруу жана башкалар сыяктуу негизги операцияларга тиешелүү көптөгөн функциялар түзөт.

HTML файлдарындагы Javascript биринчи кезекте Websocket билдирүүлөрүн иштетүү (кабыл алуу жана жөнөтүү) жана GUI интерактивдүүлүгүн жогорулатуу үчүн.

Мен айтып өткөндөй, мен "авто чырактар" функциясынын функциясын жакшыртууну кааладым, ал NodeMCUнун жалгыз аналогдук пининдеги жарыкка көз каранды каршылыгын колдонуп, айланадагы жарыкты аныктап, Mini чырактарын алдын ала коюлган деңгээлде күйгүзөт (Оюн режиминде эмес болгондо), Албетте). Бул өтө маанилүү эмес проектте өтө маанилүү нерсе болгону менен, мени баштапкы долбоордо мен күйгүзүү босогосун каттуу коддоп койгондугум жана колдонуучунун жарык босогосунун бул босого менен кандай байланышы бар экенин көрүүгө эч кандай мүмкүнчүлүгү жок экени тынчсыздандырды. Эми жарык деңгээлинин көрсөткүчү ар бир беш секундда Орнотуу баракчасына жөнөтүлөт жана ошол баракта күйгүзүү жана өчүрүү учурдагы босоголору көрсөтүлөт (аны колдонуучу конфигурациялай алат). Ошентип, бул боюнча иш жасалды.

Ой, дээрлик унутуп калдым. Код GitHubда бул жерде. Жүктөп алгандан кийин, бүтүндөй пакетти жаңы папкага салыңыз, Arduino эскизин, анан маалымат папкасынын мазмунун SPIFFSке жүктөңүз.

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