Mediu de dezvoltare:
Biblioteci și surse 3rd-party utilizate:
U8g2 – pentru controlul ecranului OLED I2C (SSD1306)
SdFat – pentru scriere/citire eficientă pe cardul SD
RTClib – pentru utilizarea modulului RTC DS1307
Aceste biblioteci sunt folosite pentru a controla perifericele externe și pentru a asigura o interfață abstractă și ușor de utilizat în firmware.
Algoritmi și structuri implementate:
Structuri personalizate: Game, Snake, Point, ScoreEntry, Settings, pentru stocarea stării interne
Meniu interactiv scrollabil cu selecție și confirmare
Gestionare a scorurilor cu salvare persistentă în fișier binar pe card SD
Cronometru de joc bazat pe millis() pentru măsurarea duratei rundei
Logica jocului Snake: detecție coliziuni, extindere șarpe, generare pseudo-random a punctelor
Debounce software pentru butoane (prin verificarea valorii lui millis())
Temporizare afișare ecrane (e.g. “Game Over”, “You Win”) cu delay()
Mod de afișare grafică eficient folosind display.firstPage() / display.nextPage() din U8g2
Surse și funcții implementate:
Structura surselor este modulară, fiecare funcționalitate având propriul fișier:
main.cpp – setup general, bucla principală loop()
menu.cpp – logica meniului principal
game.cpp – logica jocului Snake
display.cpp – inițializarea și funcțiile de afișare
scores.cpp – manipularea scorurilor, salvare/încărcare de pe SD
settings.cpp – meniu pentru opțiuni (e.g. coliziuni ON/OFF)
led.cpp – efecte LED simple (e.g. flash verde când e mâncat un punct)
rtc.cpp – inițializare și citire oră de la modulul RTC
Funcțiile implementate sunt separate clar pe module, urmărind o arhitectură clară și reutilizabilă.
Link GitHub:
https://github.com/andreiv03/snake-game
Proiectul “Snake Game pe Arduino” demonstrează modul în care conceptele fundamentale de interfațare hardware pot fi aplicate într-un context practic și intuitiv. Prin îmbinarea I2C, SPI, PWM și timere hardware, am reușit să dezvolt un sistem embedded interactiv, modular și extensibil, care combină logica jocului clasic Snake cu funcționalități moderne precum salvarea scorurilor, afișaj grafic și feedback vizual.
În urma realizării acestui proiect:
Am aprofundat lucrul cu magistralele I2C și SPI, învățând cum să integrez mai multe module pe aceleași magistrale fără conflicte.
Am utilizat eficient timerul hardware millis() pentru controlul timpului de joc și pentru debounce-ul butoanelor.
Am structurat codul pe module independente, ceea ce facilitează mentenanța și extinderea proiectului.
Am înțeles limitările resurselor hardware (RAM, pini, conflicte de biblioteci) și am luat decizii tehnice pentru optimizarea funcționării sistemului.
Pe viitor, proiectul poate fi extins cu:
Implementarea unui sistem de scoruri bazat pe nume introduse de utilizator.
Integrarea unui buzzer pentru feedback sonor.
Posibilitatea de a selecta mai multe niveluri de dificultate.
Migrarea către un microcontroler cu mai multă memorie pentru suport extins de funcționalități.
În concluzie, acest proiect nu este doar un joc recreativ, ci și un cadru educațional valoros pentru învățarea dezvoltării sistemelor embedded. A oferit o platformă ideală pentru consolidarea cunoștințelor teoretice prin practică, dovedindu-se util atât pentru începători, cât și pentru cei care doresc să experimenteze interacțiunea complexă dintre software și hardware.