This is an old revision of the document!
In tabelul de mai jos este prezentata configuratia pinilor utilizati, alaturi de justificarea tehnica a alegerii acestora:
| Componenta | Pin Componenta | Pin Arduino | Justificare Tehnica |
|---|---|---|---|
| OLED | VCC | 5V | Alimentare modul ecran. |
| GND | GND | Masa comuna a circuitului. | |
| SDA | A4 | Serial Data pentru I2C. Pin dedicat hardware pe Arduino Uno. | |
| SCL | A5 | Serial Clock pentru I2C. Sincronizeaza transferul de date. | |
| Matrice LED | VCC | 5V | Alimentare module MAX7219. |
| GND | GND | Masa comuna. | |
| DIN | D11 | MOSI (SPI). Transfer rapid de date catre cele 256 de LED-uri. | |
| CS / LOAD | D10 | Chip Select. Activeaza scrierea pe modulele LED. | |
| CLK | D13 | SCK (SPI Clock). Sincronizeaza bitii in protocolul SPI. | |
| Joystick | VCC | 5V | Alimentare pentru potentiometrele interne. |
| GND | GND | Masa comuna. | |
| VRX | A0 | Intrare Analogica. Citeste axa X pentru deplasare stanga/dreapta. | |
| VRY | A1 | Intrare Analogica. Citeste axa Y pentru cadere rapida. | |
| SW | D4 | Intrare Digitala pentru butonul intern al joystick-ului. | |
| Push Button | P1 | D2 | Intrare Digitala. Suporta intreruperi hardware (Interrupts). |
| P2 | 5V | Sursa de semnal pentru logica de tip Active High. | |
| Buzzer | (+) | D3 | Pin PWM. Genereaza frecventele audio. |
| (-) | GND | Masa comuna. |
uint8_t board[32]. Fiecare bit dintr-un byte reprezinta starea unui pixel (0 = stins, 1 = aprins) de pe latimea de 8 coloane a jocului.millis() in loc de delay(). Acest lucru permite rularea concomitenta a melodiei prin buzzer, citirea joystick-ului si caderea automata a pieselor fara blocarea microcontrolerului.
| Nume Functie | Descriere Functionalitate |
|---|---|
void setup() | Initializeaza ecranul OLED si matricele LED, configureaza pinii pentru joystick/buton si porneste meniul principal. |
void loop() | Gestioneaza starile jocului, apeleaza functia de muzica, citeste intrarile si controleaza automat caderea pieselor. |
void resetGame() | Goleste tabla de joc (reseteaza vectorul de biti la 0), aduce scorul si nivelul la 1 si genereaza prima piesa. |
void drawMenu() | Afiseaza ecranul de start pe display-ul OLED, asteptand apasarea butonului pentru a incepe jocul. |
void updateOLED() | Actualizeaza in timp real datele despre scor, nivelul curent de dificultate si numarul total de linii sterse pe ecranul OLED. |
void spawnPiece() | Alege aleatoriu una dintre cele 7 forme de piese, o plaseaza in partea de sus si verifica conditia de Game Over. |
void handleInput() | Citeste axele joystick-ului pentru miscari si verifica starea butonului pentru a roti piesa activa (transpunere matrice 3×3). |
bool canMove(…) | Verifica daca o piesa se poate muta sau roti in siguranta fara sa iasa din ecran sau sa loveasca piese deja fixate. |
void lockPiece() | Copiaza piesa activa in vectorul permanent al tablei de joc (board) prin aplicarea unei masti pe biti. |
void checkLines() | Scaneaza tabla pentru a gasi linii complete (byte egal cu 0xFF). Daca gaseste, le sterge, coboara liniile de deasupra si creste scorul. |
void manageMusic() | Citeste vectorul cu notele muzicale ale temei Tetris si le reda consecutiv prin buzzer, calculand pauzele in mod asincron. |
void render() | Preia buffer-ul tablei de joc, suprapune piesa activa si trimite datele prin SPI catre cele 4 drivere MAX7219. |
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.