This shows you the differences between two versions of the page.
pm:prj2025:ajipa:mihai.lemnaru [2025/05/21 00:25] mihai.lemnaru [Software Design] |
pm:prj2025:ajipa:mihai.lemnaru [2025/05/29 22:20] (current) mihai.lemnaru [Software Design] |
||
---|---|---|---|
Line 19: | Line 19: | ||
===== Hardware Design ===== | ===== Hardware Design ===== | ||
- | 🧩 **Lista de piese:** | + | 🧩 **Bill of Materials** |
^ Componenta ^ Link achiziție ^ Cantitate ^ Preț ^ | ^ Componenta ^ Link achiziție ^ Cantitate ^ Preț ^ | ||
| Buton Alb | [[https://www.optimusdigital.ro/ro/butoane-i-comutatoare/1115-buton-cu-capac-rotund-alb.html?search_query=Buton+cu+Capac+Rotund+Alb&results=2|Buton]] | 2 | 1,99 lei | | | Buton Alb | [[https://www.optimusdigital.ro/ro/butoane-i-comutatoare/1115-buton-cu-capac-rotund-alb.html?search_query=Buton+cu+Capac+Rotund+Alb&results=2|Buton]] | 2 | 1,99 lei | | ||
Line 44: | Line 44: | ||
</note> | </note> | ||
+ | **🔌 Conexiuni pini** | ||
- | **🔌 Configurația finală realizată fizic** | + | ^ Arduino Pin ^ Tip ^ Conectat la ^ Note ^ |
+ | | **D10** | Digital | LCD CS | Chip-Select SPI | | ||
+ | | **D9** | Digital | LCD RST | Reset display | | ||
+ | | **D8** | Digital | LCD RS/DC | Data/Command select | | ||
+ | | **D11** | Digital (MOSI) | LCD SDA | SPI MOSI | | ||
+ | | **D13** | Digital (SCK) | LCD SCL | SPI Clock | | ||
+ | | **5V** | Power | LCD VCC, Joystick VCC (+) | +5 V alimentare | | ||
+ | | **GND** | Power | LCD GND , Joystick GND (–), buzzer “–” | Masă comună | | ||
+ | | **A0** | Analog | Joystick VRx | X-axis voltage | | ||
+ | | **A1** | Analog | Joystick VRy | Y-axis voltage | | ||
+ | | **D2** | Digital | Joystick SW | Switch intern joystick → când apeși conectează D2 la GND; se folosește `INPUT_PULLUP` | | ||
+ | | **D4** | Digital | Buton 1 | Buton la +5 V, rezistor extern de pull-down (~10 kΩ) la GND | | ||
+ | | **D6** | Digital | Buton 2 | Buton la +5 V, rezistor extern de pull-down (~10 kΩ) la GND | | ||
+ | | **D3** | Digital / PWM | Buzzer | Buzzer pasiv 5 V, minus la GND; poate fi modulat cu PWM | | ||
+ | |||
+ | |||
+ | |||
+ | **🕹️ Configurația finală realizată fizic** | ||
{{:pm:prj2025:ajipa:cablaj_final.jpg?350}} | {{:pm:prj2025:ajipa:cablaj_final.jpg?350}} | ||
+ | |||
+ | ===== Project Planning ===== | ||
+ | |||
+ | **Planificarea etapelor:** | ||
+ | |||
+ | ^ ID ^ Activitate ^ Descriere ^ | ||
+ | | A | Specificare cerințe | Stabilirea cerințelor hardware/software, interfață cu joystick, afișaj TFT, butoane, buzzer | | ||
+ | | B | Design arhitectură | Împărțirea codului pe module: input (joystick/butoane), game loop, generare hartă, afișare grafică, sunet | | ||
+ | | C | Implementare module de bază | Scrierea funcțiilor de citire joystick, debounce, tone buzzer | | ||
+ | | D | Generare hartă și logică de joc | Algoritmi pentru plasarea bombardelor, flood-fill, verificare câștig/pierdere | | ||
+ | | E | Grafică și UI | Funcții drawGrid(), drawHeader(), ecran de selecție nume, splash-screen, elemente decorative (bombe, steaguri, lopate) | | ||
+ | | F | Testare și optimizare | Măsurarea timpilor de răspuns și optimizarea redraw-ului | | ||
+ | | G | Documentație și prezentare | Redactarea README, diagrame, grafice Gantt, concluzii | | ||
+ | |||
+ | **Relații de dependență:** | ||
+ | * B → C, D, E: înainte de codul efectiv trebuie finalizat designul. | ||
+ | * C → D: logica de joc se bazează pe input-ul debounced. | ||
+ | * D → E: afișarea grafică și interfața necesită funcționalitatea de bază a jocului. | ||
+ | * C, D, E → F: testarea și optimizarea vin după ce modulele principale sunt implementate. | ||
+ | |||
===== Software Design ===== | ===== Software Design ===== | ||
Line 68: | Line 106: | ||
Funcții implementate: | Funcții implementate: | ||
- | * **`isButtonPressedActiveLow()`** – verifică dacă butonul conectat la pin (cu semnal activ LOW) a fost apăsat și eliberat, cu debounce intern de ~50 ms. | + | * **`isButtonPressedActiveLow_PD2()`** – verifică dacă butonul conectat la pinul 2 (cu semnal activ LOW) a fost apăsat și eliberat, cu debounce intern de ~50 ms. |
- | * **`isButtonPressedActiveHigh()`** – verifică dacă butonul conectat la pin (cu semnal activ HIGH) a fost apăsat și eliberat, cu debounce intern de ~50 ms. | + | * **`isButtonPressedActiveHigh_PD4/PD6()`** – verifică dacă butonul conectat la pinul 4/6 (cu semnal activ HIGH) a fost apăsat și eliberat, cu debounce intern de ~50 ms. |
+ | * **`fastAnalogReadA0/A1()`** - verifică și citește rapid valoarea tensiunii analogice de pe pinul A0 (ADC0) / A1 (ADC1), utilizând registrele interne ale convertorului analog-digital (ADC) al microcontrollerului. | ||
+ | * **`startTone()`** - activează semnalul PWM pe pinul PD3 (OC2B) cu frecvența specificată în Hz, folosind Timer2 configurat în mod CTC. | ||
+ | * **`stopTone()`** - oprește semnalul PWM generat de Timer2 pe pinul PD3 și setează pinul LOW. | ||
* **`playBombSequence()`** – redă pe buzzer o succesiune de tonuri care indică „explozia” unei bombe (pierdere de joc). | * **`playBombSequence()`** – redă pe buzzer o succesiune de tonuri care indică „explozia” unei bombe (pierdere de joc). | ||
* **`playWinSequence()`** – redă pe buzzer o succesiune de tonuri care indică victoria în joc. | * **`playWinSequence()`** – redă pe buzzer o succesiune de tonuri care indică victoria în joc. | ||
Line 156: | Line 197: | ||
^ Laboratoare folosite ^ Funcționalitate ^ Cod ^ | ^ Laboratoare folosite ^ Funcționalitate ^ Cod ^ | ||
- | | **GPIO** | citire / scriere de pini digitali | **pinMode(JOY_SW_PIN, INPUT_PULLUP)**, **pinMode(BTN_FLAG, INPUT)**, **pinMode(BTN_RST, INPUT)**, **pinMode(BUZZER, OUTPUT)**, **digitalRead(pin)** | | + | | **GPIO** | citire / scriere de pini digitali | **configurePinsWithRegisters()** folosind regiștrii | |
| **UART** | comunicație serială | Nu este explicit în cod, dar am folosit pentru afișajul în consola pentru debug | | | **UART** | comunicație serială | Nu este explicit în cod, dar am folosit pentru afișajul în consola pentru debug | | ||
- | | **Timere & PWM** | generare ton și temporizări | **tone(BUZZER, freq, durată)** folosește timer hardware pentru PWM, iar **delay(...)** folosește temporizări interne | | + | | **Timere & PWM** | generare ton și temporizări | **startTone(uint16_t freq)** si **stopTone()** folosind Timer0 pe 8 biti pentru PWM | |
- | | **ADC** | conversie analog‐digitală | **analogRead(JOY_X)** și **analogRead(JOY_Y)** pentru citirea poziției joystick-ului | | + | | **ADC** | conversie analog‐digitală | **fastAnalogReadA0()** și **fastAnalogReadA1()** pentru citirea poziției joystick-ului folosind regiștrii | |
| **SPI** | interfațare display TFT | **tft.initR(INITR_BLACKTAB)** + toate comenzile **tft.xxx** folosesc **SPI** pentru comunicare cu ecranul ST7735 | | | **SPI** | interfațare display TFT | **tft.initR(INITR_BLACKTAB)** + toate comenzile **tft.xxx** folosesc **SPI** pentru comunicare cu ecranul ST7735 | | ||
Line 225: | Line 266: | ||
[[https://cdn-learn.adafruit.com/downloads/pdf/adafruit-gfx-graphics-library.pdf|Adafruit GFX Graphics Library]] | [[https://cdn-learn.adafruit.com/downloads/pdf/adafruit-gfx-graphics-library.pdf|Adafruit GFX Graphics Library]] | ||
+ | |||
+ | [[https://docs.arduino.cc/|Arduino Documentation]] | ||
+ | |||
<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> | ||