Differences

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

Link to this comparison view

pm:prj2025:vstoica:cristina.szabo [2025/05/30 01:30]
cristina.szabo
pm:prj2025:vstoica:cristina.szabo [2025/05/30 02:23] (current)
cristina.szabo [Concluzii]
Line 71: Line 71:
 Implementare hardware: Implementare hardware:
  
-{{:​pm:​prj2025:​vstoica:​hardware.jpg?300|}}+{{:​pm:​prj2025:​vstoica:​bbg1.jpeg?300|}} 
 +{{:​pm:​prj2025:​vstoica:​bbg2.jpeg?​300|}} 
  
 Schema electrica: Schema electrica:
  
-{{:​pm:​prj2025:​vstoica:​schematic_brick_breaker.png?​600|}} +{{:​pm:​prj2025:​vstoica:​bbg.png?​600|}} 
-{{:​pm:​prj2025:​vstoica:​cirkit_brick.png?​600|}}+
 ===== Software Design ===== ===== Software Design =====
 +
 == Surse si functii implementate == == Surse si functii implementate ==
  
-=== setup() ​=== +| Functie | Descriere | 
-Initializare pini, afisaj, intreruperi,​ lumina ambientala, stare joc+setup() ​Initializare pini, afisaj, intreruperi,​ lumina ambientala, stare joc 
 +| loop() | Executa logica jocului: miscare, coliziuni, afisare, verificare butoane, vieti si stare finala | 
 +| reset() | Reseteaza complet jocul, afiseaza 3-2-1 cu delay hardware (prin startWaitTimer()) | 
 +| resetBall() | Pune mingea deasupra paletei si ii seteaza directia initiala | 
 +| drawGame() | Deseneaza mingea, paleta si caramizile in functie de luminozitate | 
 +| final() | Afiseaza pe ecran starea finala: “Winner” sau “Loser” si asteapta resetarea | 
 +| updateLeds() | Aprinde LED-urile in functie de numarul de vieti | 
 +| analogReadReg() | Citeste valorile analogice direct din registri ADC pentru viteza mai mare | 
 +| startWaitTimer() | Configureaza Timer1 pentru o intarziere de ~1 secunda, neblocanta | 
 +| ISR(TIMER1_COMPA_vect) | Semnalizeaza cand timpul setat in timer s-a scurs | 
 +| ISR(PCINT2_vect) | Detecteaza apasarea butoanelor de pauza si reset, cu debounce minimal |
  
-=== loop() === +== Stadiul actual al implementarii software ​== 
-Executa logica jocului: miscarecoliziuniafisareverificare butoanevieti si stare finala+Proiectul este complet functional. Jocul poate fi jucat cu minge si paletacaramizile se distrug corectafisajul OLED actualizeaza toate informatiileiar luminile LED indica numarul de vieti ramase. Sunt gestionate corect pauzaresetarea jocului ​si detectarea starii finale (castig sau pierdere).
  
-=== reset() === +== Alegerea bibliotecilor ​== 
-Reseteaza complet jocul, afiseaza 3-2-1 cu delay hardware (prin startWaitTimer())+Am folosit bibliotecile:​
  
-=== resetBall() === +- `Wire.h` pentru comunicatia I2C cu ecranul OLED.
-Pune mingea deasupra paletei si ii seteaza directia initiala+
  
-=== drawGame() === +- `Adafruit_GFX.h` ​si `Adafruit_SSD1306.h` pentru a putea desena si scrie pe ecran.
-Deseneaza mingea, paleta ​si caramizile in functie de luminozitate+
  
-=== final() === 
-Afiseaza pe ecran starea finala: “Winner” sau “Loser” si asteapta resetarea 
  
-=== updateLeds() === +== Element de noutate ​== 
-Aprinde LED-urile in functie de numarul ​de vieti+Proiectul include un mod automat de detectare a luminozitatii ambientale folosind un senzor LDR. In functie de lumina detectata, jocul isi inverseaza culorile pentru a fi vizibil si in intuneric, si in lumina puternica. Jocul foloseste un timer hardware (Timer1) pentru intarzieri precise fara a bloca logica programului. Jocul poate fi pus pe pauza si resetat prin intreruperi generate ​de butoane.
  
