This shows you the differences between two versions of the page.
pm:prj2023:adarmaz:joc_de_sah [2023/05/06 16:36] victor.moldovan |
pm:prj2023:adarmaz:joc_de_sah [2023/05/26 23:08] (current) victor.moldovan |
||
---|---|---|---|
Line 2: | Line 2: | ||
===== Introducere ===== | ===== Introducere ===== | ||
- | <note tip> | ||
Prezentarea pe scurt: | Prezentarea pe scurt: | ||
Acest proiect doreste sa implementeze un joc de sah | Acest proiect doreste sa implementeze un joc de sah | ||
- | </note> | + | |
===== Descriere generală ===== | ===== Descriere generală ===== | ||
- | Jocul de sah este pornit in momentul in care cei 2 jucatori apasa "○" **(select)**. | + | {{:pm:prj2023:adarmaz:microsoftteams-image.png|}} |
Jucatorii pot naviga cu butoanele "←", "↑", "→", "↓", care muta cursorul pe tabla. Cursorul fiecarui jucator nu poate fi mutat decat atunci cand este tura acelui jucator. | Jucatorii pot naviga cu butoanele "←", "↑", "→", "↓", care muta cursorul pe tabla. Cursorul fiecarui jucator nu poate fi mutat decat atunci cand este tura acelui jucator. | ||
Line 15: | Line 14: | ||
In cazul in care este apasat **(select)** pe altceva decat un spatiu valid, mutarea se anuleaza si trebuie **(select)**ata din nou o piesa. | In cazul in care este apasat **(select)** pe altceva decat un spatiu valid, mutarea se anuleaza si trebuie **(select)**ata din nou o piesa. | ||
- | Jucatorii pot, odata pe tura, selecta "TIE" pentru a oferi o remiza. Asta ofera control celuilalt jucator, care poate accepta **(select)**and "TIE" sau refuza **(select)**and orice altceva. | + | Jucatorii pot, odata pe tura, selecta "TIE" pentru a oferi o remiza. Asta ofera control celuilalt jucator, care poate accepta apasand **(select)** sau refuza apasand orice altceva. |
- | Fiecare jucator are un timp fix pentru a realiza mutarea. In cazul in care nu se incadreaza in timp, jocul va executa o mutare la intamplare. | + | Fiecare jucator are un timp fix pentru a realiza mutarile. In cazul in care nu se incadreaza in timp, jocul va executa o mutare la intamplare. |
Un led este aprins de partea jucatorului activ pentru a indica a cui tura este. | Un led este aprins de partea jucatorului activ pentru a indica a cui tura este. | ||
Line 23: | Line 22: | ||
Jucatorii pot **(select)**a "CONCEDE" pentru a renunta si a oferi victoria oponentului. | Jucatorii pot **(select)**a "CONCEDE" pentru a renunta si a oferi victoria oponentului. | ||
- | In momentul in care un joc se incheie, jucatorii trebuie sa apese **(select)** simultan pentru a porni un nou joc. | + | In momentul in care un joc se incheie, jucatorul a carui led este aprins trebuie sa apese oricare buton pentru a porni un nou joc. |
{{https://ocw.cs.pub.ro/courses/_media/pm/prj2023/adarmaz/pm_faculta_1_.png}} | {{https://ocw.cs.pub.ro/courses/_media/pm/prj2023/adarmaz/pm_faculta_1_.png}} | ||
Line 29: | Line 28: | ||
===== Hardware Design ===== | ===== Hardware Design ===== | ||
- | <note tip> | + | Lista componentelor: |
- | Aici puneţi tot ce ţine de hardware design: | + | * 2 LED |
- | * listă de piese | + | * 1 placa Arduino UNO |
- | * scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri, e.g. http://www.captain.at/electronic-atmega16-mmc-schematic.png) | + | * 1 LCD 128x64 |
- | * diagrame de semnal | + | * 10 butoane |
- | * rezultatele simulării | + | * 10 rezistoare |
- | </note> | + | * Cabluri |
- | {{:pm:prj2023:adarmaz:microsoftteams-image.png|}} | + | Pinul 4 alimenteaza LED-ul jucatorului 1. |
+ | Pinul 5 alimenteaza LED-ul jucatorului 2. | ||
+ | |||
+ | {{https://ocw.cs.pub.ro/courses/_media/pm/prj2023/adarmaz/led.png}} | ||
+ | |||
+ | Pinul 2 alimenteaza butoanele jucatorului 1. | ||
+ | Pinul 3 alimenteaza butoanele jucatorului 2. | ||
+ | |||
+ | {{:pm:prj2023:adarmaz:butoane.png?200|}} | ||
+ | |||
+ | Ambele circuite sunt conectate la pinul A2, de pe care se citeste tensiunea aferenta fiecarui buton. | ||
+ | Fiecare din butoane scurtcircuiteaza un numar de rezistente pentru a modifica tensiunea de pe A2. | ||
+ | |||
+ | Daca sunt apasate mai multe butoane deodata, butonul cel mai la stanga (din perspectiva jucatorului activ) are prioritate, deoarece sunt scurt-circuitate toate rezistentele de la dreapta butonului. | ||
+ | |||
+ | Pinii 10 si 11 transmit date LCD-ului. 12 este clock-ul. | ||
+ | |||
+ | Pinul GND al LCD-ului este conectat la GND-ul de pe Arduino. Pinul VCC al LCD-ului este conectat la 5V. | ||
+ | |||
+ | Pinii BLA si BLK controleaza luminozitatea ecranului si sunt conectati la 3.3V si GND, respectiv. | ||
+ | |||
+ | Codul (orientativ) de culoare pentru cabluri este: | ||
+ | * Verde pentru circuitele cu LEDuri | ||
+ | * Alb-galben-gri deschis pentru conexiunile butoanelor care scurtcircuiteaza rezistente | ||
+ | * Portocaliu pentru 3.3V | ||
+ | * Rosu pentru 5V | ||
+ | * Negru si maro pentru ground | ||
+ | * Maro pentru conexiunea cu A2 | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | Mediul de dezvoltare este IDE-ul Arduino. | ||
- | <note tip> | + | Datele care trebuiesc afisate pe ecran sunt reprezentate printr-un sir de 128x64 biti. |
- | Descrierea codului aplicaţiei (firmware): | + | |
- | * 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 ===== | + | Tabla de sah este de dimensiune 64x64, fiecare patrat fiind 8x8. Programul are o matrice |
+ | de 8x8 char pe care o foloseste pentru a calcula starile jocului. | ||
- | <note tip> | + | Bitii de pe ecran sunt setati prin aplicarea unor masti hardcodate care reprezinta fiecare element de UI. |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | |
- | </note> | + | |
- | ===== Concluzii ===== | + | Jucatorii au un cursor, stocand o pozitie pe tabla de joc. |
- | ===== Download ===== | + | Se genereaza o intrerupere la fiecare masuratoare pe pin analogic pentru a detecta daca butoanele au fost apasate. |
- | <note warning> | + | Se genereaza o intrerupere la fiecare secunda pentru a decrementa timerul jucatorului activ. |
- | 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**. | + | Am folosit biblioteca U8G2 pentru a scrie pe LCD. |
- | </note> | + | |
- | ===== Jurnal ===== | + | ===== Rezultate Obţinute ===== |
- | <note tip> | + | Un joc de sah cu ecran LCD. |
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | |
- | </note> | + | ===== Download ===== |
+ | |||
+ | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
- | <note> | + | https://github.com/olikraus/u8g2 - Biblioteca u8g2. |
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | |
- | </note> | + | |
- | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> |