This shows you the differences between two versions of the page.
|
pm:prj2026:bianca.popa1106:alexandru.diaconu [2026/05/09 19:31] alexandru.diaconu04 created |
pm:prj2026:bianca.popa1106:alexandru.diaconu [2026/05/18 19:12] (current) alexandru.diaconu04 |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | # CyberPull: Tug of War Digital | + | ====== CyberPull: Tug of War Digital ====== |
| - | **Autor:** Alexandru (Grupa ...) | + | ^ Nume: | Alexandru 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ători, inspirat din jocul clasic "trage de sfoară". În loc de forță fizică, sistemul testează viteza de reacție a 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 a 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 J1, LED-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ătorilor, conectate 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ânga, mutare dreapta și melodie de victorie. | + | ^ Componentă ^ Specificații ^ Cantitate ^ |
| + | | Arduino Uno R3 | ATmega328P, DIP | 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 DC. Regulatorul 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) | DIP, compatibil Arduino | 1 | | + | |
| - | | Bandă LED WS2812B | 60 LED/m, 30 LED-uri folosite (50cm) | 1 | | + | |
| - | | Buton Arcade cu LED | 16mm, 3–6V, roșu | 1 | | + | |
| - | | Buton Arcade cu LED | 16mm, 3–6V, albastru | 1 | | + | |
| - | | 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 | + | * **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. |
| + | * **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. | ||
| + | * **Lab 4 — ADC:** Potențiometrul citit pe A0. Valoarea 0–1023 mapată la dificultate 1–8 (numărul de apăsări necesare per mutare LED). | ||
| + | * **Lab 6 — I2C:** LCD comunică pe pinii A4 (SDA) / A5 (SCL). Adresă PCF8574: 0x27. Actualizare la fiecare 500ms. | ||
| - | | Componentă | Pin Arduino | Observații | | + | ===== Rezultate Obținute ===== |
| - | |---|---|---| | + | |
| - | | 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)* | + | //De completat după asamblare și testare.// |
| - | --- | + | ===== Concluzii ===== |
| - | ## Software Design | + | //De completat după finalizarea proiectului.// |
| - | ### Mediu de Dezvoltare | + | ===== Download ===== |
| - | - **Arduino IDE 2.x** — IDE principal pentru scriere cod și upload | + | |
| - | - **Monitor Serial Arduino** — pentru debugging în timp real | + | |
| - | ### Biblioteci și Surse Third-Party | + | Codul sursă, schema electrică și fotografiile proiectului sunt disponibile pe GitHub: |
| - | - **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 | + | [[https://github.com/alexandru-diaconu/cyberpull|Repository GitHub CyberPull]] |
| - | **Laboratorul 2 — Întreruperi & Timere:** | + | ===== Jurnal ===== |
| - | - 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:** | + | ^ Dată ^ Activitate ^ |
| - | - `Timer2` configurat în modul Fast PWM pe pinul `D11` (OC2A) | + | | Mai 2026 | Definirea conceptului, finalizarea listei de componente | |
| - | - Frecvența buzzerului setată prin scrierea registrului `OCR2A` | + | | TBD | Primirea componentelor și asamblarea hardware | |
| - | - Tonuri diferite: ~500Hz (mutare J1), ~800Hz (mutare J2), melodie de victorie la finalul rundei | + | | TBD | Implementare software — întreruperi + control LED | |
| + | | TBD | Implementare software — ADC, PWM, I2C | | ||
| + | | TBD | Testare și debugging | | ||
| + | | TBD | Demo final și documentație | | ||
| - | **Laboratorul 4 — ADC:** | + | ===== Software Design ===== |
| - | - Potențiometrul citit pe `A0` prin `analogRead()` sau acces direct la registrele ADC | + | |
| - | - Valoarea pe 10 biți (0–1023) mapată la dificultate: `dificultate = map(valADC, 0, 1023, 1, 8)` | + | |
| - | - Valoare mai mare → mai multe apăsări necesare pentru a avansa LED-ul | + | |
| - | **Laboratorul 6 — I2C:** | + | **Mediu de dezvoltare** |
| - | - 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) | + | * IDE: Arduino IDE 2.3.8 |
| + | * Placă: Arduino Uno (ATmega328P) | ||
| + | * Limbaj: C / C++ | ||
| - | ``` | + | **Biblioteci third-party** |
| - | INIȚIALIZARE: | + | |
| - | - Poziție LED = 15 (centru) | + | |
| - | - Scor J1 = 0, Scor J2 = 0 | + | |
| - | - contor_apasari = 0 | + | |
| - | - dificultate = citire ADC → mapare la 1-8 | + | |
| - | BUCLĂ PRINCIPALĂ: | + | ^ Bibliotecă ^ Rol ^ |
| - | - Citește potențiometrul → actualizează dificultatea | + | | Adafruit NeoPixel | Controlul benzii LED WS2812B adresabile | |
| - | - Actualizează LCD (scor + timp) | + | | LiquidCrystal_I2C | Comunicare cu LCD 16x2 prin protocolul I2C | |
| - | - Verifică condiția de câștig: | + | | avr/interrupt.h | Gestionarea întreruperilor hardware INT0/INT1 (built-in AVR) | |
| - | dacă pos == 0 → J1 câștigă | + | | Wire.h | Suport I2C pentru comunicarea cu LCD (built-in Arduino) | |
| - | dacă pos == 29 → J2 câștigă | + | |
| - | ISR(INT0_vect) [Buton J1]: | + | **Arhitectura sistemului** |
| - | - verificare debounce | + | |
| - | - contor_apasari++ | + | |
| - | - dacă contor_apasari >= dificultate: poziție_LED--, contor = 0 | + | |
| - | - redă ton (500Hz, 50ms) | + | |
| - | ISR(INT1_vect) [Buton J2]: | + | Firmware-ul este structurat într-un singur fișier principal: |
| - | - verificare debounce | + | |
| - | - contor_apasari++ | + | |
| - | - dacă contor_apasari >= dificultate: poziție_LED++, contor = 0 | + | |
| - | - redă ton (800Hz, 50ms) | + | |
| - | CÂȘTIG: | + | * ''cyberpull.ino'' — punctul de intrare. Inițializează toate perifericele (bandă LED, LCD, butoane, buzzer, potențiometru), configurează întreruperile hardware, pornește jocul ș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 J1 | Întrerupere externă — apăsare jucător 1 | | ||
| + | | D3 (INT1) | Buton J2 | Întrerupere externă — apăsare jucător 2 | | ||
| + | | D4 | LED buton J1 | Iluminare buton jucător 1 | | ||
| + | | D5 | LED buton J2 | Iluminare buton jucător 2 | | ||
| + | | D6 | Bandă LED WS2812B (DIN) | Semnal date bandă LED | | ||
| + | | D11 (OC2A) | Buzzer pasiv | PWM Timer2 — generare sunete | | ||
| + | | A0 | Potențiometru 10kΩ | ADC — citire dificultate | | ||
| + | | 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). 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 jucatorul în acel moment. |
| - | ## Concluzii | + | Fiecare ISR implementează debouncing software cu o fereastră de 50ms — dacă două apăsări vin în mai puțin de 50ms, a doua este ignorată (zgomot mecanic al butonului). |
| - | *(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 PWM (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 × 64 × frecvență) − 1 |
| - | **Repository GitHub:** *(link de adăugat)* | + | Sunete generate: |
| + | * **400 Hz** — mutare spre J1 | ||
| + | * **600 Hz** — mutare spre J2 | ||
| + | * **Melodie Do-Re-Mi-Fa-Sol** — victorie rundă | ||
| - | 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-ul, la dificultate 8 sunt necesare 8 apăsări. |
| - | |---|---| | + | |
| - | | Mai 2026 | Definirea conceptului, finalizarea listei de componente | | + | //Comunicare LCD prin I2C (Lab 6)// |
| - | | *(TBD)* | Comandarea și primirea componentelor | | + | |
| - | | *(TBD)* | Asamblarea hardware și cablajul | | + | |
| - | | *(TBD)* | Dezvoltare software — întreruperi + control LED | | + | |
| - | | *(TBD)* | Dezvoltare software — ADC, PWM, I2C | | + | |
| - | | *(TBD)* | Testare integrată și debugging | | + | |
| - | | *(TBD)* | Demo final și documentație | | + | |
| - | --- | + | 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 și timpul scurs din rundă. |
| - | ## Bibliografie și Resurse | + | **Funcții implementate** |
| - | ### Resurse Hardware | + | ^ Funcție ^ Rol ^ |
| - | - [Datasheet ATmega328P](https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf) | + | | ''setup()'' | Inițializează toate perifericele, configurează întreruperile, pornește jocul | |
| - | - [Datasheet WS2812B LED](https://cdn-shop.adafruit.com/datasheets/WS2812B.pdf) | + | | ''loop()'' | Bucla principală: citește ADC, actualizează LED și LCD, verifică câștig | |
| - | - [Datasheet PCF8574 I2C Expander](https://www.ti.com/lit/ds/symlink/pcf8574.pdf) | + | | ''ISR(INT0_vect)'' | Tratează apăsarea butonului J1 — debounce + mutare LED stânga | |
| - | - [Schema Arduino Uno R3](https://www.arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-schematic.pdf) | + | | ''ISR(INT1_vect)'' | Tratează apăsarea butonului J2 — debounce + mutare LED dreapta | |
| + | | ''afiseazaBanda()'' | Actualizează banda LED: zona J1 roșu, zona J2 albastru, LED activ alb | | ||
| + | | ''animatieVictorie()'' | Clipire bandă LED în culoarea câștigătorului | | ||
| + | | ''animatieStart()'' | Animație de intro la începerea rundei | | ||
| + | | ''buzzerOn()'' | Pornește buzzerul la frecvența specificată prin Timer2 CTC | | ||
| + | | ''buzzerOff()'' | Oprește buzzerul | | ||
| + | | ''beep()'' | Emite un sunet scurt la frecvența și durata specificate | | ||
| + | | ''melodieVictorie()'' | Redă melodia Do-Re-Mi-Fa-Sol la câștigarea rundei | | ||
| + | | ''citesteDificultate()'' | Citește ADC și returnează dificultatea 1–8 | | ||
| + | | ''afiseazaLCD()'' | Afișează scorul și cronometrul pe LCD prin I2C | | ||
| + | | ''afiseazaVictorieLCD()'' | Afișează mesajul de victorie a rundei pe LCD | | ||
| + | | ''verificaCastig()'' | Verifică dacă LED-ul a ajuns la capătul benzii | | ||
| + | | ''resetRunda()'' | Resetează pozițiile și contoarele pentru o rundă nouă | | ||
| + | | ''initIntreruperi()'' | Configurează registrele EICRA și EIMSK pentru INT0/INT1 | | ||
| - | ### Resurse Software | + | ===== Bibliografie/Resurse ===== |
| - | - [Biblioteca Adafruit NeoPixel](https://github.com/adafruit/Adafruit_NeoPixel) | + | |
| - | - [Biblioteca LiquidCrystal_I2C](https://github.com/johnrickman/LiquidCrystal_I2C) | + | |
| - | - [Arduino Reference — attachInterrupt()](https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/) | + | |
| - | - [Arduino Reference — analogRead()](https://www.arduino.cc/reference/en/language/functions/analog-io/analogread/) | + | |
| - | - [Secrets of Arduino PWM](https://docs.arduino.cc/tutorials/generic/secrets-of-arduino-pwm/) | + | |
| - | ### 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]] | ||