Autorul poate fi contactat la adresa: Login pentru adresa
PixelSurf este un joc unde poți conduce o navă spațială într-o cursă cu obstacole. Pentru a caștiga, jucatorul este nevoit să evite coliziunea cu obstacolele prin mișcari stanga-dreapta ale placuței.
Sursa de inspirație este jocul AudioSurf, iar ideea inițială a fost să fac un joc controlat prin accelerometru. Utilitatea proiectului provine din experiența de lucru cu microprocesorul și restul componentelor.
Componentele principale din care va fi alcătuit proiectul (exceptând plăcuța cu atmega32) vor fi accelerometrul și LCD-ul grafic.
Microprocesorul va genera pentru început trasee cu obstacole amplasate într-un mod aleatoriu, va face verificarea pentru coliziuni și va asigura transmiterea de informație între mediul de input și cel de output.
Jocul începe prin apasarea butonului de start sau de reset, iar jucatorul are o perioada scurtă de acomodare înainte de apariția obstacolelor.
Lista de piese:
Nume | Preț |
---|---|
LCD TFT 2.2” | 50 lei |
ADXL345 | 25 lei |
Regulator tensiune 3.3v | 2.5 lei |
30x cabluri mama-mama | 15 lei |
Baretă pini tata 2×40 | ~7 lei |
Baretă pini mama 2×10 | ~5 lei |
Condensator electrolitic x3 | ~2 lei |
Fludor | 10 lei |
Placă cu găurele | 10 lei |
Schema electrică
Dezvoltarea s-a facut intergal pe Linux. Am urmat pasii de pe wiki pentru a instala compilatorul si bibliotecile. Am folosit avr-gcc pentru compilarea surselor, iar scrierea pe micro-controller am făcut-o cu binarul furnizat tot pe site (bootloadHID).
Bibliotecile folosite au fost:
1. Biblioteca pentru controller-ul de LCD ili9341. Singura biblioteca portata pe dispozitive AVR și care nu depinde de vreun framework software se gaseste la adresa: link. Din fericire biblioteca este în același timp bine scrisă cât și ușor de înțeles. A fost nevoie doar de modificări minore pentru a o putea folosi. Biblioteca folosește protocolul SPI și pune la dispozitie mai multe metode de output. Contribuția mea (pe langa redenuirea unor regiștrii și schimbarea altora) a fost doar să adaug funcții de afișare numere și string-uri.
2. Biblioteca pentru ADXL345 Formată inițial din doua biblioteci, una pentru protocolul I2C și una pentru inițializare / comunicare cu ADXL. Forma finală face parte din biblioteca downloads
Am reununțat la biblioteca proprie pentru ADXL pentru ca cea de pe blogul de mai sus are functii mai avansate, cea mai importantă este cea care calculeaza roll-ul.
Implementare
Jocul este unul destul de simplist, cuprinde două părți importante.
LCD-ul, deși este puțin încet, are mult potențial pentru a fi folosit la proiecte cu grafică mai complexă. Am încercat să folosesc ASCII art - voiam ca la finalul jocului să ajung la o planetă desenată din ASCII - dar am fost limitat de dimensiunea flash-ului. Binarul deja are 27KB.
Proiectul m-a învățat o latură a ingineriei pe care nu o cunoșteam deloc și pe care sunt bucuros că am experimentat-o. A fost per total o experiență plăcută din toate punctele de vedere - montarea/lipirea pieselor, interfațarea componentelor, utilizarea, ințelegerea și scrierea de biblioteci, rularea de cod pe un micro-procesor, citirea unui datasheet. Internetul este deja plin de resurse și asta a făcut totul mai ușor, în plus am realizat câte lucruri pot fi facute de fapt cu un minim de cunoștințe și timp la dispoziție.
Realizarea proiectului nu a fost neaparat ușoară, dar asta doar din cauză că am fost neatent și a fost primul proiect de genul (și pentru că nu știu multe lucruri, gen electronică). Protocoalele de comunicație dintre piese sunt ușor de înțeles și folosit, tool-urile la fel. Dupa ce am trecut de stadiul inițial în care nimic nu mergea și nu se aprindea am realizat câtă muncă au depus deja alții pentru ca proiectele de genul ăsta să fie ușor de realizat (ma refer la datasheet-uri și biblioteci). Software puteam face mult mai multe, puteam sa pun niste mitraliere, lasăre, explozii - all the good stuff. Am pierdut însă mult timp încercând sa fac accelerometrul să meargă. Cu siguranță în anii urmatori, avand la dispoziție LCD-uri TFT capabile și biblioteci deja puse pe aici :) or să apară proiecte tot mai colorate.
Arhiva cod sursa: pixel_surf.zip
Saptmana 10-11:
Saptamana 12:
Saptamana 13:
youtube, google, stackoverflow, wikipedia