Differences

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

Link to this comparison view

pm:prj2026:bianca.popa1106:alexandru.diaconu [2026/05/09 19:31]
alexandru.diaconu04 created
pm:prj2026:bianca.popa1106:alexandru.diaconu [2026/05/27 03:37] (current)
alexandru.diaconu04 [Software Design]
Line 1: Line 1:
-CyberPull: Tug of War Digital+====== ​CyberPull: Tug of War Digital ​======
  
-**Autor:** Alexandru ​(Grupa ...) +^ NumeAlexandru ​Diaconu | 
-**GitHub:** *(link de adăugat)* +Grupa: ​| 331CD |
-**Video demo:** *(link YouTube de adăugat)*+
  
----+===== Introducere =====
  
-## Introducere+**Ce face?**
  
-CyberPull este un joc arcade interactiv pentru doi jucătoriinspirat din jocul clasic ​"trage de sfoară"​. ​În loc de forță fizică, sistemul testează viteza de reacție ​jucătorilor.+CyberPull este un joc arcade interactiv pentru doi jucători inspirat din "trage de sfoară"​. ​Un punct luminos pornește din centrul unei benzi LED. Fiecare jucător apasă butonul său cât mai repede pentru ​trage punctul în jumătatea lui. Primul care îl duce la capătul său câștigă runda.
  
-La începutul fiecărei runde, un punct luminos apare fix în centrul unei benzi LED WS2812B. Fiecare jucător are un buton arcade dedicat — trebuie să îl apese cât mai repede pentru a trage punctul luminos spre jumătatea ​lui. Primul jucător care împinge punctul luminos până la capătul său câștigă runda.+**Care este scopul ​lui?**
  
