Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2025:atoader:andrei_silviu.voicu [2025/05/26 21:20]
andrei_silviu.voicu [Software Design]
pm:prj2025:atoader:andrei_silviu.voicu [2025/05/28 14:04] (current)
andrei_silviu.voicu [Software Design]
Line 8: Line 8:
 ===== Introducere ===== ===== 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.+  * **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 scorurilor ​pe card SD prin SPI.
   * **care este scopul lui?** Să aplice practic interfețele I2C, SPI și timerele hardware într-un sistem interactiv de gaming.   * **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ă.   * **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ă.
Line 18: Line 18:
   * Game Logic & Timer ISR: actualizează poziția șarpelui, verifică coliziuni, declanșează frame-ul la interval hardware.   * 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.   * Display Driver (I2C): afișează tabla de joc, meniuri şi cronometru pe OLED.
-  * Storage Manager (SPI): salvează și încarcă ​starea jocului (hartă, scor, timp) pe USB.+  * Storage Manager (SPI): salvează și încarcă ​scorurile ​pe card SD.
   * Cronometru RTC/Timer: furnizează timpul curent sau tick-uri de ceas pentru joc.   * Cronometru RTC/Timer: furnizează timpul curent sau tick-uri de ceas pentru joc.
-  * Indicator LED (PWM): semnalizează evenimente (mâncare, Game Over).+  * Indicator LED (PWM): semnalizează evenimente (e.g. mâncare).
  
 **Schemă bloc:** **Schemă bloc:**
  
-{{:​pm:​prj2025:​atoader:​schema-bloc-voicu.jpeg?300|}} +{{:​pm:​prj2025:​atoader:​schema-voicu.jpg?300|}}
 ===== Hardware Design ===== ===== Hardware Design =====
  
Line 32: Line 31:
   * 4 butoane   * 4 butoane
   * OLED 128x64   * OLED 128x64
-  * Modul USB+  * Modul Card SD Reader
   * Modul RTC   * Modul RTC
   * LED   * LED
Line 43: Line 42:
 **Proiect asamblat:** **Proiect asamblat:**
  
-{{:​pm:​prj2025:​atoader:​proiect-asamblat-voicu.jpeg?300|}}+{{:​pm:​prj2025:​atoader:​proiect-voicu.jpg?300|}}
 ===== Software Design ===== ===== Software Design =====
  
Line 59: Line 58:
  
 **Algoritmi și structuri implementate:​** **Algoritmi și structuri implementate:​**
-  ​* **Structuri personalizate:​** Game, Snake, Point, ScoreEntry, Settings, pentru stocarea stării interne+  * Structuri personalizate:​ Game, Snake, Point, ScoreEntry, Settings, pentru stocarea stării interne
   * Meniu interactiv scrollabil cu selecție și confirmare   * Meniu interactiv scrollabil cu selecție și confirmare
   * Gestionare a scorurilor cu salvare persistentă în fișier binar pe card SD   * Gestionare a scorurilor cu salvare persistentă în fișier binar pe card SD
   * Cronometru de joc bazat pe millis() pentru măsurarea duratei rundei   * Cronometru de joc bazat pe millis() pentru măsurarea duratei rundei
-  ​* **Logica jocului Snake:** detecție coliziuni, extindere șarpe, generare pseudo-random a punctelor+  * Logica jocului Snake: detecție coliziuni, extindere șarpe, generare pseudo-random a punctelor
   * Debounce software pentru butoane (prin verificarea valorii lui millis())   * Debounce software pentru butoane (prin verificarea valorii lui millis())
   * Temporizare afișare ecrane (e.g. "Game Over", "You Win") cu delay()   * Temporizare afișare ecrane (e.g. "Game Over", "You Win") cu delay()
Line 82: Line 81:
  
 Funcțiile implementate sunt separate clar pe module, urmărind o arhitectură clară și reutilizabilă. Funcțiile implementate sunt separate clar pe module, urmărind o arhitectură clară și reutilizabilă.
-===== Rezultate Obţinute ===== 
  
-<note tip> +**Link GitHub:**
-Care au fost rezultatele obţinute în urma realizării proiectului vostru. +
-</​note>​+
  
-===== Concluzii ​=====+https://​github.com/​andreiv03/​snake-game 
 +===== Rezultate Obţinute ​=====
  
-===== Download =====+**Video demonstrativ:​**
  
-<note warning>​ +https://www.youtube.com/​shorts/​aLnb0Cn6LsI
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectuluisurse, scheme, etcUn 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**. +===== Concluzii =====
-</​note>​+
  
-===== Jurnal =====+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.
  
-<note tip> +În urma realizării acestui ​proiect:
-Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect ​progresul proiectului. +
-</​note>​+
  
-===== Bibliografie/​Resurse =====+  * 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.
  
-<​note>​ +Pe viitor, proiectul poate fi extins ​cu:
-Listă ​cu documente, datasheet-uri,​ resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. +
-</​note>​+
  
-<​html><​class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​+  * Implementarea unui sistem de scoruri bazat pe nume introduse de utilizator. 
 +  * Integrarea unui buzzer pentru feedback sonor. 
 +  * Posibilitatea de 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.
pm/prj2025/atoader/andrei_silviu.voicu.1748283656.txt.gz · Last modified: 2025/05/26 21:20 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