Schema bloc:
Schema electrica:
Legarea cititor Card SD: Pentru legarea cardului SD, am legat la pinii de la cititor corespunzatori placii arduino MISO - D12, MOSI - D11, SCK - D13, CS - D10 (am ales eu, nu are un pin corespunzator pe placa), GND-ul e legat la GND si ca tensiunea am ales-o pe cea de 5V.
Legare display: Asemanator ca la card SD, am legat la pinii corespunzatori placi: SDA - A4, SCL - A5, GND-ul e legat la GND, iar VCC-ul e legat la tensiunea de 3.3V.
La celelalte componente, a fost o legare destul de simpla, fiecare fiind legata la GND si un pin pe care l-am ales.
Set-up:
Testare componenta: Am ales testarea display-ului prin afisarea unui string.
Mediul de dezvoltare al proiectului este Arduino IDE. Librarii folosite: U8g2lib, SD, SPI, TMRpcm. Am folosit U82glib pentru a desena pe ecran jocul in sine, iar SD, SPI si TMRpcm sunt folosite pentru a pune melodii de pe cardul SD in Main Menu.
Concept general: Jocul functioneaza prin aratarea main menu-ului si incepe propriu-zis o data cu apasarea butonului. In continuarea, starea player-ului (adica de viata si moarte) este aratarea prin luminarea LED-ului (verde - in viata, rosu - mort). Player-ul se va deplasa si va trebui prin apasarea butonului sa sara pentru a depasi obstacolele. Daca acesta va interfera cu un obiect, display-ul va arata meniul de Game Over si se va lumina LED-ul rosu.
Algoritmi si functii:
setup()
In functia, setup se face initializarea piniilor si se va arata mesajul de intro pana la apasarea butonului.
introMessage()
Folosind, u8g2lib se deseneaza meniul principal.
play()
Functia pentru jocul respectiv. Se initializeaza obstacolele, player-ul si scorul acestuia. La baza, are un loop din care se iese numai daca se face o coliziune dintre player si obstacol. In loop, mai intai citesc sa vad daca am un input si butonul a fost apasat. Daca da, si momentan player nu este in actiunea de a sari, il fac sa sara.
Daca sar, updatez coordonatele player-ului sa sara. Dupa acest pas, verific daca exita o coliziune dintre player si obstacol. Daca exista, ies din acest loop. Altfel, verific sa vad daca obstacolele peste care am sarit au iesit din display si daca da, le voi initializa din nou sa apara pe display.
Odata cu pierderea jocului si iesirea din loop, desenez meniul de GameOver si afisez scorul.
gameOver()
Folosind din nou u8g2, voi desena meniul de game over. Pot relua jocul prin apasarea butonului.
Concepte folosite de la laborator
Link video joculet:
https://www.youtube.com/watch?v=CPqGosRE6fo
Link video buzzer:
https://www.youtube.com/watch?v=Q_gELkM0WD4
Implementarea joculetului a fost una simplistica care a avut cateva dificultati, dar a fost un journey dragut. Printe dificultati s-a numarat lipsa memoriei dinamice de pe placa o data cu adaugarea de sunet si faptul ca testul audio care se aude destul de prost, dar acesta functioneaza. Inca o dificultate am putea zice a fost vanatoare de componente. In rest, totul a fost interesant si a fost smooth sailing. Recomand.
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.
Link Github: https://github.com/pauna0311/ProiectPM
Surse: https://kits.plusivo.com/