Orodha ya maudhui:

Mchezo wa Kumbukumbu ya Lego Mini: Hatua 5 (na Picha)
Mchezo wa Kumbukumbu ya Lego Mini: Hatua 5 (na Picha)

Video: Mchezo wa Kumbukumbu ya Lego Mini: Hatua 5 (na Picha)

Video: Mchezo wa Kumbukumbu ya Lego Mini: Hatua 5 (na Picha)
Video: ГРЕНДПА и Гренни В РЕАЛЬНОЙ ЖИЗНИ! Почему они перепутали мой дом? GRANDPA GRANNY Chapter Two 2024, Julai
Anonim
Image
Image
Mchezo wa Kumbukumbu ya Lego Mini
Mchezo wa Kumbukumbu ya Lego Mini

Mwaka mmoja au zaidi iliyopita, niliandika Instructable juu ya kusanikisha rundo la LED kwenye Lego Mini Cooper. Ubunifu, kama ilivyokuwa, ni kwamba LED zinaweza kudhibitiwa na smartphone (au kupitia kivinjari chochote cha wavuti, kwa jambo hilo).

Kama nilivyoelezea kwa bidii katika hiyo Inayoweza kufundishwa, bidii nyingi wakati huo zilihusiana na kuunganisha mini bila kitu chochote kuanguka. Nilishangaa kidogo, Mini baadaye ilinusurika safari kutoka Connecticut kwenda Toronto na imefanya kazi, zaidi au chini, tangu wakati huo.

"Ikiwa haikuvunjwa, aliirekebisha mpaka" itakuwa epitaph yangu, bora, kwa hivyo wakati Mini ilirudi nyumbani kwa Krismasi, ilikuwa wakati wa Lego Mini 2.0. Baada ya yote, ikiwa Tesla inaweza kushinikiza sasisho za programu kwa magari yake, inaweza kuwa ngumu vipi?

Nilikuwa na maoni machache:

  • Boresha kiolesura cha mtumiaji kisichofaa
  • Ongeza pembe!
  • Boresha kipengele cha "taa za kiotomatiki"; na, muhimu zaidi
  • Ongeza kazi ya mchezo (hata mimi niligundua kuwa riwaya ya kuwasha na kuzima taa za Mini na simu yako ingekoma mapema au baadaye)

Kazi ya mchezo ilikuwa kazi kubwa zaidi, sio kwa sababu haikuwa dhahiri kwangu ni aina gani ya mchezo inaweza kuwa. Mini ni dhaifu sana kudumisha mchezo unaohusisha kushughulikiwa (isipokuwa uwezekano wa kukatisha tamaa wa Jenga). Kikwazo kingine ni kwamba sijawahi kupanga mchezo maishani mwangu.

Baada ya mwaka wa kutafakari bila matunda, niliangukia mradi wa Hackster, ambao Arduino Uno inatumiwa kuiga mchezo wa kuchezea kumbukumbu kutoka miaka ya 1970 iitwayo Simon. Kwa kifupi, kifaa cha Simon kilicheza mlolongo wa taa ambazo mchezaji huyo alipaswa kukumbuka na kucheza tena kwa kubonyeza vifungo. Baada ya kila raundi ya mafanikio mlolongo uliongezeka kwa urefu.

Licha ya kuwa wa zabibu zinazohitajika, kwa kweli sikuwahi kusikia mchezo huu, na lazima niseme ni jambo la kushangaza ni nini kilipitisha burudani siku hiyo. Cha kushangaza zaidi ni kwamba mchezo wa Simon bado unauzwa, na upataji hakiki za rave, kwenye Amazon. Kwa wazi, hii ilibidi awe mgombea mkuu kubadilika kwa madhumuni yangu. Baada ya yote, Mini tayari ilikuwa na taa, kwa hivyo ninachohitaji kufanya ni kuweka vifungo vya mwili na kuwa na pembejeo ya mtumiaji iliyotolewa kupitia simu mahiri. Kwa upande wa programu, kwa hivyo, ilionekana hii itakuwa tu kazi ya kukata-na-kubandika.

