Table of Contents

Forza 4

Nume: Cornea Nicolae-Cosmin
Grupa: 332CC

Introducere

Proiectul meu este un mini-joc de Connect 4 reprezentat printr-o placuta cu led-uri. Fiecare jucator, pe rand, va alege coloana pe care vrea sa puna “jetonul” (reprezentat printr-un led), iar jetonul va cadea pana la ultimul spatiu gol. Scopul jocului este sa ai 4 jetoane pe linie, pe coloana sau pe diagonala pentru a castiga. Ideea de la care am pornit este chiar jocul fizic cu tabla si jetoane pe care il jucam inainte. Proiectul meu este util pentru a petrece timpul si a te distra impreuna cu prietenii tai.

Descriere generală

Fiecare jucator va avea cate un joystick prin care alege pe ce coloana sa puna jetonul (ce led sa se aprinda). Pentru a selecta coloana va misca joystickul in stanga si in dreapta, iar cand se hotaraste va misca joystickul in jos pentru a confirma selectia. Led-urile (din matricea de led-uri) de pe aceeasi coloana se vor aprinde si stinge in cascada pana la ultimul led neaprins anterior. Pe ecranul LCD va aparea al carui jucator ii este randul, iar la final, cand se termina jocul, va aparea castigatorul.

Hardware Design

Lista de piese:


Mai jos sunt pozele cu circuitul fizic:



Mai jos sunt pozele cu circuitul realizat in fritzing si schema electrica:



Am atasat si un zip cu un video pentru a demonstra ca am realizat legaturile corect, iar componentele functioneaza: dem_circuit.zip

Software Design

Mediu de dezvoltare: Arduino IDE
Biblioteci: LedControl.h (pentru matricea de LED-uri), LiquidCrystal_I2C.h (pentru ecranul LCD)
Implementare:
Mai intai am inclus bibliotecile de care aveam nevoie, am definit pinii pentru joystickuri si am facut initializarile necesare. In functia checkConsecutive am verificat daca un jucator are 4 “jetoane” (LED-uri proprii aprinse) consecutive pe linie, coloana sau diagonala. Apoi in setup am am facut initializarile necesare pentru ecranul lcd si matricea de LED-uri si am afisat pentru inceput randul primului jucator. In functia changeTurn se schimba afisarea de pe ecranul lcd, unde se anunta al cui jucator ii este randul. Declar apoi intervalul de timp la care sa faca blink LED-urile destinate celui de-al doilea jucator. Pentru a diferentia jucatorii, avand o matrice monocolora, LED-urile primului jucator raman aprinse mereu, iar cele ale celui de-al doilea fac blink la un interval de timp. In functia loop mai intai verific sa schimb starea LED-urilor, dupa intervalul de timp, destinate jucatorului 2 pentru a face blink constant. Apoi in functie de al carui jucator este randul efectuez urmatoarele operatii: citesc pozitia joystickului pentru a vedea ce comanda trebuie efectuata, fie mut LED-ul la stanga sau la dreapta, fie daca este orientat in jos inseamna ca s-a confirmat selectia coloanei pe care se plaseaza “jetonul”. Daca s-a ajuns la modul de selectie caut care e ultima pozitie de pe coloana disponibila pana jos. Prin aceasta verificare aprind LED-urile de pe coloana in cascada pentru a face animatia de cadere a “jetonului”. Apoi restabilesc pozitia LED-ului la inceput pentru urmatorul jucator si schimb randul jucatorului. Ultimul pas pentru acest mod e de a verifica daca un jucator a castigat, iar daca primesc valoarea true atunci reinitializez toate variabilele pentru un joc nou, afisez castigatorul, dar si scorul si ma intorc la joc in faza initiala.

Rezultate Obţinute

Aici am atasat un video in care sunt demonstrate functionalitatile proiectului meu: videofunctionalitateforza4.zip.

Download

Aici am atasat codul in Arduino pentru proiectul meu: proiectpmcod.zip.

Bibliografie/Resurse

https://www.projecthub.in/how-to-use-16x2-i2c-lcd-with-arduino/
https://starthardware.org/en/arduino-matrix-display-8-x-8-pixels-and-lots-of-fun/
http://exploreembedded.com/wiki/Analog_JoyStick_with_Arduino
https://lastminuteengineers.com/joystick-interfacing-arduino-processing/
https://wayoda.github.io/LedControl/pages/software

Export to PDF