Differences

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

Link to this comparison view

pm:prj2026:florin.stancu:andrei.toader2407 [2026/05/09 01:17]
andrei.toader2407 [Lista de piese]
pm:prj2026:florin.stancu:andrei.toader2407 [2026/05/24 14:59] (current)
andrei.toader2407
Line 25: Line 25:
 Schema bloc a interactiunii dintre module: Schema bloc a interactiunii dintre module:
  
-{{:​pm:​prj2026:​florin.stancu:​schema_bloc.png?200|}}+{{:​pm:​prj2026:​florin.stancu:​schema_bloc_1_.png?700|}}
  
 ===== Hardware Design ===== ===== Hardware Design =====
 +
 +{{:​pm:​prj2026:​florin.stancu:​schema_electrica.png?​700|}}
  
 ==== Lista de piese ==== ==== Lista de piese ====
-  +^ Componenta ^ Cantitate ^ Rol in proiect ^ 
-^ Componenta ​                       ^ Cantitate ^ Rol in proiect ​                         +| ATmega328P Xplained Mini | 1 | Microcontroller principal | 
-| ATmega328P Xplained Mini          | 1         ​| Microcontroller principal ​              ​+| Display TFT color 1.8" ST7735S | 1 | Afisarea jocului si animatiilor | 
-| Display TFT color 1.8" ST7735S ​   | 1         ​| Afisarea jocului si animatiilor ​        ​+| Modul DFPlayer Mini (TF-16P) | 1 | Redare sunete MP3 realiste | 
-| Modul DFPlayer Mini (TF-16P) ​     | 1         ​| Redare sunete MP3 realiste ​             +| Difuzor ultra-slim 40mm 8 ohm 0.5W | 1 | Iesire audio | 
-| Difuzor ultra-slim 40mm 8 ohm 0.5W| 1         ​| Iesire audio                            +| Card microSD (8GB) | 1 | Stocare fisiere audio MP3 | 
-| Card microSD (8GB)                | 1         ​| Stocare fisiere audio MP3               ​+| Buton arcade 24mm galben ​| 2 | Butoane ​RED si BLACK (mini-joc Double or Nothing) | 
-| Buton arcade ​iluminat galben ​24mm | 2         ​SPIN si RED (joc principal + Red/Black) | +| Buton arcade ​24mm verde | 2 | Butoane SPIN si BET+ (joc principal) ​
-| Buton arcade ​iluminat ​verde 24mm  ​| 2         ​| BET+ si BLACK                           +| Breadboard ​830 puncte ​+ fire dupont | 1 | Conexiuni hardware ​prototip ​
-| Breadboard + fire dupont ​         | 1         ​| Conexiuni hardware ​                     +| Rezistenta ​1K ohm | 1 | Protectie pin RX DFPlayer ​Mini |
-| Rezistenta ​1k ohm                 ​| 1         ​| Protectie pin RX DFPlayer ​              | +
-| Rezistenta 220 ohm                | 4         | Limitare curent LED-uri butoane arcade  ​|+
  
 +**Nota:** LED-urile integrate in butoanele arcade necesita DC 12V si nu sunt folosite in acest proiect.
 +
 +{{:​pm:​prj2026:​florin.stancu:​poza_proiect.jpeg?​700|}}
  
 ===== Software Design ===== ===== Software Design =====
  
 +==== Mediu de dezvoltare ====
  