-=== analogReadReg() === +== Justificarea utilizarii functionalitatilor din laborator ​== 
-Citeste valorile analogice direct din registri ADC pentru ​viteza mai mare+1. Intreruperi externe ​pentru ​butoanele de pauza si reset.
  
-=== startWaitTimer() === +2. Timer hardware ​(Timer1pentru ​realizarea unui delay neblocant inainte ​de startul jocului si la reseturi.
-Configureaza ​Timer1 pentru ​o intarziere ​de ~1 secunda, neblocanta+
  
-=== ISR(TIMER1_COMPA_vect) === +3. Acces direct la registrii ADC si I/O pentru eficienta sporita si control total.
-Semnalizeaza cand timpul setat in timer s-a scurs+
  
-=== ISR(PCINT2_vect) === +4. Afisaj grafic OLED controlat prin I2Cca aplicatie practica a interfetelor seriale studiate.
-Detecteaza apasarea butoanelor de pauza si resetcu debounce minimal+
  
-===== Rezultate Obţinute =====+== Structura si interactiunea dintre functionalitati ​==
  
-<note tip> +- La pornire, jocul verifica lumina ambientala si seteaza modul de afisare (light/dark).
-Care au fost rezultatele obţinute în urma realizării proiectului vostru. +
-</note>+
  
-===== Concluzii =====+- Se initializeaza paleta, mingea si caramizile.
  
-===== Download =====+- Joystick-ul controleaza paleta, iar mingea se misca automat, interactiunea fiind desenata in timp real pe ecran.
  
-<note warning>​ +- Coliziunile ​cu caramizile sunt detectate si tratateiar vietile sunt afisate cu LED-uri.
-O arhivă (sau mai multe dacă este cazul) ​cu fişierele obţinute în urma realizării proiectului:​ sursescheme, 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**. +Se foloseste un timer hardware pentru intarzieri fara a bloca restul programului.
-</​note>​+
  
 +- Jocul poate fi pus pe pauza sau resetat oricand prin intreruperi externe.
 +
 +- Starea de castig sau pierdere este afisata pe ecran si permite reluarea jocului prin buton.
 +
 +== Calibrarea senzorilor ==
 +
 +Senzorul LDR a fost calibrat folosind citiri brute din `analogReadReg()` la pornirea sistemului. Valoarea de prag (`threshold = 100`) a fost stabilita prin testare practica in mai multe conditii de lumina. Citirea se face cu acces direct la registrii ADC pentru eficienta si viteza.
 +
 +== Optimizari si mediu de dezvoltare ==
 +Folosirea ISR si a timerului hardware pentru delay-uri precise, fara blocaj si accesul direct la registri (`PORTD`, `ADMUX`, etc.) pentru viteza mai mare decat functiile standard Arduino. Mediul de dezvoltare este PlatformIO, codul fiind scris in C++, combinat cu cateva functii din bibliotecile folosite.
 +
 +===== Rezultate Obţinute =====
 +Am atasat o arhiva cu codul meu si un filmulet de prezentare a proiectului.
 +
 +{{:​pm:​prj2025:​vstoica:​brick_breaker_game.zip|}}
 +
 +===== Concluzii =====
 +Am realizat un joc de tip breakout pe un ecran OLED folosind Arduino. Am folosit un fotorezistor pentru a detecta luminozitatea ambientala, astfel incat afisajul sa se adapteze automat la conditiile de iluminare, fie in modul intunecat, fie in modul deschis. Controlul paletei se face prin joystick, iar butoanele imi permit sa pun jocul pe pauza sau sa il resetez. Logica jocului include detectarea coliziunilor mingii cu zidurile, paleta si caramizile, iar eu urmaresc reducerea vietilor si determinarea castigatorului sau invinsului. Am folosit intreruperi pentru butoane si timer pentru delay-uri, ceea ce imbunatateste functionalitatea si raspunsul sistemului. Prin acest proiect am vrut sa creez o experienta interactiva si distractiva.
  
  
 <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​ <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
pm/prj2025/vstoica/cristina.szabo.1748557819.txt.gz · Last modified: 2025/05/30 01:30 by cristina.szabo
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