This is an old revision of the document!
Snake Game
Introducere
ce face? Joc clasic Snake pe Arduino cu 4 butoane pentru mișcare, OLED 128×64 pe I2C pentru grafică și meniu, cronometru (timer hardware/RTC I2C) și salvare/încărcare a progresului pe USB prin SPI.
care este scopul lui? Să aplice practic interfețele I2C, SPI și timerele hardware într-un sistem interactiv de gaming.
care a fost ideea de la care ați pornit? Dorința de a construi un proiect educativ și distractiv care să îmbine control digital, afișaj grafic și stocare externă.
de ce credeți că este util pentru alții și pentru voi? Oferă experiență reală în integrarea hardware-software pe Arduino și un punct de plecare pentru proiecte embedded avansate.
Descriere generală
Module și piese:
4 butoane digitale → Input Handler: citește stările butoanelor pentru direcție și pauză.
Game Logic & Timer ISR: actualizează poziția șarpelui, verifică coliziuni, declanșează frame-ul la interval hardware.
Display Driver (I2C): afișează tabla de joc, meniuri şi cronometru pe OLED.
Storage Manager (SPI): salvează și încarcă scorurile pe card SD.
Cronometru RTC/Timer: furnizează timpul curent sau tick-uri de ceas pentru joc.
Indicator LED (PWM): semnalizează evenimente (e.g. mâncare).
Schemă bloc:
Hardware Design
Listă de piese:
Arduino UNO
4 butoane
OLED 128×64
Modul Card SD Reader
Modul RTC
LED
Breadboard + fire
Schematic:
Proiect asamblat:
Software Design
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ă.
Rezultate Obţinute
Care au fost rezultatele obţinute în urma realizării proiectului vostru.
Concluzii
Download
O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună

.
Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.
Jurnal
Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.
Bibliografie/Resurse
Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.
Export to PDF