-<note tip> +Proiectul a fost dezvoltat folosind
-Descrierea codului aplicaţiei (firmware)+  * **PlatformIO** ​(extensie VSCode— compilareupload, monitor serial 
-  * mediu de dezvoltare ​(if any(e.g. AVR StudioCodeVisionAVR) +  * **Framework Arduino** ​pe board Arduino Uno R3 
-  * librării şi surse 3rd-party (e.g. Procyon AVRlib) +  ​* **avr-gcc** (toolchain-atmelavr— compilator C/C++ pentru AVR
-  ​algoritmi şi structuri ​pe care plănuiţi să le implementaţi +
-  * (etapa 3surse şi funcţii implementate +
-</note>+
  
-===== Rezultate Obţinute =====+==== Librarii si surse 3rd-party ​====
  
-<note tip> +  * **Adafruit ST7735 and ST7789 Library** — driver display TFT color ST7735S 
-Care au fost rezultatele obţinute în urma realizării proiectului vostru+  * **Adafruit GFX Library** — librarie grafica de baza (text, forme, culori) 
-</note>+  * **DFRobotDFPlayerMini** — control modul audio DFPlayer Mini prin UART 
 +  * **SoftwareSerial** (inclusa in framework Arduino) — UART software pe pinii D6/D7 
 +  * **avr/​eeprom.h** (librarie AVR standard) — citire/​scriere EEPROM intern 
 + 
 +==== Structura codului ==== 
 + 
 +Codul este organizat modular in 4 perechi de fisiere header/​sursa:​ 
 + 
 +  * **buttons.h / buttons.cpp** — citire butoane cu debounce non-blocant bazat pe millis(). Implementeaza o masina de stari per buton cu flaguri de edge (falling edge = apasare unica). Foloseste registrele AVR DDRD, PORTD, PIND direct. 
 +  * **dfplayer.h / dfplayer.cpp** — control modul audio DFPlayer Mini prin SoftwareSerial la 9600 baud. Include flag de disponibilitate (df_ok) care permite jocului sa continue si fara sunet. 
 +  * **display.h / display.cpp** — driver complet pentru TFT ST7735S in mod landscape (160x128px). Deseneaza simboluri grafice (7, BAR, stea, cirese, diamant) pixel cu pixel folosind primitive Adafruit GFX. Fiecare ecran al jocului are o functie dedicata. 
 +  * **game.h / game.cpp** — logica completa a jocului implementata ca masina de stari finita (FSM) cu 7 stari: START, IDLE, SPINNING, RESULT, REDBLACK, GAMEOVER, STATS. 
 + 
 +==== Algoritmi implementati ==== 
 + 
 +**Debounce non-blocant:​** 
 +Fiecare buton are o structura proprie cu timestamp-ul ultimei schimbari de stare. La fiecare apel buttons_update() se verifica daca au trecut 40ms de la ultima schimbare — daca da, starea e considerata stabila. Flagul de edge e setat o singura data per apasare si consumat de game_run()
 + 
 +**Masina de stari FSM:** 
 +Jocul trece prin stari definite in enum GameState. Fiecare stare raspunde doar la evenimentele relevante ei, eliminand comportamente nedorite. Tranzitiile sunt clare si loggate prin Serial pentru debug. 
 + 
 +**Generator de numere pseudo-aleatoare:​** 
 +Seed-ul este generat la pornire din zgomotul analogic al pinului A0 (flotant) XOR cu micros() XOR cu creditele din EEPROM, pentru a asigura secvente diferite la fiecare pornire. 
 + 
 +**Probabilitati simboluri (din 20):** 
 +  * 7 = 1/20 (5%) 
 +  * BAR = 3/20 (15%) 
 +  * STAR = 4/20 (20%) 
 +  * CHERRY = 6/20 (30%) 
 +  * DIAMOND = 6/20 (30%) 
 + 
 +**Animatie spinning cu decelerare:​** 
 +Primele SPIN_FRAMES-5 cadre ruleaza la interval constant (55ms). Ultimele 5 cadre incetinesc progresiv cu +35ms per cadru, simuland decelerarea rolelor reale. 
 + 
 +**Persistenta EEPROM:** 
 +Creditele, numarul total de spinuri si cel mai mare castig sunt salvate in EEPROM la fiecare spin. La pornire se verifica un magic number (0xABCD) pentru a detecta primul boot si a initializa valorile default. 
 + 
 +**Tabel de castiguri:​** 
 +^ Combinatie ​      ^ Multiplicator ^ Castig la miza 5 ^ 
 +| 7 - 7 - 7        | x20 (JACKPOT) | 100 credite ​     | 
 +| BAR - BAR - BAR  | x10           | 50 credite ​      | 
 +| STAR - STAR - STAR | x5          | 25 credite ​      | 
 +| 3x acelasi simbol | x3           | 15 credite ​      | 
 +| 2x acelasi simbol | x1           | recuperezi miza  | 
 +| Nimic            | x0            | pierzi miza      | 
 + 
 +==== Periferice AVR utilizate ==== 
 + 
 +^ Periferic ^ Utilizare ^ 
 +| GPIO (PORTD) | Citire butoane arcade cu pull-up intern | 
 +| SPI hardware (PORTB) | Comunicatie cu display TFT ST7735S | 
 +| UART software (SoftwareSerial) | Comunicatie cu DFPlayer Mini | 
 +| EEPROM intern | Salvare persistenta credite si statistici | 
 +| ADC (A0) | Generare seed aleator din zgomot analogic | 
 +| Timer (millis) | Debounce non-blocant si animatii | 
 + 
 +===== Rezultate Obtinute ===== 
 + 
 +Proiectul a fost realizat complet si functional. Au fost atinse urmatoarele rezultate:​ 
 + 
 +  * Jocul de tip slot machine functioneaza corect cu animatii fluide pe display-ul TFT color 
 +  * Sunetele sunt redate realist prin modulul DFPlayer Mini la fiecare eveniment (spinning, castig, pierdere, jackpot) 
 +  * Cele 4 butoane arcade raspund corect datorita debounce-ului non-blocant implementat 
 +  * Mini-jocul Red or Black functioneaza corect dupa fiecare castig 
 +  * Creditele si statisticile sunt salvate persistent in EEPROM si supravietuiesc deconectarii 
 +  * Ecranul de statistici este accesibil prin tinerea apasata a butonului BLACK 2 secunde
  
 ===== Concluzii ===== ===== Concluzii =====
 +
 +Proiectul a demonstrat integrarea mai multor periferice AVR intr-un produs interactiv functional. Principalele provocari intalnite au fost:
 +  * Debounce-ul butoanelor mecanice arcade care generau apasari multiple
 +  * Initializarea corecta a modulului DFPlayer Mini cu delay suficient la pornire
 +  * Lipirea headerului de pini pe display-ul TFT
 +  * Configurarea corecta a mediului PlatformIO pentru Arduino Uno
 +
 +Proiectul poate fi extins cu iluminarea butoanelor arcade (necesita sursa de 12V separata), un ecran mai mare sau un modul Bluetooth pentru control wireless.
  
 ===== Download ===== ===== Download =====
pm/prj2026/florin.stancu/andrei.toader2407.1778278628.txt.gz · Last modified: 2026/05/09 01:17 by andrei.toader2407
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