This shows you the differences between two versions of the page.
pm:prj2024:sseverin:andrei.napruiu [2024/05/16 15:44] andrei.napruiu [Hardware Design] |
pm:prj2024:sseverin:andrei.napruiu [2024/05/28 20:29] (current) andrei.napruiu [Rezultate Obţinute] |
||
---|---|---|---|
Line 45: | Line 45: | ||
| Rezistor (diverse valori) | 1/2 | | | Rezistor (diverse valori) | 1/2 | | ||
| Cabluri | nelimitat | | | Cabluri | nelimitat | | ||
+ | |||
+ | Cum arată până acum: | ||
+ | {{ :pm:prj2024:sseverin:hardware-napruiu.jpeg?750 |}} | ||
Modelul sistemului (cu componente vizibile): | Modelul sistemului (cu componente vizibile): | ||
Line 56: | Line 59: | ||
<note tip> | <note tip> | ||
- | Am utilizat potențiometre în locul joystick-urilor analogice din cadrul ambelor scheme, deoarece nu am putut găsi online un model care să se potrivească. | + | * Am utilizat potențiometre în locul joystick-urilor analogice din cadrul ambelor scheme, deoarece nu am putut găsi online un model care să se potrivească. |
+ | * Urmează să construiesc din carton (sau orice material mai accesibil) o carcasă pentru a putea juca fără posibilitatea de a deconecta cablurile. | ||
</note> | </note> | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | ==== Descrierea codului aplicației ==== | ||
- | <note tip> | + | * **Mediu de dezvoltare**: |
- | Descrierea codului aplicaţiei (firmware): | + | Pentru dezvoltarea acestui proiect, a fost utilizat mediu de dezvoltare Arduino IDE. Acesta oferă un mediu prietenos și ușor de utilizat pentru programarea microcontrolerelor din familia Atmega. |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | |
- | * (etapa 3) surse şi funcţii implementate | + | |
- | </note> | + | |
- | ===== Rezultate Obţinute ===== | + | * **Librării și surse 3rd-party**: |
+ | Au fost utilizate următoarele librării: | ||
+ | - **Wire.h**: pentru comunicarea I2C între Arduino și display-ul LCD. | ||
+ | - **LiquidCrystal_I2C.h**: pentru gestionarea și controlul display-ului LCD I2C. | ||
- | <note tip> | ||
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | ||
- | </note> | ||
- | ===== Concluzii ===== | + | * **Algoritmi și structuri pe care plănuiesc să le implementez**: |
+ | Algoritmii principali includ: | ||
+ | - Controlul mingii în jocul Pong, incluzând detectarea coliziunilor cu pereții și paletele. | ||
+ | - Actualizarea scorurilor și afișarea acestora pe display. | ||
+ | - Detectarea intrărilor analogice de la joystick-uri pentru controlul paletelor. | ||
- | ===== Download ===== | + | - **Surse și funcții implementate**: |
+ | - Inițializarea și configurarea display-ului LCD I2C. | ||
+ | - Implementarea funcției de desenare a terenului de joc și a scorului. | ||
+ | - Controlul mișcării mingii și detectarea coliziunilor. | ||
+ | - Implementarea sunetelor pentru diferite evenimente în joc (coliziuni și puncte). | ||
- | <note warning> | + | ==== Stadiul actual al implementării software ==== |
- | O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). | + | |
- | 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**. | + | Codul sursă: [[https://github.com/andreinapruiu/Pong-Game-Arduino|GitHub Link]] |
- | </note> | + | |
- | ===== Jurnal ===== | + | === Funcții create și utilizate === |
+ | |||
+ | 1. **setup** - Inițializează afișajele LCD, setează modurile pinurilor pentru butoane, LED-uri și buzzer, creează caracterul personalizat al mingii și pregătește jocul pentru selecția inițială a modului și pornirea jocului. | ||
+ | |||
+ | 2. **loop** - Bucla principală a jocului care gestionează mișcarea mingii, mișcarea paletelor, actualizarea scorului și apelarea funcției `drawScore` când este necesară o actualizare. | ||
+ | |||
+ | 3. **drawScore** - Actualizează scorurile, cronometrul și rundele câștigate pe cel de-al doilea afișaj LCD, asigurându-se că doar părțile necesare sunt actualizate pentru a evita pâlpâirea. | ||
+ | |||
+ | 4. **showStartMessage** - Afișează mesajul de pornire pe primul afișaj LCD pentru a informa jucătorii că jocul este gata de jucat. | ||
+ | |||
+ | 5. **showBallPossession** - Afișează un mesaj care indică ce jucător deține mingea la începutul rundei. | ||
+ | |||
+ | 6. **ledShowAndPlayMelody** - Aprinde LED-urile și redă o melodie folosind buzzer-ul când un jucător câștigă o rundă sau un joc. | ||
+ | |||
+ | 7. **waitForRestart** - Afișează un mesaj care solicită jucătorilor să apese un buton pentru a începe o nouă rundă. Așteaptă până când butonul este apăsat. | ||
+ | |||
+ | 8. **resetRound** - Resetează scorurile pentru runda curentă și pregătește jocul pentru runda următoare, afișând din nou mesajul de pornire. | ||
+ | |||
+ | 9. **resetGame** - Resetează toate scorurile și rundele câștigate, pregătind jocul pentru un nou meci de la început și afișează mesajul de pornire. | ||
+ | |||
+ | 10. **gameOver** - Afișează un mesaj care indică ce jucător a câștigat jocul. | ||
+ | |||
+ | 11. **selectMode** - Permite jucătorilor să selecteze între modul single-player și multiplayer folosind joystick-ul și butonul de selecție. | ||
+ | |||
+ | 12. **displayModeMenu** - Afișează meniul de selecție a modului pe cel de-al doilea afișaj LCD. | ||
+ | |||
+ | 13. **waitForModeSelection** - Instrucționează jucătorul să verifice cel de-al doilea afișaj pentru selecția modului și așteaptă selectarea modului. | ||
+ | |||
+ | 14. **movePlayer2Automatically** - Mișcă automat paleta jucătorului 2 pe baza poziției mingii, utilizată în modul single-player. | ||
+ | |||
+ | 15. **setup** - Inițializează jocul prin configurarea afișajelor LCD, a pinurilor de intrare/ieșire și a condițiilor de pornire pentru joc. | ||
+ | |||
+ | 16. **loop** - Bucla principală a jocului care rulează continuu, gestionând intrările jucătorilor, mișcarea mingii, actualizările scorurilor și schimbările de stare ale jocului. | ||
+ | |||
+ | 17. **waitForRestart** - Afișează un mesaj care cere jucătorilor să apese un buton pentru a începe o nouă rundă și așteaptă apăsarea butonului. | ||
+ | |||
+ | 18. **resetRound** - Resetează scorurile pentru runda curentă și pregătește jocul pentru o nouă rundă, afișând mesajul de pornire. | ||
+ | |||
+ | 19. **resetGame** - Resetează toate variabilele jocului la stările inițiale, pregătind pentru un nou joc. | ||
+ | |||
+ | 20. **gameOver** - Afișează un mesaj care indică ce jucător a câștigat jocul. | ||
+ | |||
+ | 21. **selectMode** - Gestionează selecția modului single-player sau multiplayer de către jucător. | ||
+ | |||
+ | 22. **displayModeMenu** - Afișează meniul de selecție a modului pe cel de-al doilea afișaj LCD. | ||
+ | |||
+ | 23. **waitForModeSelection** - Afișează instrucțiuni pentru a verifica al doilea afișaj pentru selecția modului și așteaptă alegerea jucătorului. | ||
+ | |||
+ | 24. **movePlayer2Automatically** - Mișcă automat paleta jucătorului 2 pentru a urmări mingea în modul single-player. | ||
+ | |||
+ | |||
+ | > Elementul de noutate al proiectului este dat de posibilitatea de a interacționa direct cu sistemul prin intermediul joystickurilor. | ||
+ | |||
+ | ==== Laboratoare utilizate ==== | ||
+ | - [[pm:lab:lab3-2023-2024|]] | ||
+ | - [[pm:lab:lab4-2023-2024|]] | ||
+ | - [[pm:lab:lab6-2023-2024|]] | ||
+ | |||
+ | |||
+ | ===== Rezultate Obţinute ===== | ||
+ | |||
+ | [[https://youtu.be/NIuy8t1Exc0?si=EKHTQ3DRj8NNWOY8|Youtube Link]] | ||
+ | |||
+ | ===== Concluzii ===== | ||
+ | |||
+ | ===== Download ===== | ||
<note tip> | <note tip> | ||
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | Arhiva care conține toate fișierele create pentru acest proiect se poate descărca de pe link-ul de [[https://github.com/andreinapruiu/Pong-Game-Arduino|GitHub]]. |
</note> | </note> | ||
+ | |||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
- | <note> | + | ==== Hardware Utilizat ==== |
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | |
- | </note> | + | 1. **Placă Arduino** |
+ | * [[https://www.optimusdigital.ro/ro/index.php?controller=attachment&id_attachment=143|Arduino Uno Fake]] | ||
+ | |||
+ | 2. **Afișaj LCD I2C** | ||
+ | * [[https://www.optimusdigital.ro/ro/index.php?controller=attachment&id_attachment=29|LCD 1602 I2C]] | ||
+ | |||
+ | 3. **Joystick-uri Analogice** | ||
+ | * [[https://www.optimusdigital.ro/ro/senzori-senzori-de-atingere/742-modul-joystick-ps2-biaxial-negru-cu-5-pini.html?search_query=joystick&results=42|Joystick Module]] | ||
+ | |||
+ | 4. **Butoane Digitale** | ||
+ | * [[https://www.adafruit.com/product/367|Push Buttons]] | ||
+ | |||
+ | 5. **Buzzer** | ||
+ | * [[https://www.adafruit.com/product/1536|Buzzer Module]] | ||
+ | |||
+ | ==== Software Utilizat ==== | ||
+ | |||
+ | 1. **Arduino IDE** | ||
+ | * [[https://www.arduino.cc/en/software|Arduino IDE Download]] | ||
+ | |||
+ | 2. **Configurare Display** | ||
+ | * [[https://lastminuteengineers.com/i2c-lcd-arduino-tutorial/?utm_content=cmp-true|I2C Display]] | ||
+ | |||
+ | 2. **Biblioteci Arduino** | ||
+ | * **Wire.h** | ||
+ | * [[https://www.arduino.cc/en/Reference/Wire|Arduino Wire Library]] | ||
+ | * **LiquidCrystal_I2C.h** | ||
+ | * [[https://github.com/johnrickman/LiquidCrystal_I2C|LiquidCrystal I2C Library]] | ||
<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> | ||