Lakini kwanza, nilihitaji kufanya marekebisho madogo kwenye vifaa.

Hatua ya 1: Vipengele, Zana na Rasilimali

Vipengele, Zana na Rasilimali
Vipengele, Zana na Rasilimali

Ikiwa unarudia mradi huu na Lego Mini, utahitaji vitu vyote vilivyoorodheshwa kwenye Agizo langu la mapema. Kitu cha ziada tu utachohitaji ni buzzer ya kupita, ambayo hutumiwa kwa pembe na kufanya rundo la kelele za kukasirisha wakati wa mchezo (ambao unaweza kuwa walemavu).

Kama itakavyokuwa wazi wakati wa kujadili programu, hakuna haja ya kweli ya kutumia Lego Mini kwa mchezo. Unaweza kutumia kitanda kingine cha Lego, au kwa kweli kikundi cha LED kwenye ubao wa mkate uliofungwa kwa bodi yoyote ya maendeleo ya ESP8266. Kwa upeanaji mwingine, unaweza hata kutumia taa ya chumba cha nyumba yako. Watoto, waulize wazazi wako kwanza juu ya huyo hata hivyo.

Vivyo hivyo, hakuna zana za ziada au rasilimali zinahitajika zaidi ya zile zilizoorodheshwa kwa mradi wa asili.

Ikiwa wewe ni miongoni mwa watu wachache ambao walisoma maelezo ya awali ya mradi, utajua kwamba Mini Lego ilinunuliwa hapo awali kama zawadi kwa binti yangu aliyekua, ambaye ana Mini sawa "halisi", au karibu kama inaweza kupewa ni Mini Mpya, sio "Classic". Ukosefu wa vifaa vyovyote vya maana vimefanya mradi huu mpya uvutie zaidi kwani itaniwezesha kupeana tena Lego Mini 2.0 kama zawadi mpya ya Krismasi bila gharama hata kidogo. Genius!

Hatua ya 2: Marekebisho ya vifaa

Marekebisho ya vifaa
Marekebisho ya vifaa

Mradi wa asili ulikuwa na taa za ndani za RGB zinazodhibitiwa za kibinafsi. Hizi zilitumia pini tatu kwenye NodeMCU, ambayo nilikuwa nikitumia kama bodi ya maendeleo. Baada ya kushauriana wazi na mmiliki wa Lego Mini, iliamua kuwa RGB za LED zilikuwa huduma isiyotumiwa. Hii ilikuwa akili muhimu kwa sababu nilihitaji kufungua pini kwa buzzer / pembe.

Mchoro wa mzunguko hapo juu unatokana na mradi wa asili. Mabadiliko pekee yanayohitajika kwa mradi huu ilikuwa kuondoa RGB za LED na kutumia pini tatu zilizoachiliwa kama ifuatavyo:

  • D1 kwa ishara ya kudhibiti buzzer (ambayo pia ina waya moja kwa moja kwa usambazaji wa umeme wa 5VDC)
  • D7 kwa LED nyeupe ya mambo ya ndani
  • D8 kwa moja wapo ya taa za rangi za kung'aa, ambazo nimeziita taa ya "disco"

Buzzer yenyewe huondoka vizuri chini ya chumba cha injini ili kukimbia waya kurudi NodeMCU ilikuwa snap.

Hatua ya 3: Kusasisha GUI

Inasasisha GUI
Inasasisha GUI
Inasasisha GUI
Inasasisha GUI
Inasasisha GUI
Inasasisha GUI

Hatua ya kwanza katika kusasisha GUI ilikuwa kuunda kurasa nne tofauti za wavuti:

  • "Splash screen" ambayo huzindua kupitia ikoni ya kawaida kwenye smartphone yako na viungo kwenye kurasa zingine
  • Ukurasa wa "Udhibiti" ambao, vizuri, unadhibiti taa (na sasa, kwa kweli, pembe)
  • Ukurasa wa "Mchezo"
  • Ukurasa wa Kuweka ambayo ina chaguzi za usanidi kama:

    • Kuwasha sauti na kuwasha
    • Kuweka ukanda wa saa (Mini hupata muda kutoka kwa mtandao ili iweze kuwasha taa zake kwa saa na wakati unaofaa)
    • Kurekebisha wakati "taa za kiotomatiki" zitawasha na kuzima taa kulingana na kiwango cha taa iliyoko
    • Kuweka tena alama ya juu na jina la Mfungaji wa Juu (imehifadhiwa katika EEPROM)