-**Ce face proiectul:​** +Distracție ​pentru doi jucători, testând viteza ​de reacție într-un format competitiv ​și vizual atractiv.
-- Joc multiplayer local pentru doi jucători ​cu detectarea instantanee a apăsărilor ​de butoane prin întreruperi hardware +
-- Dificultate reglabilă în timp real printr-un potențiometru rotativ (controlează câte apăsări sunt necesare pentru a muta LED-ul o poziție+
-Feedback audio prin buzzer pasiv — tonuri diferite la fiecare mutare ​și o melodie de victorie la finalul rundei +
-- Scor curent și cronometru de rundă afișate pe un LCD 16x2 cu interfață I2C +
-- Carcasă din plexiglass transparent cu electronica ascunsă sub un fund fals+
  
-**De ce este util:** Proiectul demonstrează toate conceptele majore ​de laborator (întreruperi,​ timere, PWM, ADC, I2C) într-o formă interactivă și prezentabilă,​ producând un joc standalone complet funcțional pe care oricine îl poate juca imediat.+**Care a fost ideea de la care am pornit?**
  
-**Ideea de la care am pornit:​** ​Am vrut un proiect care să fie atât tehnic complet cât și distractiv — ceva ce poate fi demonstrat ​ușor în fața unui public și care implică interacțiunea directă a utilizatorilor.+Am vrut un proiect care să folosească toate conceptele de laborator (întreruperi,​ timere, PWM, ADC, I2C) într-un mod practic ​și interactiv, rezultând ​ceva ce poate fi demonstrat ​imediat oricui.
  
----+**De ce este util?**
  
-## Descriere Generală+Este un joc standalone complet funcțional,​ cu carcasă fizică din plexiglass, care poate fi folosit fără laptop după ce codul este încărcat.
  
-### Schemă Bloc+===== Descriere Generală =====
  
-``` +Schema bloc a proiectului:​
-┌─────────────────────────────────────────────────────────────────┐ +
-│                       ​SISTEM CYBERPULL ​                         │ +
-│                                                                 │ +
-│  ┌──────────┐ ​   INT0    ┌─────────────────┐ ​   I2C             │ +
-│  │ Buton J1 │───────────▶│ ​                ​│───────────▶ LCD 1602│ +
-│  └──────────┘ ​           │                 ​│ ​                   │ +
-│                          │  Arduino Uno    │    Pin Digital ​     │ +
-│  ┌──────────┐ ​   INT1    │  (ATmega328P) ​  ​│───────────▶ Bandă ​ │ +
-│  │ Buton J2 │───────────▶│ ​                ​│ ​           WS2812B │ +
-│  └──────────┘ ​           │                 ​│ ​                   │ +
-│                          │                 ​│ ​   PWM (Timer2) ​    │ +
-│  ┌──────────┐ ​   ADC0    │                 ​│───────────▶ Buzzer ​ │ +
-│  │  Pot 10K │───────────▶│ ​                ​│ ​           Pasiv   │ +
-│  └──────────┘ ​           └─────────────────┘ ​                   │ +
-│                                   ​│ ​                            │ +
-│  ┌──────────┐ ​             Jack DC 9V                           │ +
-│  │ Adaptor ​ │─────────────────────┘ ​                            │ +
-│  │ 9V / 1A  │                                                   │ +
-│  └──────────┘ ​                                                  │ +
-└─────────────────────────────────────────────────────────────────┘ +
-```+
  
-### Descrierea Modulelor+{{:​pm:​prj2026:​bianca.popa1106:​diaconu_alexandru_schema_bloc.png?​200|}}
  
-**Arduino Uno (ATmega328P)** — Unitatea centrală de procesare. Rulează toată logica jocului, citește inputurile și controlează outputurile.+Modulele principale:
  
-**Bandă LED WS2812B (30 LED-uri, 50cm)** — Afișajul principal ​al jocului. Un singur ​LED se mișcă stânga/​dreapta ​în funcție de apăsările butoanelor. ​LED-ul 15 este poziția centrală de start, LED-urile 0–14 aparțin ​jucătorului J1LED-urile 16–29 aparțin jucătorului J2.+  * **Arduino Uno (ATmega328P)** — unitatea centrală, rulează toată logica jocului 
 +  * **Bandă LED WS2812B (30 LED-uri, 50cm)** — afișajul principal; un LED se mișcă stânga/​dreapta 
 +  * **2x Butoane Arcade 16mm cu LED** — inputul ​jucătorilorconectate pe INT0/INT1 
 +  * **Potențiometru 10kΩ** — reglează dificultatea în timp real prin ADC 
 +  * **Buzzer Pasiv** — feedback audio controlat prin PWM (Timer2) 
 +  * **LCD 1602 + I2C** — afișează scorul și cronometrul rundei 
 +  * **Adaptor 9V/1A** — alimentare standalone prin jack-ul Arduino
  
-**Butoane Arcade (x2, 16mm, iluminate LED)** — Inputurile jucătorilor. Conectate la pinii de întrerupere externă (INT0/INT1) pentru detectare fără latență.+===== Hardware Design =====
  
-**Potențiometru Rotativ (10kΩ)** — Selector analogic de dificultate. Citit prin ADC. Mapează valoarea 0–1023 la un număr de apăsări necesare pentru a muta LED-ul o poziție (1 = ușor, 8 = dificil).+**Listă de componente:**
  
-**Buzzer Pasiv** — Feedback audio. Controlat de Timer2 în modul Fast PWM. Generează frecvențe diferite la mutare stângamutare dreapta ​și melodie de victorie.+^ Componentă ^ Specificații ^ Cantitate ^ 
 +| Arduino Uno R3 | ATmega328PDIP | 1 | 
 +| Bandă LED WS2812B | 60 LED/m, 30 LED-uri (50cm) | 1 | 
 +| Buton Arcade cu LED | 16mm, 3-6V, roșu | 1 | 
 +| Buton Arcade cu LED | 16mm, 3-6V, albastru | 1 | 
 +| Potențiometru | 10kΩ liniar | 1 | 
 +| Buzzer Pasiv | 3.3V | 1 | 
 +| LCD 1602 + modul I2C | PCF8574, 5V | 1 | 
 +| Adaptor alimentare | 9V / 1A | 1 | 
 +| Breadboard | 830 puncte | 1 | 
 +| Rezistor 330Ω | 1/4W THT | 3 | 
 +| Rezistor 10kΩ | 1/4W THT | 5 | 
 +| Rezistor 100Ω | 1/4W THT | 3 | 
 +| Condensator electrolitic | 1000µF / 35V | 1 | 
 +| Fire Dupont M-F | 30cm, 40 buc | 1 set | 
 +| Fire Dupont M-M | 10cm, 40 buc | 1 set |
  
-**LCD 16x2 + I2C (PCF8574)** — Afișaj secundar. Afișează scorul curent (ex: "J1: 2  J2: 1") și timpul scurs din rundă.+**Schema electrică:**
  
-**Adaptor 9V/1A** — Alimentează Arduino prin jack-ul DCRegulatorul intern al Arduino furnizează 5V tuturor perifericelor.+{{:​pm:​prj2026:​bianca.popa1106:​diaconu_alexandru_schema_electrica.png?200|}}
  
----+===== Software Design =====
  
-## Hardware Design+**Mediu de dezvoltare:​** Arduino IDE 2.x
  
-### Listă de Componente+**Biblioteci folosite:​** 
 +  * ''​Adafruit_NeoPixel''​ — control bandă LED WS2812B 
 +  * ''​LiquidCrystal_I2C''​ — control LCD prin I2C 
 +  * ''​avr/​interrupt.h''​ — întreruperi hardware (built-in)
  
-| Componentă | Specificații | Cantitate | +**Concepte de laborator:​** 
-|---|---|---| + 
-| Arduino Uno R3 (ATmega328P| DIPcompatibil Arduino | 1 | +  * **Lab 2 — Întreruperi:​** Butoanele conectate pe INT0 (D2) și INT1 (D3), tratate prin ISR. Timer1 în mod CTC pentru cronometrul rundei (tick 1ms). Debouncing software cu fereastră de 50ms. 
-| Bandă LED WS2812B | 60 LED/m30 LED-uri folosite ​(50cm| 1 | +  * **Lab 3 — PWM:** Timer2 în mod Fast PWM pe pinul D11 (OC2A) pentru buzzer. Frecvențe diferite: ~500Hz (mutare J1)~800Hz ​(mutare J2), melodie la câștig. 
-| Buton Arcade cu LED | 16mm3–6V, roșu | 1 | +  * **Lab 4 — ADC:** Potențiometrul citit pe A0. Valoarea 01023 mapată la dificultate ​1–8 (numărul de apăsări necesare per mutare LED). 
-| Buton Arcade cu LED | 16mm, 36V, albastru | +  * **Lab 6 — I2C:​** ​LCD comunică pe pinii A4 (SDA) A5 (SCL)Adresă PCF8574: 0x27Actualizare la fiecare 500ms.
-| Potențiometru Rotativ | 10kΩ liniar ​(B10K| 1 | +
-| Buzzer Pasiv | 3.3V | 1 | +
-LCD 1602 + modul I2C | PCF8574, 5V, backlight verde | 1 | +
-| Adaptor Alimentare | 9V 1A, jack DC 5.5×2.1mm | 1 | +
-| Breadboard | 830 puncte, MB-102 | 1 | +
-| Fire Dupont M-F | 30cm, 40 buc | 1 set | +
-| Fire Dupont M-M | 10cm, 40 buc | 1 set | +
-| Rezistor 330Ω | 1/4W THT | 3 | +
-| Rezistor 10kΩ | 1/4W THT | 5 | +
-| Rezistor 100Ω | 1/4W THT | 3 | +
-| Condensator Electrolitic | 1000µF / 35V, THT | 1 | +
-| Cablu USB A-B | 0.3m | 1 |+
  
-### Conexiuni Electrice+===== Rezultate Obținute =====
  
-| Componentă | Pin Arduino | Observații | +Aveti link catre youtube mai jos:
-|---|---|---| +
-| Buton J1 (semnal) | D2 (INT0) | Pull-down 10kΩ la GND | +
-| Buton J2 (semnal) | D3 (INT1) | Pull-down 10kΩ la GND | +
-| Buton J1 LED (+) | D4 | Rezistor intern inclus în buton | +
-| Buton J2 LED (+) | D5 | Rezistor intern inclus în buton | +
-| Bandă LED (DIN) | D6 | Rezistor 330Ω în serie | +
-| Bandă LED (5V) | 5V | Condensator 1000µF în paralel | +
-| Bandă LED (GND) | GND | | +
-| Buzzer (+) | D11 (OC2A) | Rezistor 100Ω în serie | +
-| Potențiometru (cursor) | A0 | | +
-| Potențiometru (capete) | 5V / GND | | +
-| LCD SDA | A4 | Magistrală I2C | +
-| LCD SCL | A5 | Magistrală I2C | +
-| LCD VCC | 5V | | +
-| LCD GND | GND | |+
  
-*(Schema electrică completă va fi adăugată — desenată în Fritzing/Wokwi)*+https://​www.youtube.com/​shorts/​ELwuYHDpFSM
  
----+===== Concluzii =====
  
-## Software Design+Cea mai delicată parte a fost lucratul cu banda LED și butoanele. Mai exact partea hardware, în care a trebuit să lipesc firele la pinii corespunzători de mai multe ori, deoarece legăturile s-au rupt între ele.
  
-### Mediu de Dezvoltare 
-- **Arduino IDE 2.x** — IDE principal pentru scriere cod și upload 
-- **Monitor Serial Arduino** — pentru debugging în timp real 
  
-### Biblioteci ​și Surse Third-Party +De asemenea, LCD-ul nu afișa nimic la prima pornire, deși adresa ​I2C era corectă ​(0x27). Problema era contrastul setat la zero din fabrică, rezolvat prin reglarea potențiometrului de pe spatele modulului.
-- **Adafruit NeoPixel** — controlul benzii LED WS2812B (`Adafruit_NeoPixel.h`) +
-- **LiquidCrystal_I2C** — controlul LCD-ului prin I2C (`LiquidCrystal_I2C.h`) +
-- **avr/​interrupt.h** — gestionarea întreruperilor hardware (bibliotecă AVR built-in)+
  
-### Concepte de Laborator Utilizate 
  
-**Laboratorul 2 — Întreruperi & Timere:** 
-- Ambele butoane conectate la `INT0` (D2) și `INT1` (D3) 
-- Întreruperile hardware declanșează `ISR(INT0_vect)` și `ISR(INT1_vect)` — fără polling, zero inputuri pierdute 
-- `Timer1` în modul CTC pentru cronometrul rundei (tick de 1ms → funcția `uptime_ms()`) 
-- Debouncing software folosind `uptime_ms()` — fereastră de 50ms după fiecare apăsare 
  
-**Laboratorul 3 — Timere & PWM:** +===== Jurnal =====
-- `Timer2` configurat în modul Fast PWM pe pinul `D11` (OC2A) +
-- Frecvența buzzerului setată prin scrierea registrului `OCR2A` +
-- Tonuri diferite: ~500Hz (mutare J1), ~800Hz (mutare J2), melodie de victorie la finalul rundei+
  
-**Laboratorul ​4 — ADC:** +^ Dată ^ Activitate ^ 
-- Potențiometrul citit pe `A0` prin `analogRead()` sau acces direct la registrele ​ADC +| 1 Mai 2026 | Definirea conceptului,​ finalizarea listei de componente | 
-- Valoarea pe 10 biț(0–1023) mapată la dificultate:​ `dificultate = map(valADC, 0, 1023, 1, 8)` +Mai 2026 | Primirea componentelor și asamblarea hardware | 
-- Valoare mai mare → mai multe apăsări necesare pentru a avansa LED-ul+| 5 Mai 2026 | Implementare software ​— întreruperi + control LED | 
 +| 6 Mai 2026 | Implementare software — ADC, PWM, I2C | 
 +10 Mai 2026 | Testare șdebugging | 
 +| 25 Mai 2026 | Demo final și documentație |
  
-**Laboratorul 6 — I2C:** +===== Software Design =====
-- LCD-ul comunică prin protocolul I2C pe pinii A4 (SDA) și A5 (SCL) +
-- Adresa I2C a PCF8574: `0x27` (default) +
-- Actualizare display la fiecare 500ms: linia de scor + cronometrul rundei+
  
-### Algoritmi și Logica Jocului (Planificat)+**Mediu de dezvoltare**
  
-``` +  * PlatformIO (extensie VS Code) 
-INIȚIALIZARE:​ +  ​* Placă: Arduino Uno (ATmega328P
-  ​- Poziție LED = 15 (centru+  ​* Limbaj: C++ 
-  ​- Scor J1 = 0, Scor J2 = 0 +  ​* Fișier principal: ''​main.cpp''​
-  ​- contor_apasari = 0 +
-  - dificultate = citire ADC → mapare la 1-8+
  
-BUCLĂ PRINCIPALĂ:​ +**Biblioteci third-party**
-  ​Citește potențiometrul → actualizează dificultatea +
-  - Actualizează LCD (scor + timp) +
-  - Verifică condiția de câștig: +
-      dacă pos == 0 → J1 câștigă +
-      dacă pos == 29 → J2 câștigă+
  
-ISR(INT0_vect) [Buton J1]: +^ Bibliotecă ^ Rol ^ 
-  - verificare debounce +| Adafruit NeoPixel | Controlul benzii LED WS2812B adresabile | 
-  - contor_apasari++ +| LiquidCrystal_I2C | Comunicare cu LCD 16x2 prin protocolul I2C | 
-  dacă contor_apasari >= dificultate:​ poziție_LED--,​ contor = 0 +| avr/​interrupt.h | Gestionarea întreruperilor hardware INT0/INT1 (built-in AVR) | 
-  redă ton (500Hz, 50ms)+| Wire.h | Suport I2C pentru comunicarea cu LCD (built-in Arduino|
  
-ISR(INT1_vect) [Buton J2]: +**Arhitectura sistemului**
-  - verificare debounce +
-  - contor_apasari++ +
-  - dacă contor_apasari >= dificultate:​ poziție_LED++,​ contor = 0 +
-  - redă ton (800Hz, 50ms)+
  
-CÂȘTIG: +Firmware-ul este structurat într-un singur fișier principal ''​main.cpp''​. Acesta inițializează toate perifericele (bandă LED, LCD, butoane, buzzer, potențiometru),​ configurează întreruperile hardware ​și gestionează logica principală în bucla ''​loop()''​.
-  ​redă melodie de victorie +
-  ​clipesc toate LED-urile din jumătatea câștigătorului +
-  - actualizează scorul pe LCD +
-  - așteptare 3s → rundă nouă +
-```+
  
----+Pinout-ul complet:
  
-## Rezultate Obținute+^ Pin Arduino ^ Componentă ^ Rol ^ 
 +| D2 (INT0) | Buton J2 (alb) | Întrerupere externă — apăsare jucător 2 | 
 +| D3 (INT1) | Buton J1 (roșu) | Întrerupere externă — apăsare jucător 1 | 
 +| D4 | LED buton J2 (alb) | Iluminare buton jucător 2 | 
 +| D5 | LED buton J1 (roșu) | Iluminare buton jucător 1 | 
 +| D6 | Bandă LED WS2812B (DIN) | Semnal date bandă LED (prin rezistență 330Ω) | 
 +| D11 (OC2A) | Buzzer pasiv | Timer2 CTC — generare sunete | 
 +| A0 | Potențiometru 10kΩ | ADC — citire dificultate 1–8 | 
 +| A4 (SDA) | LCD I2C | Linie date I2C | 
 +| A5 (SCL) | LCD I2C | Linie clock I2C |
  
-*(De completat după asamblarea hardware și testare)*+**Detalii cheie de implementare**
  
-Rezultate așteptate:​ +//Întreruperi hardware pentru butoane ​(Lab 2)//
-- LED-ul răspunde instant la apăsările butoanelor fără latență perceptibilă +
-- Potențiometrul de dificultate schimbă vizibil dinamica jocului de la 1 apăsare/mutare la 8 apăsări/mutare +
-- LCD-ul actualizează scorul în timp real +
-- Buzzerul produce sunete distincte la fiecare eveniment din joc +
-- O sesiune completă de joc poate fi rulată fără conexiune la PC (standalone prin adaptorul de 9V)+
  
----+Butoanele jucătorilor sunt conectate pe pinii INT0 (D2) și INT1 (D3), configurate pe front descrescător (falling edge) prin registrele EICRA și EIMSK. La fiecare apăsare se declanșează automat rutinele ''​ISR(INT0_vect)''​ și ''​ISR(INT1_vect)''​. Aceasta garantează că nicio apăsare nu este pierdută, indiferent de ce face programul în acel moment.
  
-## Concluzii+Fiecare ISR implementează debouncing software cu o fereastră de 150ms — dacă două apăsări vin în mai puțin de 150ms, a doua este ignorată (zgomot mecanic al butonului). ISR-ul verifică și starea fizică a butonului cu ''​digitalRead()''​ pentru a ignora bouncing-ul la eliberare.
  
-*(De completat după finalizarea proiectului)*+Logica de mutare a LED-ului: 
 +  ​ISR numără apăsările într-un contor 
 +  ​Când contorul atinge valoarea de dificultate → LED-ul se mută o poziție 
 +  * Contorul se resetează la 0
  
----+//Control buzzer prin Timer2 CTC (Lab 3)//
  
-## Cod Sursă și Resurse GitHub+Buzzerul pasiv este controlat de Timer2 în modul CTC pe pinul D11 (OC2A). Frecvența sunetului se calculează după formula:
  
-Tot codul sursă, schemele hardware și fotografiile proiectului sunt disponibile pe GitHub:+  OCR2A = F_CPU / (2 × 256 × frecvență) − 1
  
-**Repository GitHub:** *(link de adăugat)*+Prescaler-ul folosit este 256. Sunete generate: 
 +  ​* **400 Hz** — mutare spre J1 
 +  * **600 Hz** — mutare spre J2 
 +  * **300→500→700 Hz** — start rundă 
 +  * **Melodie Do-Re-Mi-Fa-Sol (262–392 Hz)** — victorie meci
  
-Structura repository-ului:​ +//Citire potențiometru prin ADC (Lab 4)//
-``` +
-cyberpull/ +
-├── src/ +
-│   ​└── main.ino +
-├── hardware/ +
-│   ​├── schema_electrica.fzz +
-│   ​└── diagrama_cablaj.png +
-├── images/ +
-│   ​├── cutie_sus.jpg +
-│   ​├── cutie_jos.jpg +
-│   ​└── demo.jpg +
-└── README.md +
-```+
  
----+Potențiometrul este citit pe pinul A0 folosind ''​analogRead()''​. Valoarea de 10 biți (0–1023) este mapată la intervalul de dificultate 1–8 folosind funcția ''​map()'':​
  
-## Jurnal+<code cpp> 
 +difficulty = map(analogRead(A0),​ 0, 1023, 1, 8); 
 +</​code>​
  
-| Dată | Activitate | +Dificultatea reprezintă numărul de apăsări necesare pentru a muta LED-ul o poziție. La dificultate 1 fiecare apăsare mută LED-ulla dificultate 8 sunt necesare 8 apăsări. Valoarea este recitită la fiecare iterație a ''​loop()''​deci se poate modifica în timp real.
-|---|---| +
-| Mai 2026 | Definirea conceptuluifinalizarea listei de componente | +
-| *(TBD)* | Comandarea și primirea componentelor | +
-| *(TBD)* | Asamblarea hardware și cablajul | +
-| *(TBD)* | Dezvoltare software — întreruperi + control LED | +
-| *(TBD)* | Dezvoltare software — ADCPWM, I2C | +
-| *(TBD)* | Testare integrată și debugging | +
-| *(TBD)* | Demo final și documentație |+
  
----+//​Comunicare LCD prin I2C (Lab 6)//
  
-## Bibliografie ​și Resurse+LCD-ul 16x2 cu modulul PCF8574 comunică prin protocolul I2C pe pinii A4 (SDA) și A5 (SCL), la adresa ''​0x27''​. Display-ul se actualizează la fiecare 500ms cu scorul curent, timpul scurs din rundă și dificultatea curentă.
  
-### Resurse Hardware +**Funcții implementate**
-- [Datasheet ATmega328P](https://​ww1.microchip.com/​downloads/​en/​DeviceDoc/​Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf) +
-- [Datasheet WS2812B LED](https://​cdn-shop.adafruit.com/​datasheets/​WS2812B.pdf) +
-- [Datasheet PCF8574 I2C Expander](https://​www.ti.com/​lit/​ds/​symlink/​pcf8574.pdf) +
-- [Schema Arduino Uno R3](https://​www.arduino.cc/​en/​uploads/​Main/​Arduino_Uno_Rev3-schematic.pdf)+
  
-### Resurse Software +^ Funcție ^ Rol ^ 
-- [Biblioteca Adafruit NeoPixel](https://​github.com/​adafruit/​Adafruit_NeoPixel+| ''​setup()''​ | Inițializează toate perifericele,​ configurează întreruperile,​ pornește jocul | 
-- [Biblioteca LiquidCrystal_I2C](https://​github.com/​johnrickman/​LiquidCrystal_I2C+| ''​loop()''​ | Bucla principală:​ citește ADC, actualizează LED și LCD, verifică câștig | 
-- [Arduino Reference ​— attachInterrupt()](https://​www.arduino.cc/​reference/​en/​language/​functions/​external-interrupts/​attachinterrupt/​+| ''​ISR(INT0_vect)''​ | Tratează apăsarea butonului alb (J2) — debounce 150ms + mutare LED spre dreapta | 
-- [Arduino Reference — analogRead()](https://​www.arduino.cc/​reference/​en/​language/​functions/​analog-io/​analogread/​+| ''​ISR(INT1_vect)''​ | Tratează apăsarea butonului roșu (J1) — debounce 150ms + mutare LED spre stânga | 
-[Secrets of Arduino PWM](https://​docs.arduino.cc/​tutorials/​generic/​secrets-of-arduino-pwm/)+| ''​showStrip()''​ | Actualizează banda LEDzona J1 albastru, zona J2 roșu, bila albă | 
 +| ''​flashStrip()''​ | Clipire bandă LED în culoarea câștigătorului | 
 +| ''​startAnimation()''​ | Animație sweep alb la pornirea jocului | 
 +| ''​buzzerOn()''​ | Pornește buzzerul la frecvența specificată prin Timer2 CTC | 
 +| ''​buzzerOff()''​ | Oprește buzzerul | 
 +| ''​playTone()''​ | Emite un sunet la frecvența și durata specificate | 
 +| ''​playMoveJ1Sound()''​ | Sunet la mutarea LED-ului spre J1 (400Hz| 
 +| ''​playMoveJ2Sound()''​ | Sunet la mutarea LED-ului spre J2 (600Hz) | 
 +| ''​playRoundStart()''​ | Sunet de start rundă300→500→700Hz | 
 +| ''​playRoundWin()''​ | Sunet la câștigarea unei runde | 
 +| ''​playVictory()''​ | Redă melodia Do-Re-Mi-Fa-Sol la câștigarea meciului | 
 +| ''​updateLCDScore()''​ | Afișează scorul, cronometrul și dificultatea pe LCD prin I2C | 
 +| ''​checkWin()''​ | Verifică dacă bila a ajuns la capătul benzii și actualizează scorul | 
 +| ''​startRound()''​ | Resetează pozițiile și contoarele pentru o rundă nouă | 
 +| ''​checkReset()''​ | Verifică dacă ambele butoane sunt ținute 500ms pentru reset joc | 
 +===== Bibliografie/​Resurse =====
  
-### Materiale de Laborator (OCW CS Pub) +**Resurse Hardware:** 
-[Laboratorul 2: Întreruperi & Timere](https://ocw.cs.pub.ro/courses/pm/lab/lab2-2023) +  * [[https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf|Datasheet ATmega328P]] 
-[Laboratorul 3: Timere & PWM](https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab3-2023-2024) +  * [[https://cdn-shop.adafruit.com/datasheets/WS2812B.pdf|Datasheet WS2812B]] 
-[Laboratorul 4: ADC](https://ocw.cs.pub.ro/courses/pm/​lab/​lab4-2023-2024) +  * [[https://www.ti.com/lit/ds/symlink/pcf8574.pdf|Datasheet PCF8574 I2C]]
-[Laboratorul 6: I2C](https://ocw.cs.pub.ro/courses/pm/lab/lab6-2023-2024)+
  
 +**Resurse Software:**
 +  * [[https://​github.com/​adafruit/​Adafruit_NeoPixel|Biblioteca Adafruit NeoPixel]]
 +  * [[https://​github.com/​johnrickman/​LiquidCrystal_I2C|Biblioteca LiquidCrystal_I2C]]
 +  * [[https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab2-2023|Lab 2: Întreruperi & Timere — OCW CS Pub]]
 +  * [[https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab3-2023-2024|Lab 3: Timere & PWM — OCW CS Pub]]
 +  * [[https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab4-2023-2024|Lab 4: ADC — OCW CS Pub]]
 +  * [[https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab6-2023-2024|Lab 6: I2C — OCW CS Pub]]
pm/prj2026/bianca.popa1106/alexandru.diaconu.1778344268.txt.gz · Last modified: 2026/05/09 19:31 by alexandru.diaconu04
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