Proiectul are ca scop și constă în implementarea renumitului joc Snake, pe care cu toții îl știm.
Jucătorul, cu ajutorul unui joystick, impune direcția pe care șarpele trebuie s-o urmeze pentru a ajunge la mâncare. Regulile sunt simple: cu cât colectează mai multă mâncare, cu atât dimensiunea șarpelui crește.
Jocul se termină în momentul în care șarpele își mușcă propria coadă.
VRx conectat la A2
VRy conectat la A3
GND conectat la GND
VCC conectat la 5V
SW neconectat
Are pinii conectați la modulul de control MAX7219.
CLK conectat la D8
CS conectat la D9
DIN conectat la D10
Pe lângă acestea, mai avem conectat Buzzer-ul la D11.
Codul a fost scris în Arduino IDE. Pentru dezvoltarea proiectului, m-am folosit de biblioteca LedControl.h, care are funcții implementate pentru aprinderea/stingerea ledurilor de pe matrice, setarea intensității și multe altele. Matricea vine la pachet cu un modul de control ( MAX7219) pentru a nu fi necesar a lega toți cei 16 pini ai matricei la plăcuța arduino.
Inițial, sunt definiți pinii (cei de la secțiunea de Hardware) și structurile. Am folosit structurile Point și Coordinate pentru a ține date despre un punct de pe matrice și o coordonată.
struct Point { int row = 0; int col = 0; Point(int row = 0, int col = 0): row(row), col(col) {} };
struct Coordinate { int x = 0; int y = 0; Coordinate(int x = 0, int y = 0): x(x), y(y) {} };
În etapa de setup, se inițializează matricea și coordonatele capului șarpelui (în mod random) și se afișează mesajul „SNAKE - THE GAME” pe matricea LED.
În etapa loop, se generează mâncarea în mod random, se citesc datele primite de la joystick, se calculează pozițiile șarpelui și se verifică dacă, între timp, s-a ajuns în starea Game Over.
În cazul în care se ajunge în starea Game Over (din pricina faptului că șarpele și-a mușcat propria coadă, se afișează pe matrice mesajul „GAME OVER” și se reinițializează jocul: mâncarea este pusă într-un loc random și capul șarpelui la fel. Inițial, șarpele are lungime 3 (trei leduri luminoase).
Funcții:
// generează mâncarea random void generateFood(); // citește datele trimise de joystick și setează direcția void scanJoystick(); // calculează mișcările șarpelui, verifică dacă acesta a ajuns pe poziția mâncării // și transmite un ton prin buzzer în caz afirmativ void calculateSnake(); // dacă șarpele iese din ecran, acesta apare în cealaltă parte void fixEdge(); // verifică dacă jocul a ajuns în starea „Game Over” void checkIfOver(); // reinițializează matricea și jocul void reinit(); // clipește ecranul de 7 ori și se sting ledurile care indicau poziția șarpelui void clearSnake(); // funcție folosită pentru afișarea mișcărilor pe serială void debugInSerial(); // afișează mesajul „SNAKE - THE GAME” pe matrice void showStartMessage(); // afișează mesajul „GAME OVER” pe matrice void showGameOverMessage();
Dezvoltarea proiectului a fost o experiență plăcută pentru mine, am învățat mai multe despre Arduino, matrice LED, joystick și buzzer. Cu siguranță pot fi adăugate mai multe funcționalități, poate chiar mai multe matrici led pentru a face terenul mai mare.
Per total, consider că mi-a ieșit bine și sunt mulțumit de output.
25/04/2021 → confirmarea proiectului; realizarea paginii wiki, a introducerii și a schemei bloc
29/05/2021 → realizare software design
29/05/2021 → realizare hardware design
30/05/2021 → actualizare proiect (hardware + software)
30/05/2021 → finalizare implementări hardware și software
31/05/2021 → actualizare pagină wiki
01/06/2021 → finalizare pagină wiki