This shows you the differences between two versions of the page.
|
pm:prj2024:alucaci:diana.stefan0106 [2024/05/23 13:47] diana.stefan0106 [Hardware Design] |
pm:prj2024:alucaci:diana.stefan0106 [2024/05/23 17:37] (current) diana.stefan0106 [Download] |
||
|---|---|---|---|
| Line 34: | Line 34: | ||
| ===== Hardware Design ===== | ===== Hardware Design ===== | ||
| - | |||
| - | Aici este ceea ce am reusit sa leg, pana acum (16.05.2024): | ||
| - | |||
| - | {{:pm:prj2024:alucaci:whatsapp_image_2024-05-17_at_00.16.30.jpeg?200|}} | ||
| <note tip> | <note tip> | ||
| Line 51: | Line 47: | ||
| | Rezistenta 330 | 1 | | | Rezistenta 330 | 1 | | ||
| | Rezistenta 220 | 2 | | | Rezistenta 220 | 2 | | ||
| + | | Breadboard 830 puncte | 1 | | ||
| </note> | </note> | ||
| Line 56: | Line 53: | ||
| === Schema electrica === | === Schema electrica === | ||
| - | === Design circuit === | + | {{ :pm:prj2024:alucaci:poza.jpeg?700 |}} |
| ===== Software Design ===== | ===== Software Design ===== | ||
| - | |||
| <note tip> | <note tip> | ||
| - | Descrierea codului aplicaţiei (firmware): | + | Mediu de dezvoltare: Arduino IDE \\ |
| - | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | Biblioteci utilizate: TFT.h SPI.h |
| - | * 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> | </note> | ||
| - | ===== Rezultate Obţinute ===== | + | === Conexiuni Pin === |
| - | <note tip> | + | * Ecran TFT |
| - | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | |
| - | </note> | + | |
| - | ===== Concluzii ===== | + | -> CS (Chip Select): Pin 10 \\ |
| + | -> DC (Data/Command): Pin 9 \\ | ||
| + | -> RST (Reset): Pin 12 \\ | ||
| + | -> Joystick | ||
| + | -> VRX (X-axa): A0 \\ | ||
| + | -> VRY (Y-axa): A1 \\ | ||
| + | -> SW (Buton): Pin 7 \\ | ||
| + | * Butoane | ||
| + | -> Buton roșu: Pin 3 \\ | ||
| + | -> Buton albastru: Pin 2 \\ | ||
| + | * LED-uri | ||
| + | -> LED roșu: Pin 4 \\ | ||
| + | -> LED albastru: Pin 5 \\ | ||
| - | ===== Download ===== | + | === Constante și Variabile === |
| + | * Culori | ||
| + | Diverse culori sunt definite pentru confort. | ||
| + | * Praguri | ||
| + | Valori analogice pentru detectarea mișcării joystick-ului. | ||
| + | * Dimensiuni | ||
| + | Lățimea și înălțimea ecranului. | ||
| + | * Câmp de mine | ||
| + | O grilă de 8x10 cu 10 mine. | ||
| + | * Poziție | ||
| + | Poziția curentă a cursorului. | ||
| - | <note warning> | + | ==== Explicația Codului ==== |
| - | 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**. | + | === Setup === |
| - | </note> | + | -> Funcția setup inițializează ecranul TFT, setează modurile pin pentru butoane și LED-uri și afișează meniul de start. |
| + | === Loop === | ||
| + | -> Funcția loop conține logica principală a jocului: \\ | ||
| + | -> Verifică condiția de câștig. \\ | ||
| + | -> Citește starea butoanelor și a joystick-ului. \\ | ||
| + | -> Dacă jocul nu a început, verifică dacă butonul de start este apăsat. \\ | ||
| + | -> Dacă jocul este în desfășurare: \\ | ||
| + | -> Gestionează plasarea stegulețelor. \\ | ||
| + | -> Gestionează dezvăluirea celulelor. \\ | ||
| + | -> Gestionează mișcarea cursorului. \\ | ||
| - | ===== Jurnal ===== | + | === Alte funcții === |
| + | * initializeminefield() | ||
| + | -> Inițializează câmpul de mine cu celule goale. | ||
| + | * placeMines() | ||
| + | -> Plasează aleatoriu mine pe câmpul de mine. | ||
| + | * calculateNumbers() | ||
| + | -> Calculează numerele care indică numărul de mine adiacente. | ||
| + | * printminefield() | ||
| + | -> Afișează câmpul de mine pe monitorul serial. | ||
| + | * displayminefield() | ||
| + | -> Afișează câmpul de mine pe ecranul TFT. | ||
| + | * drawBomb() | ||
| + | -> Desenează o bombă pe ecranul TFT. | ||
| + | * drawFlag() | ||
| + | -> Desenează un steguleț pe ecranul TFT. | ||
| + | * emptySpace() | ||
| + | -> Dezvăluie toate spațiile goale conectate. | ||
| + | * lose() | ||
| + | -> Afișează mesajul de pierdere și aprinde LED-ul roșu. | ||
| + | * win() | ||
| + | -> Afișează mesajul de câștig și aprinde LED-ul albastru. | ||
| + | * revealCell() | ||
| + | -> Dezvăluie o celulă și verifică pentru mine. | ||
| + | * displayGrid() | ||
| + | -> Desenează grila pe ecranul TFT. | ||
| + | * move() | ||
| + | -> Mișcă cursorul pe baza intrării de la joystick. | ||
| + | * draw_menu() | ||
| + | -> Afișează meniul de start. | ||
| <note tip> | <note tip> | ||
| - | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | Jocul afișează "YOU LOST" și aprinde LED-ul roșu dacă o mină este dezvăluită. \\ |
| + | Jocul afișează "YOU WON" și aprinde LED-ul albastru dacă toate celulele care nu sunt mine sunt dezvăluite. | ||
| </note> | </note> | ||
| + | |||
| + | |||
| + | ===== Rezultate Obţinute ===== | ||
| + | |||
| + | {{:pm:prj2024:alucaci:minesweeper_3.jpeg?200|}}{{:pm:prj2024:alucaci:minesweeper_2.jpeg?200|}}{{:pm:prj2024:alucaci:minesweeper_5.jpeg?200|}} \\ | ||
| + | {{:pm:prj2024:alucaci:minesweeper_1.jpeg?200|}}{{:pm:prj2024:alucaci:minesweeper_4.jpeg?200|}}{{:pm:prj2024:alucaci:minesweeper_6.jpeg?200|}} | ||
| + | |||
| + | ===== Concluzii ===== | ||
| + | Proiectul Minesweeper pe Arduino a fost finalizat cu succes, atingând toate obiectivele propuse și demonstrând viabilitatea și funcționalitatea acestuia. Experiența acumulată în cadrul acestui proiect a fost extrem de valoroasă, oferind o bază solidă pentru proiecte viitoare și dezvoltarea continuă a abilităților tehnice. | ||
| + | |||
| + | **Posibile Îmbunătățiri**: \\ | ||
| + | Extinderea Funcționalităților: Adăugarea de nivele de dificultate sau opțiuni suplimentare pentru utilizatori ar putea îmbunătăți experiența de joc. \\ | ||
| + | Optimizări de Performanță: Analizarea și optimizarea codului pentru a asigura o performanță mai bună și un răspuns mai rapid al interfeței. \\ | ||
| + | Design Ergonomic: Îmbunătățirea designului fizic pentru a facilita o interacțiune mai confortabilă și intuitivă. | ||
| + | ===== Download ===== | ||
| + | |||
| + | Arhiva se poate descarca [[https://ocw.cs.pub.ro/courses/_media/pm/prj2024/alucaci/minesweeper.zip|aici]]. | ||
| + | ===== Jurnal ===== | ||
| + | |||
| + | **05 mai**: Alegerea temei proiectului \\ | ||
| + | Decizia de a dezvolta jocul Minesweeper pe Arduino. \\ | ||
| + | Identificarea componentelor necesare. \\ | ||
| + | **15 mai**: Sosirea componentelor și asamblarea hardware \\ | ||
| + | **16 mai**: Finalizarea asamblarii hardware-ului: ecran TFT, joystick, butoane, LED-uri. \\ | ||
| + | **18 mai**: Implementarea matricei de joc și a logicii de bază \\ | ||
| + | **20 mai**: Dezvoltarea interfeței de joc și a funcțiilor principale \\ | ||
| + | **21 mai**: Crearea meniului de start și finalizarea proiectului \\ | ||
| + | Testarea finală și ajustările finale. \\ | ||
| ===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||