Differences

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

Link to this comparison view

pm:prj2024:sseverin:andra_ioana.stoica [2024/04/28 17:10]
andra_ioana.stoica [Descriere generală]
pm:prj2024:sseverin:andra_ioana.stoica [2024/05/27 23:30] (current)
andra_ioana.stoica [Rezultate Obţinute]
Line 25: Line 25:
   * Dacă utilizatorul a selectat o poziție cu bombă sau a descoperit toate celulele fără bombe, jocul se încheie.   * Dacă utilizatorul a selectat o poziție cu bombă sau a descoperit toate celulele fără bombe, jocul se încheie.
   * Se afișează un mesaj corespunzător pe display și se dezactivează buzzer-ul pentru a marca sfârșitul jocului.   * Se afișează un mesaj corespunzător pe display și se dezactivează buzzer-ul pentru a marca sfârșitul jocului.
 +
 +{{ :​pm:​prj2024:​sseverin:​stoicaandrapm.png |}}
  
 ===== Hardware Design ===== ===== Hardware Design =====
 +
 +Listă componente necesare:
 +  * Arduino UNO (sau echivalent) x 1
 +  * Display (I2C) x 1
 +  * Buzzer x 1
 +  * LED-uri x 2
 +  * Butoane x 4
 +  * Joystick analog x 1
 +  * Cabluri
 +  * Breadboard x 1
 +  * Rezistori
  
 <note tip> <note tip>
-Aici puneţi tot ce ţine de hardware design: +În imaginile ​ce urmează, am folosit 2 potențiometre în locul joystick-ului care se ocupă ​de mișcările ​pe sistemul de axe xOy.
-  * listă de piese +
-  * scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri,​ e.g. http://​www.captain.at/​electronic-atmega16-mmc-schematic.png) +
-  * diagrame de semnal  +
-  * rezultatele simulării+
 </​note>​ </​note>​
 +
 +Model Tinkercad:
 +
 +{{ :​pm:​prj2024:​sseverin:​andrastoica-tinkercad.jpg?​500 |}}
 +
 +Schematic:
 +
 +{{ :​pm:​prj2024:​sseverin:​andrastoica-schematic.jpg?​500 |}}
 +
 +Cum arată acum:
 +
 +{{ :​pm:​prj2024:​sseverin:​andrastoica-hardware.jpg?​500 |}}
  
 ===== Software Design ===== ===== Software Design =====
  
 +=== Mediu de Dezvoltare ===
  
