Autorul poate fi contactat la adresa: Login pentru adresa
O implementare a celebrului joc de pe nokia, folosind un ecran de nokia 3310. :)
Jucatorul va putea controla jocul folosind doua butoane. El trebuie sa evite sa se atinga pe sine si in acelasi timp sa treaca prin cat mai multe bonusuri pentru a-si mari punctajul. Butoanele vor controla miscarea stanga - dreapta fata de directia de mers a snake-ului. Cand va atinge un perete se va face wrap-around, snake-ul va aparea din partea opusa.
In primul rand a fost necesar sa cobor tensiunea primita de la intrare 5V, la 3.3V, deoarece aceasta este tensiunea de alimentare a ecranului si tensiunea cu care este comandat. Asta a presupus folosirea unui regulator de tensiune (BA033CC0T), un condensator si in plus modificarea quartz-ului deoarece microcontroller-ul nu este facut pentru a functiona la 3.3V. Astfel am inlocuit quartz-ul de 16Mhz cu unul de 12Mhz. Pentru a functiona corespunzator a trebuit recompilat bootleader-ul si reincarcat pe placa. Pentru a nu arde ecranul a trebuit sa introduc un condensator intre pin-ul de VOUT al ecranului si portul la care este conectat. A fost foarte tare ca, din placuta cablajul permitea scaderea tensiunii ce intra pe microncontroller deoarece altfel erau sanse mari ca grupele de rezistente si diode (divizoarele de tensiune) necesare pentru a aprinde folosi ecranul sa nu-mi scada tensiunea suficient. De asemenea daca nu prea te pricepi la partea de estetica pe breadboard, pe placuta imprimata e mult mai simplu si mai elegant.
Componente necesare:
Majoritatea componentelor au fost cumparate de la Comet www.comet.srl.ro
Pentru proiectul meu partea software pentru microcontroller a presupus folosirea librariei pentru lcd de nokia si activarea/folosirea butoanelor pentru a controla snake. Cat despre logica de joc in mare am creat o structura (struct nibble) pentru fiecare nibble (caracter) al snake-ului, care pentru fiecare retine pozitia curenta in harta respectiv directia de mers. Pentru a da update pozitiei, vad ce directie avea nibble-ul din fata la momentul anterior si il updatez pe cel curent in functie de aceasta (desigur pentru a asigura ca folosesc pozitiile de la momentul anterior trebuie inceputa parcurgerea de la sfarsitul sarpelui). La fiecare moment verific daca am o coliziune sau am atins un bonus. In cazul de coliziune afisez mesajul de game over, iar in cazul in care am atins un bonus maresc sarpele si adaug alt bonus intr-o pozitie random. Jocul ar trebui sa fie si wrap around in caz ca este atins unul dintre pereti.
Din pacate ecranul nu a functionat (cel mai probabil ars la lipire). Astfel nu am mai avut cum sa verific nici partea software (si nici pentru ceilalti colegi care aveau acealasi tip de ecran nu a functionat)
Imi pare rau ca nu m-am mobilizat mai din timp/miscat mai repede, pentru ca proiectul ar fi fost foarte interesant, mi s-a parut foarte fain cum cativa pini pot controla atatea lucruri in atatea moduri. Adica inca mi se pare genial ca poti controla doar cu 8 pini afisarea la un ecran lcd, de asemenea e interesant cat de flexibil este microcontroller-ul in sensul in care iti alegi tu care/cum iti folosesti pinii.
Am pus codul pe care l-am facut, dar nu am reusit sa-l verific. nokia_snake_mihai_tiganusv2.zip
Biblioteca pentru utilizarea ecranului37
Proiectele din anii trecuti de la PM