Autor: Cristescu Cristian
Grupa: 335CA
Proiectul reprezintă o varianta minimalistă a jocului Snake, un jucător controlează un șarpe sub forma unei linii
în mișcare, care se mărește pe măsură ce jucatorul colecteaza mere, scopul fiind acela de a rezista cât mai mult
până la lovirea unui perete sub forma de obstacol. Am ales acest joc deoarece este printe primele jocuri încercate
de mine, iar cerințele sale corespund acestui tip de proiect. Utilitatea acestuia în prezent nu este una sugestivă,
dar consider că ,în funcție de dificultate, te obligă ca utilizator să inveți să menții un nivel de concentrare ridicat
și iți antrenează anumite reflexe.
Pentru realizarea funcționalității, se va folosi un modul analog joystick care are rolul de a muta șarpele
în toate directiile, sus-jos, stânga-dreapta în timp ce segmentul corpului său este în continuă translație
într-un sens. Display-ul care va afișa simularea va fi un modul cu matrice de LED-uri bazat pe un driver
max7219 conectat la alte câteva componente cum ar fi o rezistență, condensatoare, pin headers.
Implementarea am realizat-o în VSCode cu ajutorul extensiei PlatformIO, ce permite lucrul cu module
si biblioteci pentru Arduino. Bibliotecile utilizate sunt:
Simularea jocului se desfașoară în funcțiile setup() și loop():
Realizează inițializările pinilor, ledurilor de pe matrice, recalibrează poziția de pornire
a Analog Joystickului și stabilește poziția șarpelui pe ecran.
Scorul va fi afișat secvențial la serial monitor, urmând ca apoi să se genereze mâncarea în funcție
de pozițiile segmentului șarpelui. În continuare, se vor prelua inputurile din stick și se stabilește
următoarea direcție, verificând în același timp dacă sensul ales este la 180 de grade față de cel
precedent pentru ca respectiva “coliziune” să fie invalidă și jocul să mearga mai departe. Ulterior,
se vor prelucra datele jocului, se actualizează lungimea șarpelui, se va verifica dacă jocul s-a finalizat,
se vor aprinde și stinge ledurile secvențial, generând mișcarea pe ecran. Buzzerul se va activa dupa ce mărul
a fost mâncat și după ce translația șarpelui s-a realizat. La finalul unui “frame” din loop, se verifică dacă
jocul s-a caștigat sau pierdut, în acest caz, reinițializându-se toate variabilele din joc, iar ecranul
“va clipi” de 5 ori ca un efect de resetare a jocului.
Pot spune că am realizat ce mi-am propus de la început, nefiind ceva ieșit din comun. Dificultățile
le-am avut lucrând cu piesele, inițial lucram cu un Arduino Nano pe care îl legam direct de breadboard,
însă, deși am legat toți pinii cum trebuia, unele inputuri, chiar și alimentarea, nu funcționau cum trebuie
și nu îmi dădeam seama câte greșeli sunt în cod sau în schemă. Până la urmă, am scos Nano-ul din breadboard
și l-am legat direct cu fire, însă mai târziu, problema era că nu mai aveam suficiente fire pentru toate
componentele ca să le leg de placă, așa că am trecut la Uno (dispuneam de mai multe fire tată-tată).
Video cu demo-ul: ProiectSnake
A fost interesant să lucrez cu componente fizice, dincolo de toate temele și proiectele software
din facultate. Personal, nu sunt mare fan al electronicilor, dar cumva proiectul acesta a reaprins
o speranță pentru sistemele embedded în viziunea mea, ele oferind aplicații interesante,
chiar utilități oamenilor.
25.04.2021 : Alegerea proiectului
26.05.2021 : Inceperea partii software
27.05.2021 : Inceperea partii hardware
1.06.2021 : Finalizarea partilor hardware si software
2.06.2021 - 3.06.2021 : Realizarea documentatiei
https://github.com/wayoda/LedControl/blob/master/src/LedControl.cpp
https://howtomechatronics.com/tutorials/arduino/8x8-led-matrix-max7219-tutorial-scrolling-text-android-control-via-bluetooth/
https://create.arduino.cc/projecthub/rishab8551/arduino-snake-game-using-arduino-and-martix-6c230c
https://majicdesigns.github.io/MD_MAX72XX/page_parola.html