This shows you the differences between two versions of the page.
|
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) — compilare, upload, monitor serial |
| - | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | * **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 3) surse ş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 ===== | ||