This is an old revision of the document!


Snake Game

  • Autor: Voicu Andrei-Silviu
  • Grupa: 334CB

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:

  • Platformă – PlatformIO + VSCode pe Windows
  • Target – Arduino UNO (ATmega328P)
  • Framework – Arduino

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

pm/prj2025/atoader/andrei_silviu.voicu.1748283812.txt.gz · Last modified: 2025/05/26 21:23 by andrei_silviu.voicu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0