-<note tip> +  * **Platformă de Dezvoltare:​** Arduino IDE 
-Descrierea codului aplicaţiei ​(firmware): + 
-  * mediu de dezvoltare ​(if any(e.gAVR StudioCodeVisionAVR+=== Biblioteci folosite === 
-  * librării şi surse 3rd-party (e.gProcyon AVRlib+1. **Wire Library ​(`Wire.h`):** 
-  * algoritmi şstructuri ​pe care plănuiţi să le implementaţ+     - **Descriere:​** Bibliotecă standard care facilitează comunicarea I2C între Arduino și alte dispozitive I2C. 
-  * (etapa 3surse şi funcţii implementate +     - **Link:** [[https://​www.arduino.cc/​en/​Reference/​Wire|Wire Library]] 
-</note>+2. **LiquidCrystal_I2C Library (`LiquidCrystal_I2C.h`):​** 
 +     - **Descriere:​** Utilizată pentru a controla afișajele LCD I2C. 
 +     - **Link:** [[https://​github.com/​johnrickman/​LiquidCrystal_I2C|LiquidCrystal I2C Library]] 
 + 
 +=== Algoritmi şi Metode Implementate === 
 +1. //setup()// 
 +  * **Descriere:​** Inițializează toate componentele utilizate în joc, inclusiv LCD-ul, butoanele, LED-urile și buzzer-ul. Afișează un mesaj de întâmpinare pe LCD și pornește sunetul de start. Setează timerul inițial și pregătește tabla de joc. 
 + 
 +2. //loop()// 
 +  * **Descriere:​** Bucla principală a programului care verifică starea joculuiActualizează afișajul și poziția cursorului în funcție de intrările joystick-ului și butoanelorDacă jocul nu s-a terminatpermite selectarea celulelor și resetarea jocului prin butoane. Dacă jocul s-a terminat, afișează un mesaj de final și permite resetarea jocului. 
 + 
 +3. //​generate_board()// 
 +  * **Descriere:​** Inițializează tabla de joc cu celule acoperite (`#`). Aceasta pregătește tabla pentru jocul nou. 
 + 
 +4. //​initialize_game()//​ 
 +  * **Descriere:​** Inițializează jocul cu o configurație predefinită a minelor pe tablă. Copiază configurația minelor într-o variabilă globală. 
 + 
 +5. //​display_board()// 
 +  * **Descriere:​** Afișează tabla de joc și timpul curent pe LCDAfișează două rânduri din tablă și timpul de joc în format mm:ss în partea dreaptă a ecranului. 
 + 
 +6. //​position_cursor()// 
 +  * **Descriere:​** Poziționează cursorul pe baza intrării joystick-ului. Permite deplasarea cursorului în sus, jos, stânga șdreapta ​pe tablă. 
 + 
 +7. //​select_cell()//​ 
 +  * **Descriere:​** Selectează o celulă și dezvăluie conținutul acesteia. Dacă celula conține o mină, jocul se termină. Dacă celula conține `0`, dezvăluie și celulele adiacente ​care conțin `0`. 
 + 
 +8. //​reveal_connected_zeros()//​ 
 +  * **Descriere:​** Descoperă celulele adiacente care conțin `0` șcelulele învecinate fără mine. Utilizează o coadă pentru a explora recursiv celulele adiacente. 
 + 
 +9. //​check_win()//​ 
 +  * **Descriere:​** Verifică dacă toate celulele non-mină au fost descoperite. Dacă toate celulele non-mină sunt descoperite,​ jucătorul câștigă. 
 + 
 +10. //​display_win_message()//​ 
 +  * **Descriere:​** Afișează mesajul de câștig pe LCD pentru 2 secunde. 
 + 
 +11. //​display_game_over_message()//​ 
 +  * **Descriere:​** Afișează mesajul de game over pe LCD pentru 2 secunde. 
 + 
 +12. //​scroll_message()//​ 
 +  * **Descriere:​** Afișează un mesaj pe LCD care se derulează pentru a încuraja jucătorul ​să reînceapă jocul. Este utilizat după terminarea jocului. 
 + 
 +13. //​reveal_final_state()//​ 
 +  * **Descriere:​** Dezvăluie starea finală a jocului cu bombele clipind timp de 3 secunde. Aceasta este utilizată atât pentru câștig, cât șpentru pierdere. 
 + 
 +14. //​playStartSound()//​ 
 +  * **Descriere:​** Redă un sunet de început specific atunci când jocul începe. Utilizează un buzzer pentru a reda o melodie predefinită. 
 + 
 +15. //​playWinningSound()// 
 +  * **Descriere:​** Redă un sunet specific de câștig atunci când jucătorul câștigă jocul. Utilizează un buzzer pentru a reda o melodie predefinită de câștig. 
 + 
 +16. //​playLosingSound()//​ 
 +  * **Descriere:​** Redă un sunet specific de pierdere atunci când jucătorul pierde jocul. Utilizează un buzzer pentru a reda o melodie predefinită de pierdere. 
 + 
 +17. //​reset_game()//​ 
 +  * **Descriere:​** Resetează toate variabilele și starea jocului pentru a începe un joc nou. Afișează un mesaj de inițializare pe LCD și redă sunetul de început. Resetează timerul, LED-urile și cursorul. 
 + 
 +=== Surse şi Funcţii Implementate === 
 + 
 +**Codul Principal:​** [[https://​github.com/​andraioanastoica/​Minesweeper-Game-Arduino.git|GitHub link]]
  
 +=== Laboratoare utilizate ===
 +  - [[pm:​lab:​lab3-2023-2024|]]
 +  - [[pm:​lab:​lab4-2023-2024|]]
 +  - [[pm:​lab:​lab6-2023-2024|]]
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
-<note tip> +** Demo Youtube**: [[https://​youtu.be/H7WNXmb3Qjk|Link]]
-Care au fost rezultatele obţinute în urma realizării proiectului vostru. +
-</note>+
  
 +Câteva poze cu carcasa finală:
 +
 +{{ :​pm:​prj2024:​sseverin:​rezultat3stoicaandra.jpeg?​nolink&​400 |}}
 +
 +{{ :​pm:​prj2024:​sseverin:​rezultat2stoicaandra.jpeg?​nolink&​400 |}}
 +
 +{{ :​pm:​prj2024:​sseverin:​rezultat1stoicaandra.jpeg?​nolink&​400 |}}
 ===== Concluzii ===== ===== Concluzii =====
  
 +Proiectul a fost o oportunitate excelentă de a învăța și de a aplica cunoștințe despre programarea microcontrolerelor,​ integrarea componentelor hardware și dezvoltarea unui joc complet funcțional. A fost un exemplu clar de cum se poate combina hardware-ul și software-ul pentru a crea o experiență interactivă și captivantă.
 +
 +Consider că acest proiect m-a ajutat să vizualizez mai bine ce anume vreau să fac pe viitor.
 +
 +Per total, proiectul este unul mai mult bazat pe software, dar care a avut și dificultăți hardware pentru a obține rezultatele corecte.
 ===== Download ===== ===== Download =====
  
-<note warning>​ +Descărcare ​arhivă: 
-arhivă ​(sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectuluisurse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).+{{:​pm:​prj2024:​sseverin:​andra-ioana_stoica_332ca.zip|}}
  
-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**. +===== Bibliografie/Resurse ===== 
-</note>+==== Software Related ====
  
-===== Jurnal =====+1. [[https://​stackoverflow.com/​questions/​15984707/​when-i-use-lcd-setcursor0-3-with-a-20x4-i2c-lcd-it-prints-to-line-2-is-this-a|Stack Overflow]]
  
-<note tip> +2[[https://​forum.arduino.cc/​t/​lcd-i2c-display-questions/​915523/​4|LCD I2C Display Questions - Arduino Forum]]
-Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. +
-</note>+
  
-===== Bibliografie/Resurse =====+3. [[https://​forum.arduino.cc/​t/​bi-color-led-red-green-and-yellow-green/​412556/​3|Bi-color LED (red/green and yellow/​green) - Arduino Forum]]
  
-<​note>​ +4. [[https://​projecthub.arduino.cc/​semsemharaz/​interfacing-rgb-led-with-arduino-b59902|Interfacing RGB LED with Arduino - Project Hub]] 
-Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse ​Hardware**+ 
-</note>+5. [[https://​forum.arduino.cc/​t/​piezo-buzzer-win-and-fail-sound/​133792/​5|Piezo Buzzer Win and Fail Sound - Arduino Forum]] 
 + 
 +6. [[https://​forum.arduino.cc/​t/​testing-joystick/​469429|Testing Joystick - Arduino Forum]] 
 + 
 +7. [[https://​www.circuitbasics.com/​how-to-use-active-and-passive-buzzers-on-the-arduino/​|How to Use Active and Passive Buzzers on the Arduino - Circuit Basics]] 
 + 
 +8. [[https://​exploreembedded.com/​wiki/​Analog_JoyStick_with_Arduino|Analog Joystick with Arduino - Explore Embedded]] 
 + 
 +9. [[https://​lastminuteengineers.com/​i2c-lcd-arduino-tutorial/?​utm_content=cmp-true|I2C LCD with Arduino Tutorial - Last Minute Engineers]] 
 + 
 +10. [[https://​www.geeksforgeeks.org/​cpp-implementation-minesweeper-game/​|C++ Implementation of Minesweeper Game - GeeksforGeeks]] 
 + 
 +==== Hardware ​Related ==== 
 + 
 +1[[https://​www.optimusdigital.ro/​ro/​index.php?​controller=attachment&​id_attachment=29|I2C Controller - Optimus Digital]] 
 + 
 +2. [[https://​www.optimusdigital.ro/​ro/​index.php?​controller=attachment&​id_attachment=31|LCD Display - Optimus Digital]] 
 + 
 +3. [[https://​www.optimusdigital.ro/​ro/​index.php?​controller=attachment&​id_attachment=143|Placa de Dezvoltare - Optimus Digital]] 
 + 
 +4. [[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 - Optimus Digital]]
  
 <​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>​
  
pm/prj2024/sseverin/andra_ioana.stoica.1714313449.txt.gz · Last modified: 2024/04/28 17:10 by andra_ioana.stoica
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