This shows you the differences between two versions of the page.
pm:prj2023:apredescu:snakegame [2023/05/23 19:22] alexandru.olaru0409 [Software Design] |
pm:prj2023:apredescu:snakegame [2023/05/28 19:23] (current) alexandru.olaru0409 [Rezultate Obţinute] |
||
---|---|---|---|
Line 97: | Line 97: | ||
* Funcția generate_food() generează mâncarea șarpelui într-un loc random (unul din cele 64 led-uri de pe matrice), care este valid și care nu este ocupat de șarpe. Aceasta se va genera, schimbându-și locul, doar după ce șarpele o va mânca. | * Funcția generate_food() generează mâncarea șarpelui într-un loc random (unul din cele 64 led-uri de pe matrice), care este valid și care nu este ocupat de șarpe. Aceasta se va genera, schimbându-și locul, doar după ce șarpele o va mânca. | ||
* Funcția scan_input() va citi input-ul de la joystick, calculând direcția de deplasare a șarpelui. Aceasta se va ocupa și de viteza jocului, care poate fi setată cu ajutorul potențiometrului (cu cât viteza este mai mică, cu atât funcția se termină mai greu, dictând intervalul de timp în care se aprind și se sting led-urile). | * Funcția scan_input() va citi input-ul de la joystick, calculând direcția de deplasare a șarpelui. Aceasta se va ocupa și de viteza jocului, care poate fi setată cu ajutorul potențiometrului (cu cât viteza este mai mică, cu atât funcția se termină mai greu, dictând intervalul de timp în care se aprind și se sting led-urile). | ||
- | * Funcția move_snake() este cea care controlează locația în care se află șarpele, în funcție de direcția acestuia. Aceasta tratează cazurile în care șarpele iși mușcă propria coadă, mănâncă mărul, trece prin marginile ”display-ului” și apare din părțile opuse, și se ocupă de aprinderea corespunzătoare a led-urilor în funcție de poziția corpului șarpelui. | + | * Funcția move_snake() este cea care controlează locația în care se află șarpele, în funcție de direcția acestuia. Aceasta tratează cazurile în care șarpele iși mușcă propria coadă, mănâncă mărul, trece prin marginile ”display-ului” și apare din părțile opuse, și se ocupă de aprinderea corespunzătoare a led-urilor în funcție de poziția corpului șarpelui. Atunci când șarpele va mânca mărul, un sunet scurt va fi emis de către buzzer. |
- | * Funcția check_game_over() verifica dacă jocul este încheiat, caz în care va afișa un mesaj de ”GAME OVER” și va reseta variabilele de joc, așteptând input de la joystick pentru ca jocul sa poată fi jucat din nou. | + | * Funcția check_game_over() verifica dacă jocul este încheiat, caz în care va afișa un mesaj de ”GAME OVER”. Buzzer-ul va emite un sunet ceva mai lung, pe o tonalitate mai joasă ,iar variabilele de joc vor fi resetate, așteptând input de la joystick pentru ca jocul sa poată fi jucat din nou. |
Line 128: | Line 128: | ||
digitalWrite(CS, HIGH); | digitalWrite(CS, HIGH); | ||
} | } | ||
- | Astfel, pinul Chip-Select (CS) este configurat, trimițându-se mai apoi prin SPI adresa registrului lui MAX7219 al matricei de leduri, precum și valoarea dorită. | + | Astfel, pinul Chip-Select (CS) este configurat, trimițându-se mai apoi prin SPI adresa registrului lui MAX7219 al matricei de leduri, precum și valoarea dorită. Dacă se dorește aprinderea sau stingerea led-urilor, conform specificațiilor din datasheet (https://www.analog.com/media/en/technical-documentation/data-sheets/max7219-max7221.pdf), adresa va fi un număr de la 1 la 8, reprezentând linia din matrice pe care se vor aplica modificări, iar valoarea un număr de la 0 la 255, indicând ce led-uri vor fi aprinse, respectiv stinse. |
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
<note tip> | <note tip> | ||
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | Rezultatele obținute în urma realizării proiectului se pot observa în următorul demo: https://www.youtube.com/watch?v=BKTVWNCKRaY&t=9s&ab_channel=AlexandruOlaru. Fiind primul proiect de acest tip pentru mine, în care am folosit componente hardware fizice și le-am asamblat, pot spune că mi-a făcut plăcere să lucrez la el și că mi-a oferit o satisfacție mai mare decat majoritatea proiectelor la care am lucrat până acum. |
+ | |||
+ | **UPDATE: Versiunea finală a proiectului o puteți observa în următorul demo:** https://www.youtube.com/watch?v=qB7Kzn-Cgeg&t=4s&ab_channel=AlexandruOlaru | ||
</note> | </note> | ||
- | ===== Concluzii ===== | ||
+ | |||
+ | ===== Concluzii ===== | ||
+ | În concluzie, am reușit sa creez ceva asemanator unei mini-console portabile mai vechi cu manetă, pe care se poate juca doar jocul Snake. Viteza de joc, adică de deplasare a șarpelui, poate fi setată cu ajutorul rotiței potențiometrului, în acest sens putând fi schimbata dificultatea jocului. Este un proiect care va putea fi folosit și în viitorul îndepărtat, atunci când ți se face dor sa rejoci unul din jocurile alături de care ai copilărit. | ||
===== Download ===== | ===== Download ===== | ||
- | <note warning> | + | <note>Arhiva proiectului: |
- | 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ă ;-). | + | {{snakeolaru.zip}} |
- | + | ||
- | 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**. | + | |
</note> | </note> | ||
- | |||
===== Jurnal ===== | ===== Jurnal ===== | ||
<note tip> | <note tip> | ||
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | * 3 Mai 2023: M1 - Introducere, Descriere generală, Schemă bloc, Listă componente hardware |
+ | * 14 Mai 2023: M2 - Schemă electrică, Hardware Design | ||
+ | * 21 Mai 2023: M3 - Implementare software, Software design | ||
+ | * 22 Mai 2023: Rezultate obținute | ||
</note> | </note> | ||
Line 155: | Line 159: | ||
<note> | <note> | ||
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | |
+ | Resurse Hardware: | ||
+ | * Data Sheet MAX7219 (matrice LED-uri): https://www.analog.com/media/en/technical-documentation/data-sheets/max7219-max7221.pdf | ||
+ | * Buzzer: https://www.ardumotive.com/how-to-use-a-buzzer-en.html | ||
+ | * Modul Joystick: https://arduinogetstarted.com/tutorials/arduino-joystick | ||
+ | |||
+ | Resurse Software: | ||
+ | * Matrice LED-uri: https://projecthub.arduino.cc/mdraber/0c417a04-ec3f-405a-a383-b2d66e889e7a | ||
+ | * Matrice LED-uri: https://github.com/wayoda/LedControl | ||
+ | * ADC: https://electronoobs.com/eng_arduino_tut156.php | ||
</note> | </note> | ||
<html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> |