Kutenganisha kazi kwa njia hii hufanya uzoefu zaidi kama wa programu. Kupata NodeMCU kutumikia kurasa nyingi ilikuwa moja ya changamoto kwa mradi huu. Baada ya kujaribu njia kadhaa tofauti nikapata nambari unayoona katika mistari 232 hadi 236 ya mchoro kuu wa Arduino. Hii inafanya kazi nzuri - tengeneza faili yako ya kielelezo kisha jina jina kurasa zinazofuata ukurasa1, ukurasa2 nk nilipata ilibidi niweke faili zote za rasilimali (CSS na picha) kwenye folda ya data ya mizizi lakini hii sio swala la tovuti za saizi hii.

Ifuatayo, ilibidi nifanye kazi na CSS na Javascript kutengeneza kitu ambacho kilionekana kama ni cha Lego Mini. Kwa kuwa najua bila chochote kuhusu mada yoyote kulikuwa na Googling nyingi hapa kabla ya kupata kitu nilichofurahi nacho. Nilianza kwa kuiga bila aibu matofali ya mtindo wa CSS kwenye CodePen hapa. Pia nilitaka kuondoka kwenye kuweka alama kwenye vifungo na maandishi na kuishia kutumia picha rahisi kutoka kwa Icons8, ambazo zilikuwa kamili kwa madhumuni yangu. Aina zingine zote zilianguka kutoka hapo. Kurasa zinatoa vizuri kwenye iPhones zote ambazo nimezijaribu. Tunatarajia kuwa hiyo ni kweli kwa simu za Android pia (inaonekana sawa kwenye kivinjari cha Chrome cha desktop).

Hatua ya 4: Nambari ya Mchezo

Kanuni ya Mchezo
Kanuni ya Mchezo

Mawasiliano kati ya seva ya NodeMCU na kivinjari cha smartphone ni kupitia Wavuti. Baada ya kifungo kushinikizwa na mtumiaji, kivinjari hutuma herufi ya maandishi kwa NodeMCU ambayo inalingana na taa moja au zaidi ya Mini. Wahusika wa ziada wanatumwa kudhibiti mtiririko wa mchezo. Nambari ya Arduino kisha inachukua hatua kulingana na herufi iliyopokelewa. Mawasiliano ya wavuti yanaweza kushughulikia herufi za binary na maandishi tu kwa hivyo ubadilishaji unahitajika kwa nambari kamili (k.m eneo la saa).

Kama nilivyosema, hapo awali nilikuwa nikitarajia kutumia nambari kutoka kwa mradi uliounganishwa wa Hackster kwa shughuli za msingi za mchezo. Kile nilichotarajia kitatokea ni kwamba, baada ya mchezaji kubonyeza kitufe, LED inayolingana ingewasha na nambari hiyo ingefanya dijiti Soma kwenye mwangaza wote ili kuona ikiwa moja ya taa imewashwa (mradi wa Hackster unakagua pembejeo za kitufe ni wazo lile lile). Hii ilifanya kazi, aina fulani, lakini kwa sababu ambazo bado hazieleweki kwangu, sio kikamilifu. Karibu 10% ya wakati Mini inaweza kusema kitufe kisicho sahihi kilibonyezwa wakati, kwa kweli, ile sahihi ilikuwa. Kila kitu kilionekana kuwa sawa kulingana na kile ninachoweza kuona kwenye mfuatiliaji wa serial na kwenye kiweko cha kivinjari kwa hivyo sijui kwanini haikufanya kazi.

