Table of Contents

Micro:Bit Console

Dinu Dan Nicolae 333CC

Introducere

Prezentarea pe scurt a proiectului vostru:

Descriere generală

Consola este echipată cu un set de trei butoane care permit controlul direcțional (viraj la stânga, dreapta) și un buton pentru pauză/restart, precum și un ecran LCD pentru afișarea informațiilor de joc. Pentru dezvoltarea pe microcontrolerul Micro:Bit, mă voi folosi de API-ul CODAL, care va îmbunătăți performanțele consolei și va face experiența de utilizare mai rapidă și mai plăcută. Utilizarea CODAL permite o mai bună gestionare a resurselor hardware și optimizează răspunsul la comenzi, oferind astfel o interacțiune fluidă și intuitivă cu jocul.

Hardware Design

Schema plăcii de dezvoltare MicroBit V2.

Schema proiectului realizată in TinkerCad.

Schema electronică a proiectului.

De asemenea, interactiunea cu ecanul LCD va fi realizata prin SPI, iar frecventa va fi setata la 64 MHz. Conexiunea ecranului LCD cu placa de dezvoltare va fi realizată astfel:

Software Design

Link pentru vizionarea unui demo al proiectului:

https://youtube.com/shorts/Q7knMvZmnyo?feature=share

Din punct de vedere al software-ului, proiectul se foloseste de runtime-ul DAL/CODAL. Acesta este un framework care ofera un strat consistent de abstractizare a interactiunii dintre hardware si software. Codal incorporeaza si foloseste concepete de POO pentru a reprezenta si gestiona componentele hardware (placa de dezvoltare, butoanele si ecranul).

Oferind o perspectiva asupra video-ului prezentat in demo, poiectul implementeaza 3 idei generale:

Acesta este un scurt exemplu din workflow-ul proiectului folosind resursele puse la dispozitie de framework-ul CODAL.

if(!uBit->io.P9.getDigitalValue())
{
    paused=!paused;
    if(paused==true)
        pauseGame();
    else updateScreen(img,lcd);
        uBit->sleep(400);
}

Acesta este un exemplu al interactiunii dintre hardware si software folosind abstractizarea oferita de framework-ul CODAL. “uBit” este o instanta a clasei “MicroBit” prin care pot referentia componentele hardware atasate la μC.

Intreaga afisare a jocului este creata prin umplerea pixelilor cu valorile dorite, pe anumite pozitii (nu exista imagini predefinite/incarcate, totul este “desenat” in cod).

void Game::drawBackground(ManagedBuffer buf) {
    uint16_t *p = (uint16_t *) &buf[0];
    uint16_t value=LCD_GREEN_16_BIT;
    while(p<(uint16_t *) &buf[buf.length()])
    {
        *p=value;
        p++;
    }
}

Aceasta functie primeste ca parametru o instanta a clasei ManagedBuffer. Aceasta reprezinta transpunerea ecranului intr-un tablou unidimensional. Astfel, folosind un pointer de unsigned 16 voi traversa acest tablou si voi adauga valoarea (culoare) pe pozitia dorita. Ulterior, datele vor fi afisate astfel:

void Game::updateScreen(ManagedBuffer buf,Adafruit_ST7735 *lcd) {
    lcd->sendData(0, 0, LCD_WIDTH, LCD_HEIGHT, buf.getBytes());
    uBit->sleep(500);
}

Adafruit_ST7735 *lcd: Acesta este un pointer către o instanță a clasei Adafruit_ST7735, care este o clasă pentru gestionarea unui afișaj. Aceasta conține metode pentru inițializarea afișajului, trimiterea de date către acesta și alte operații legate de afișaj.

Prin aceeasi metodologie am “desenat” ecranul de start, pauza, background-ul (soseaua) si masinile jucatorului, cat si ale NPC-urilor.

Functionalitatiile jucatorului sunt:

In momentul schimbarii benzii, masina jucatorului este stearsa si redesenata pe noua banda. In acelasi mod sunt gestionate masinile NPC-urilor. Se aleg valori random pentru delay-ul spawn-ului si banda. Ulterior, acestea sunt sterse si redesenate cu un offset pentru a simula miscarea acestora.

In cazul unei coliziuni programul va reseta jocul si va afisa ecranul de start.

Rezultate Obţinute

Sunt multumit de stadiul curent al proiectului. Rezultatul este cel pe care mi l-am propus pentru moment, cosiderand ca exista o posibilitate de scalabilitate a acestui proiect atat din punct de vedere hardware, cat si software pentru a face experienta una mult mai interactiva si mai captivanta.

Concluzii

Pe parcursul dezvolatarii acestui proiect am intampinat atat probleme legate de partea software, cat si de hardware. Desi hardware-ul nu este unul complex, intampinam pierderi de conexiune dintre fire. Astfel, in mod regulat conexiunile cu breadboard-ul necesitau mici ajustari.

Din punct de vedere al software-ului, research-ul cu privire la functionalitatea si utilizarea framework-ului CODAL a reprezentat o parte esentiala a invatarii si adaptarii la idea initiala a proiectului. Folosirea CODAL a adus multa claritate in manipularea hardware-ului pus la dispozitie de Micro:Bit, oferind o abordare familiara principiilor de POO. Principala provocare cu privire la dezvoltarea software-ului a fost “desenarea” jocului in sine, de la background pana la masina jucatorului si a NPC-urilor a necesitate precizie si rabdare in privinta determinarea pozitiilor acestora.

Cu toate aceste provocari, proiectul a oferit o oportunitate valorasa de invatare despre integrarea si utilizarea CODAL, interactiunea dintre hardware si software si explorarea unei noi tehnologii.

Download

dinudan333cc_microbitconsole.zip

Bibliografie/Resurse

Microbit CODAL:

https://tech.microbit.org/software/runtime/

https://lancaster-university.github.io/microbit-docs/

https://github.com/lancaster-university/microbit-v2-samples

Microbit Hardware:

https://tech.microbit.org/hardware/schematic/

Export to PDF