This shows you the differences between two versions of the page.
pm:prj2021:avaduva:xsi0 [2021/05/22 18:39] cristina.balasoiu |
pm:prj2021:avaduva:xsi0 [2021/05/22 21:56] (current) cristina.balasoiu |
||
---|---|---|---|
Line 3: | Line 3: | ||
===== Introducere ===== | ===== Introducere ===== | ||
- | Proiectul are ca scop creerea clasicului joc de X si 0 folosind leduri NeoPixel pentru simularea chenarelor jocului si un ecran LCD ce poate afisa urmatoarele mesaje: "X WON", "0 WON" si "TIE" | + | Proiectul are ca scop creerea clasicului joc de X si 0 folosind leduri NeoPixel pentru simularea chenarelor jocului si un ecran LCD ce poate afisa urmatoarele mesaje: "X WON", "0 WON" si "TIE". |
+ | Fiecare jucator va apasa pe rand cate un buton din intervalul 1-9 de pe keypad pentru a-si face miscarea. Initial toate ledurile conectate sunt albe, ceea ce inseamna ca tabla de joc e goala. Ledul corespunzator butonului apasat se va face verde daca jucatorul joaca cu X sau rosu daca joaca cu 0. Jocul continua pana cand unul dintre jucatori castiga sau pana se ajunge la remiza. Rezultatul rundei va fi afisat pe ecranul LCD. Daca se doreste inceperea unui nou joc se va apasa butonul de reset, moment incare toate ledurile vor avea iar culoarea gri iar ecranul LCD va afisa mesajul "Reset pressed". | ||
===== Descriere generala ===== | ===== Descriere generala ===== | ||
- | Fiecare jucator va apasa pe rand cate un buton din intervalul 1-9 de pe keypad pentru a-si face miscarea. Initial toate ledurile conectate sunt albastre, ceea ce inseamna ca tabla de joc e goala. Ledul corespunzator butonului apasat se va face verde daca jucatorul joaca cu X sau rosu daca joaca cu 0. Jocul continua pana cand unul dintre jucatori castiga sau pana se ajunge la remiza. Rezultatul rundei va fi afisat pe ecranul LCD. Daca se doreste inceperea unui nou joc se va apasa butonul de reset, moment incare toate ledurile vor avea iar culoarea gri iar ecranul LCD va afisa mesajul "Reset pressed". | + | Ledurile, ecranul LCD, potentiometrul folosit pentru LCD si butonul sunt conectate la breadboard pentru a se putea folosi de VCC si GND. Ledurile sunt conctate la placuta la pinul 12 pentru a primi input. Potentiometrul e conectat la LCD iar LCD-ul e conectat la placuta la pinii A0-A5 si la o rezistenta pozitionata pe breadboard. Keypad-ul e conectat la placuta la pinii 2-9 (2-5 pentru coloane si 6-9 pentru linii) catre care trimite simbolul butonului apasat. Butonul e conectat la pinul 10, avand ca output state-ul sau (HIGH daca a fost apasat si LOW in caz contrar). Cei doi jucatori vor uca apasand pe rand cate un buton de pe keypad. |
+ | ==== Schema bloc ==== | ||
+ | |||
+ | {{ :pm:prj2021:avaduva:xsi0.png |}} | ||
===== Hardware Design ===== | ===== Hardware Design ===== | ||
Line 17: | Line 21: | ||
* Keypad 4*4 | * Keypad 4*4 | ||
* LCD | * LCD | ||
- | * Rezistenta | + | * 2 rezistente |
* Potentiometru | * Potentiometru | ||
* Pushbutton | * Pushbutton | ||
* Fire | * Fire | ||
- | ==== Schema bloc ==== | ||
- | |||
- | {{ :pm:prj2021:avaduva:xsi0.png |}} | ||
==== Schema electrica ==== | ==== Schema electrica ==== | ||
Line 36: | Line 37: | ||
- LiquidCrystal.h (pentru ecranul LCD) | - LiquidCrystal.h (pentru ecranul LCD) | ||
* algoritmul: | * algoritmul: | ||
- | Algoritmul creeaza o mapare intre butoanele 1-9 ale keypad-ului si cele 9 leduri conectate pentru a simula tabla de joc. Fiecare apasare a unuia dintre butoanele mentionate reprezinta o mutare. Se utilizeaza o variabila player initiata cu 1 pentru a retine jucatorul curent. Aceasta poate avea valorile 1 sau -1. La fiecare mutare se face switch intre jucatori (player *= -1) pentru a aprinde ledul corespunzator butonului apasat in culoarea jucatorului corespunzator si se verifica daca s-a creat un sir consecutiv de 3 culori identice pe oricare linie, coloana sau diagonala sau, in caz contrar, daca tabla este plina (remiza). Daca s-a detectat oricare dintre cele 3 rezultate posibile de finalizare a jocului (X castiga, 0 castiga sau remiza), acesta va fi afisat pe ecranul LCD impreuna cu scorul. Exista posibilitatea de incepere a unui joc nou prin apsarea butonului de reset, moment in care ledurile se vor intoarce la culoarea default (albastru), matricea folosita pentru retinerea apasarilor efctuate de jucatori e reinitiata iar rezultatul jocului anterior este sters de pe ecranul LCD. | + | Algoritmul creeaza o mapare intre butoanele 1-9 ale keypad-ului si cele 9 leduri conectate pentru a simula tabla de joc. Fiecare apasare a unuia dintre butoanele mentionate reprezinta o mutare. Se utilizeaza o variabila player initiata cu 1 pentru a retine jucatorul curent. Aceasta poate avea valorile 1 sau -1. La fiecare mutare se face switch intre jucatori (player *= -1) pentru a aprinde ledul corespunzator butonului apasat in culoarea jucatorului corespunzator si se verifica daca s-a creat un sir consecutiv de 3 culori identice pe oricare linie, coloana sau diagonala sau, in caz contrar, daca tabla este plina (remiza). Daca s-a detectat oricare dintre cele 3 rezultate posibile de finalizare a jocului (X castiga, 0 castiga sau remiza), acesta va fi afisat pe ecranul LCD impreuna cu scorul. Exista posibilitatea de incepere a unui joc nou prin apsarea butonului de reset, moment in care ledurile se vor intoarce la culoarea default (alb), matricea folosita pentru retinerea apasarilor efctuate de jucatori e reinitiata iar rezultatul jocului anterior este sters de pe ecranul LCD. |
+ | ==== Functii folosite ==== | ||
+ | * setup | ||
+ | - pornirea LCD-ului | ||
+ | - configurarea LCD-ului | ||
+ | - afisarea pe LCD a mesajului default | ||
+ | - initializarea led-urilor | ||
+ | * loop | ||
+ | - primirea datelor de la keypad si de la butonul de reset | ||
+ | - setarea culorilor ledurilor | ||
+ | - afisarea mesajului corespunzator in functie de rezultatul jocului | ||
+ | * checkWin | ||
+ | - verifica stateul jocului dupa fiecare mutare (daca a castigat X sau 0 sau daca e remiza sau daca jocul continua) | ||
===== Rezultate obtinute ===== | ===== Rezultate obtinute ===== | ||
+ | Link catre demo: | ||
+ | [[https://drive.google.com/file/d/1sTbpD5P_kCgGkzJM4Ct9Iu5iu5F1IGT-/view?usp=sharing]] | ||
+ | |||
{{ :pm:prj2021:avaduva:rezultat_xsi0_1.jpg?500 |}} | {{ :pm:prj2021:avaduva:rezultat_xsi0_1.jpg?500 |}} | ||
Line 45: | Line 61: | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
- | ===== Download ===== | + | ==== Download ==== |
- | + | {{:pm:prj2021:avaduva:balasoiu_cristina_ioana_333cc_resurse.zip|}} | |
- | ===== Jurnal ===== | + | ==== Jurnal ==== |
* Etapa 1: | * Etapa 1: | ||
Dezvoltarea codului de baza si a circuitului pe platforma [[https://www.tinkercad.com/]] pentru a putea realiza mai usor o lista cu piesele necesare pentru ideea de proiect aleasa. | Dezvoltarea codului de baza si a circuitului pe platforma [[https://www.tinkercad.com/]] pentru a putea realiza mai usor o lista cu piesele necesare pentru ideea de proiect aleasa. | ||
Line 55: | Line 71: | ||
Asamblarea efectiva a partii hardware, adaptarea codului si testarea rezultatului final | Asamblarea efectiva a partii hardware, adaptarea codului si testarea rezultatului final | ||
- | ===== Bibiliografie/Resurse ===== | + | ==== Bibiliografie/Resurse ==== |
[[https://ocw.cs.pub.ro/courses/pm/prj2021/avaduva/xsi0]] | [[https://ocw.cs.pub.ro/courses/pm/prj2021/avaduva/xsi0]] | ||
[[https://ocw.cs.pub.ro/courses/pm/prj2021/avaduva/xsi0?do=export_pdf]] | [[https://ocw.cs.pub.ro/courses/pm/prj2021/avaduva/xsi0?do=export_pdf]] | ||
[[https://www.tinkercad.com/]] | [[https://www.tinkercad.com/]] | ||
+ | |||