Baada ya ujanja mwingi kujaribu kujaribu kuangalia makosa, nilitupa wazo zima la kusoma majimbo ya LED na kuunda safu ya "jibu" ambayo huangalia ikiwa maandishi ya Websocket yamepatana na pini sahihi iliyohifadhiwa katika safu ya "mlolongo" ambayo hucheza mlolongo mwepesi kukumbuka. Hii inaonekana kuwa ya kuaminika kwa 100% hata kama njia ambayo nimeitekeleza ni kupigia kidogo. Baada ya kupata njia hii, nilitokea juu ya hii, ambayo ni uchunguzi unaovutia wa njia ambazo kufuli za dijiti zinafanya kazi na zinafanana na njia inayotumika kwenye mchezo.

Muda wa pembejeo za vitufe sasa unashughulikiwa na Javascript kwa upande wa kivinjari (ninaruhusu sekunde 10 za ukarimu kati ya pembejeo za vifungo) na mtiririko wa mchezo sasa unadhibitiwa kabisa na mchezaji badala ya nambari ngumu. Onyesho linajumuisha windows inayoonyesha wakati uliobaki ili kufanya kitufe kinachofuata bonyeza na idadi ya pembejeo iliyobaki kabla ya mlolongo kuwasilishwa kwa usahihi na mchezaji.

Alama kubwa huhifadhiwa katika EEPROM (au kile kinachopita kwa EEPROM katika ulimwengu wa ESP8266) na ikiwa mchezaji atapiga alama mpya ya juu sanduku la pop-up linawaruhusu kuingia jina la chaguo lao, ambalo pia linahifadhiwa katika EEPROM. Maadili haya yanaweza kuwekwa upya kupitia ukurasa wa Kuweka Up (nina hakika kunaweza kuwa na sababu halali za hii).

Pamoja na yote yaliyosemwa, nilitumia tena kipande cha heshima cha nambari ya mchezo wa Hackster ambayo iliongeza kasi sana.

Hatua ya 5: Kanuni Zilizobaki

Kanuni Zilizobaki
Kanuni Zilizobaki

Ikilinganishwa na msimbo wa mradi wa Hackster, mchoro wangu wa Arduino unaonekana mkubwa sana, hata bila HTML, CSS na Javascript zote kwenye faili za data. Lakini sehemu kubwa ya mchoro ni rundo la kazi zinazohusiana na shughuli za kimsingi kama vile kuunda na kusimamia seva, kupata wakati wa NTP, mDNS, kutoa uppdatering wa hewani, usimamizi wa WiFi, usimamizi wa faili wa SPIFFS na kadhalika.

Javascript katika faili za HTML kimsingi ni ya kushughulikia ujumbe wa Websocket (uliopokea na kutumwa) na kuongeza mwingiliano wa GUI.

Kama nilivyosema, nilitaka kuboresha utendakazi wa kipengee cha "taa za kiotomatiki", ambacho hutumia kikaidi kinachotegemea mwanga kwenye pini pekee ya Anodi ya NodeMCU ili kugundua taa iliyoko na kuwasha taa za Mini katika kiwango kilichowekwa mapema (wakati sio katika Njia ya Mchezo, kwa kweli). Ingawa hii ni sehemu ya kipuuzi katika mradi wa kijinga, ilinisumbua kwamba katika mradi wa asili nilikuwa nimeweka kificho ngumu kwenye kizingiti cha kugeuza na kwamba mtumiaji hakuwa na njia ya kuona jinsi kiwango cha taa kilichopo kinahusiana na kizingiti hicho. Sasa usomaji wa kiwango cha mwangaza hutumwa kwa ukurasa wa Kuweka-up kila sekunde tano na ukurasa huo pia unaonyesha vizingiti vya sasa vya kuwasha na kuzima (ambavyo vinaweza kusanidiwa na mtumiaji). Kwa hivyo kazi imefanywa kwa hiyo.

Oh, karibu umesahau. Nambari iko kwenye GitHub hapa. Baada ya kupakua, weka kifurushi chote kwenye folda mpya, pakia mchoro wa Arduino, kisha yaliyomo kwenye folda ya data kwenye SPIFFS.

Ilipendekeza: