This shows you the differences between two versions of the page.
pm:prj2024:alucaci:anca_maria.colacel [2024/05/19 20:51] anca_maria.colacel |
pm:prj2024:alucaci:anca_maria.colacel [2024/05/21 15:02] (current) anca_maria.colacel [Rezultate Obţinute] |
||
---|---|---|---|
Line 28: | Line 28: | ||
- LCD: HY-1.8 SPI TFT (pentru printarea jocului pe el) | - LCD: HY-1.8 SPI TFT (pentru printarea jocului pe el) | ||
- Buzzer (emite anumite sunete cand jucatorul castiga/pierde/este remiza) | - Buzzer (emite anumite sunete cand jucatorul castiga/pierde/este remiza) | ||
- | - Push button: 5 bucati → up, down, right, left, ok | + | - Push button: 6 bucati → up, down, right, left, ok, exit, start |
- Fire pentru legarea pieselor | - Fire pentru legarea pieselor | ||
**PINII FOLOSITI** | **PINII FOLOSITI** | ||
In vederea realizarii legaturilor am folosit schemele specifice componentelor pentru placuta dar si pentru ecranul LCD, tinand cont de pinii corespunzatori. | In vederea realizarii legaturilor am folosit schemele specifice componentelor pentru placuta dar si pentru ecranul LCD, tinand cont de pinii corespunzatori. | ||
+ | BUTON START: D12 | ||
+ | BUTON OK: D7 | ||
+ | BUTON JOS: D6 | ||
+ | BUTON STANGA: D5 | ||
+ | BUTON DREAPTA: D4 | ||
+ | BUTON SUS: D2 | ||
+ | BUTON EXIT: D8 | ||
+ | BUZZER PASIV: D3 | ||
+ | |||
**PINI_PLACUȚĂ** | **PINI_PLACUȚĂ** | ||
Line 52: | Line 61: | ||
{{:pm:prj2024:alucaci:poza_cablaj.jpg?500|}} | {{:pm:prj2024:alucaci:poza_cablaj.jpg?500|}} | ||
- | |||
- | |||
Line 59: | Line 66: | ||
Inainte de implementarea propriu zisa a software-ului pentru proiect, am testat daca asamblarea hardware este facuta corect folosind coduri simple, dupa cum se observa in urmatoarea imagine. | Inainte de implementarea propriu zisa a software-ului pentru proiect, am testat daca asamblarea hardware este facuta corect folosind coduri simple, dupa cum se observa in urmatoarea imagine. | ||
+ | |||
+ | Butoanele sunt folosite pentru a permite miscarea in cadrul tablei de joc, 3x3. Astfel, miscarea se poate realiza sus, jos, stanga, dreapta, iar ok pozitioneaza simbolul. Butonul de start te introduce din pagina initiala de welcome in cadrul jocului, butonul de exit apasat o data te scoate din joc intr-o pagina de exit cu mesajul Good Bye printat pe ecran. In acest moment se face si reinitializarea interna a jocului. Daca se mai apasa o data pe butonul de exit vei putea intra din nou in pagina initiala de welcome si apoi intr-o noua runda de joc. | ||
+ | Buzzerul emite sunete la inceputul jocului, la finalul acestuia, la castig/remiza/pierdere si cand e randul jucatorului. | ||
+ | |||
{{:pm:prj2024:alucaci:poza_lcd_functional.jpg?500|}} | {{:pm:prj2024:alucaci:poza_lcd_functional.jpg?500|}} | ||
Line 65: | Line 76: | ||
===== Software Design ===== | ===== Software Design ===== | ||
- | Am folosit ca si mediu de dezvoltare ARDUINO IDE. Am utilizat bibliotecile SPI.h si TFT.h pentru interactiune cu ecranul LCD, intrucat am folosit un ecran care foloseste ca si protocol de comunicatie protocolul SPI. | + | Am folosit ca si mediu de dezvoltare **ARDUINO IDE**. Am utilizat bibliotecile **SPI.h si TFT.h** pentru interactiune cu ecranul LCD, intrucat am folosit un ecran care foloseste ca si protocol de comunicatie protocolul SPI. |
Am inceput prin a defini macro-uri pentru butoane, buzzer, precum si pentru CPU si HUMAN, STANGA, DREAPTA, SUS, JOS, OK, EXIT si asa mai departe. Am creat o structura numita celula prin care sa reprezint tabla de joc, ca o matrice de astfel de celule. Am vrut sa am un cod cat mai modular, astfel am implementat cate o functie pentru fiecare functionalitate dorita. Le voi descrie pe fiecare mai departe. | Am inceput prin a defini macro-uri pentru butoane, buzzer, precum si pentru CPU si HUMAN, STANGA, DREAPTA, SUS, JOS, OK, EXIT si asa mai departe. Am creat o structura numita celula prin care sa reprezint tabla de joc, ca o matrice de astfel de celule. Am vrut sa am un cod cat mai modular, astfel am implementat cate o functie pentru fiecare functionalitate dorita. Le voi descrie pe fiecare mai departe. | ||
- | ** Functii implementate in cadrul proiectului ** | + | ** Functiile implementate in cadrul proiectului ** |
+ | |||
+ | **-impartire pe sectiuni-** | ||
+ | |||
+ | **Sectiunea 1. Butoane** | ||
* functie pentru configurarea pinilor pentru butoane, am lucrat cu registri ca la laborator pentru setarea directiei ca si input si activarea rezistei de pull-up | * functie pentru configurarea pinilor pentru butoane, am lucrat cu registri ca la laborator pentru setarea directiei ca si input si activarea rezistei de pull-up | ||
- | * functie pentru a verifica daca un buton este apasat sau nu, de asemenea cu registri ca la laborator | + | * functie pentru a verifica daca un buton este apasat sau nu, de asemenea cu registri ca la laborator pentru verificarea starii butoanelor folosite |
* functie prin care se face mutarea, in functie de tipul de buton apasat (SUS, JOS, STANGA, DREAPTA) | * functie prin care se face mutarea, in functie de tipul de buton apasat (SUS, JOS, STANGA, DREAPTA) | ||
* functii prin care se face hightlight la celula unde este cursorul | * functii prin care se face hightlight la celula unde este cursorul | ||
+ | |||
+ | **Sectiunea 2. Printare pe ecranul LCD (protocol SPI, folosire SPI.h si TFT.h)** | ||
* functie de printare a paginii initiale cu mesajul sugestiv Welcome | * functie de printare a paginii initiale cu mesajul sugestiv Welcome | ||
* functie prin care desenez floricelele care apar pe ecranul initial | * functie prin care desenez floricelele care apar pe ecranul initial | ||
Line 79: | Line 96: | ||
* functie pentru printarea tablei de joc | * functie pentru printarea tablei de joc | ||
* functie cu informatii pentru a tine scorul | * functie cu informatii pentru a tine scorul | ||
- | * functie pentru desenarea simbolurilor folosite, am folosit SMILEY FACE pentru X, care este simbolul jucatorului si SAD FACE pentru 0, simbolol CPU-ului. | + | * functie pentru desenarea simbolurilor folosite, am folosit SMILEY FACE pentru X, care este simbolul jucatorului si SAD FACE pentru 0, simbolol CPU-ului, se alege in mod random cine incepe jocul |
- | * functie pentru initializarea matricei, care reprezinta tabla de joc, practic cand se face o mutare simbolul apare atat in matrice cat si pe tabla de pe ecran in mod grafic | + | |
- | * functie pentru mutarea CPU-ului, am vrut sa implementez algoritmul MINIMAX, insa dura destul de mult la inceput cand tabla era goala si trebuia sa se treaca prin toate posibilitatile, astfel am gandit in felul urmator: | + | **Sectiunea 3. Zgomote emise de buzzer (folosesc functia tone() )** |
- | - CPU verifica daca exista pe orice diagonala/verticala/orizontala 2 simboluri de-ale lui si in acest caz il pune pe al trilea si castiga | + | |
- | - CPU verifica daca adversarul are 2 simboluri puse pe orice diagonala/verticala/orizontala si pune acolo pentru a sabota asversarul | + | |
- | - daca nu e niciuna din acestea doua cazuri va pune random | + | |
- | * functie pentru a verifica daca jocul s-a terminta jocul | + | |
- | * functie pentru a verifica daca e tabla plina | + | |
- | * functie pentru a verifica daca jocul a fost castigat/pierdut/remiza | + | |
* functii pentru a emite sunete diferite: | * functii pentru a emite sunete diferite: | ||
- cand muta jucatorul | - cand muta jucatorul | ||
Line 94: | Line 105: | ||
- cand este remiza | - cand este remiza | ||
- cand este pierdere | - cand este pierdere | ||
+ | |||
+ | **Sectiunea 4. Logica jocului** | ||
+ | * functie pentru initializarea matricei, care reprezinta tabla de joc, practic cand se face o mutare simbolul apare atat in matrice cat si pe tabla de pe ecran in mod grafic | ||
+ | * functie pentru mutarea CPU-ului, am vrut sa implementez algoritmul MINIMAX, insa dura destul de mult la inceput cand tabla era goala si trebuia sa se treaca prin toate posibilitatile, astfel am gandit in felul urmator: | ||
+ | - CPU verifica daca exista pe orice diagonala/verticala/orizontala 2 simboluri de-ale lui si in acest caz il pune pe al trilea si castiga | ||
+ | - CPU verifica daca adversarul are 2 simboluri puse pe orice diagonala/verticala/orizontala si pune acolo pentru a sabota adversarul | ||
+ | - daca nu e niciuna din acestea doua cazuri va pune random | ||
+ | * functie pentru a verifica daca jocul s-a termintat, la apasarea unui anumit buton si daca butonul e apasat de 2 ori se reintra in pagina initiala de welcome | ||
+ | * functie pentru a verifica daca e tabla plina | ||
+ | * functie pentru a verifica daca jocul a fost castigat/pierdut/remiza | ||
* in setup() se initializeaza jocul | * in setup() se initializeaza jocul | ||
* in loop() este logica jocului in functie de butoanele apasate | * in loop() este logica jocului in functie de butoanele apasate | ||
Line 99: | Line 120: | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
Am reusit sa implementez cu succes ceea ce mi-am propus, ba chiar am incercat sa aduc si functionalitati suplimentare in ceea ce priveste partea grafica, cu mai multe pagini si un mod cat mai placut si interactiv de a interactiona cu jocul. | Am reusit sa implementez cu succes ceea ce mi-am propus, ba chiar am incercat sa aduc si functionalitati suplimentare in ceea ce priveste partea grafica, cu mai multe pagini si un mod cat mai placut si interactiv de a interactiona cu jocul. | ||
+ | Mai jos am atasat cateva imagini prin care sa se observe functionalitatea jocului meu. | ||
+ | |||
+ | |||
+ | {{:pm:prj2024:alucaci:welcome.jpg?400|}} {{:pm:prj2024:alucaci:joc.jpg?400|}} | ||
+ | {{:pm:prj2024:alucaci:congrats.jpg?400|}} {{:pm:prj2024:alucaci:failed.jpg?400|}} | ||
+ | {{:pm:prj2024:alucaci:good_bye.jpg?400|}} | ||
+ | |||
+ | |||
+ | |||
- | **TODO**: de adaugat poze si videoclip cu rezultatul final | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
- | Mi-a placut foarte mult sa lucrez la acest proiect. M-a ajutat sa inteleg mult mai bine notiunile folosite in timpul laboratoarelor si a fost distractiv de implementat. | + | Mi-a placut foarte mult sa lucrez la acest proiect. M-a ajutat sa inteleg mult mai bine notiunile folosite in timpul laboratoarelor si a fost distractiv de implementat. Am inteles cum sa leg componentele hardware, sa caut in datasheet dupa informatii si sa conectez pinii dupa schemele componentelor necesare. M-am familiarizat mai bine cu lucrul cu registri, am invatat sa lucrez cu buzzere, atat active cat si pasive si am inteles diferenta dintre ele (am cumparat de ambele si am ales sa-l folosesc pe cel pasiv pentru ca se auzea mai bine). |
+ | A fost un proiect interesant si sper sa mai lucrez si in viitor cu Arduino. Acest curs a fixat niste baze importante care merita consolidate. =) | ||
Line 111: | Line 141: | ||
- 13.05 legare componente hardware + completare documentatie Sprint 2 | - 13.05 legare componente hardware + completare documentatie Sprint 2 | ||
- 14.05 completare documentatie Sprint 2 | - 14.05 completare documentatie Sprint 2 | ||
- | - 8.05-12.05 implementare softare | + | - 13.05-19.05 implementare softare |
- | - 12.05 completare documentatie Sprint 3 | + | - 19.05 completare documentatie Sprint 3 |
===== Download ===== | ===== Download ===== | ||
+ | |||
+ | {{:pm:prj2024:alucaci:proiect_pm.zip|}} | ||
===== Bibliografie ===== | ===== Bibliografie ===== | ||
- | https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf | + | https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf (datasheet placuta) |
- | http://www.lcdwiki.com/2.4inch_SPI_Module_ILI9341_SKU:MSP2402 | + | |
+ | http://www.lcdwiki.com/2.4inch_SPI_Module_ILI9341_SKU:MSP2402 (datasheet LCD) | ||