This shows you the differences between two versions of the page.
pm:prj2023:alexau:pac-man [2023/05/22 23:09] andreea_sabina.dinu [Concluzii] |
pm:prj2023:alexau:pac-man [2023/05/27 19:18] (current) andreea_sabina.dinu [Concluzii] |
||
---|---|---|---|
Line 46: | Line 46: | ||
- | <note tip> | + | Jocul folosește următoarele tehnologii și componente: |
- | 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> | + | |
+ | - Biblioteca LiquidCrystal_I2C pentru a controla afișajul LCD cu interfață I2C. | ||
+ | - Biblioteca EEPROM pentru a salva și citi scorul maxim în memoria permanentă a microcontrollerului. | ||
+ | - Un buzzer conectat la pinul 9 al Arduino pentru a reda sunete și melodii. | ||
+ | - Un joystick conectat la pinii A0 și A1 pentru a controla mișcarea lui Pac-Man. | ||
+ | - Un senzor ADC (conversor analog-digital) pentru a citi valorile analogice ale joystickului. | ||
+ | |||
+ | La inceputului jocului, este redata o melodie de start, urmata de un mesaj de Welcome si intructiuni pentru joc. Scopul jocului este să colectezi inimioarele reprezentate pe ecran, evitând fantomele care sunt afisate pe exran. Fantomele pot fi evitate de către Pac-Man, iar când este atins de o fantomă, jocul se încheie cu un semnal sonor si cu afisarea scorului curent, dar si a highscore-ului. Jucătorul poate controla mișcarea lui Pac-Man(sus/jos) folosind joystickul. | ||
+ | |||
+ | |||
+ | |||
+ | {{:pm:prj2023:alexau:play_f.png?300|}} | ||
+ | {{ :pm:prj2023:alexau:gameover.png?300|}} | ||
+ | |||
+ | |||
+ | |||
+ | În implementarea acestui joc, se folosesc întreruperi pentru a detecta mișcarea joystickului. În fiecare ciclu de joc, se citește valoarea ADC a joystickului pentru a determina poziția acestuia. Dacă joystickul este mișcat, se declanșează o întrerupere care semnalează că joystickul a fost mutat. Apoi, în funcția loop(), se verifică starea jocului și se execută acțiunile corespunzătoare. | ||
+ | |||
+ | Jocul are trei stări principale: | ||
+ | |||
+ | -STATE_INTRO: Starea de introducere a jocului. În această stare, se afișează un mesaj de bun venit și instrucțiuni pentru jucător. De asemenea, se redă o melodie de început a jocului. | ||
+ | -STATE_PLAY: Starea de joc. În această stare, jucătorul controlează mișcarea lui Pac-Man pentru a colecta inimioarele și a evita fantomele. Scorul este actualizat în timp real pe afișajul LCD. | ||
+ | -STATE_GAMEOVER: Starea de sfârșit a jocului. În această stare, se afișează un mesaj de game over și se redă o melodie de sfârșit a jocului. | ||
+ | |||
+ | |||
+ | {{ :pm:prj2023:alexau:play.png?300 |}} | ||
+ | |||
+ | Jocul utilizează o serie de structuri și variabile pentru a gestiona sprite-urile (personaje) și starea jocului. De exemplu, există o structură pentru fiecare sprite care conține informații despre poziția și tipul sprite-ului. | ||
+ | |||
+ | {{ :pm:prj2023:alexau:variabile.png?300 |}} | ||
+ | |||
+ | În codul furnizat, se folosesc întreruperile pentru a trata mișcarea joystick-ului. Prin intermediul întreruperii PCINT1 (Pin Change Interrupt 1), se detectează schimbările de stare pe pinul A1 (PC1). Atunci când joystick-ul este mutat în sus sau în jos, se declanșează o întrerupere și se setează variabila joystickMoved pe true. Această variabilă este ulterior verificată în funcția loop() pentru a determina acțiunea corespunzătoare. | ||
+ | |||
+ | |||
+ | {{:pm:prj2023:alexau:intrerupere1.png?300|}} | ||
+ | {{ :pm:prj2023:alexau:intrerupere2.png?300|}} | ||
+ | |||
+ | |||
+ | |||
+ | În funcția setup(), se configurează întreruperea și se activează ADC (Analog-to-Digital Converter). Pinul A1 (PC1) este setat ca pin de intrare, iar ADMUX (ADC Multiplexer Selection Register) și ADCSRA (ADC Control and Status Register A) sunt configurați corespunzător. În funcția loop(), se realizează citirea valorii analogice de pe pinul A1 folosind ADC. Această valoare reprezintă poziția joystick-ului pe axa Y și este stocată în variabila yValue. Apoi, întreruperile sunt dezactivate temporar (cli()) pentru a evita modificări ale valorii în timpul verificărilor. | ||
+ | |||
+ | În funcția play(), valoarea yValue este utilizată pentru a determina poziția curentă a joystick-ului și pentru a controla mișcarea lui Pac-Man în sus și în jos în funcție de aceasta. | ||
+ | |||
+ | ADC este folosit pentru a citi valorile analogice de la joystick și a le transforma în valori digitale pe care Arduino le poate procesa. Această conversie analog-digitală se realizează prin setarea corespunzătoare a registrelor ADMUX și ADCSRA și prin apelarea funcției analogRead() în care se specifică pinul analog de citire. Valoarea digitală rezultată este stocată în variabila yValue și este utilizată ulterior în funcția play() pentru a controla mișcarea Pac-Man. | ||
+ | |||
+ | {{ :pm:prj2023:alexau:adc.png?300 |}} | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
{{ :pm:prj2023:alexau:whatsapp_image_2023-05-21_at_19.33.07.jpeg?300 |}} | {{ :pm:prj2023:alexau:whatsapp_image_2023-05-21_at_19.33.07.jpeg?300 |}} | ||
- | {{ :pm:prj2023:alexau:whatsapp_image_2023-05-21_at_19.33.06.jpeg?300 |{{ :pm:prj2023:alexau:whatsapp_image_2023-05-21_at_19.33.07_1_.jpeg?300 |{{ :pm:prj2023:alexau:new.jpeg?300 |}}}}}} | ||
- | ===== Download ===== | ||
- | <note warning> | + | {{ :pm:prj2023:alexau:whatsapp_image_2023-05-21_at_19.33.06.jpeg?300 |}} |
- | 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**. | + | {{ :pm:prj2023:alexau:whatsapp_image_2023-05-21_at_19.33.07_1_.jpeg?300 |}} |
+ | |||
+ | {{ :pm:prj2023:alexau:new.jpeg?300 |}} | ||
+ | |||
+ | Pentru functionalitatea completa: | ||
+ | https://www.youtube.com/watch?v=6VUz6QU2y5k&list=PLvBYedcS0rmK3VVGU3XVkYzdAiXhlE7lu | ||
+ | ===== Download ===== | ||
+ | |||
+ | <note> | ||
+ | Am atasat o arhiva cu fişierele obţinute în urma realizării proiectului: surse, scheme, poze si un video | ||
</note> | </note> | ||
+ | |||
+ | {{:pm:prj2023:alexau:pm.zip|}} | ||
===== Jurnal ===== | ===== Jurnal ===== | ||
- | <note tip> | + | * 1-MAI-2023]- Finalizare Documentatie |
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | * [10-MAI-2023]- Finalizare Hardware |
- | </note> | + | * [23-MAI-2023]- Finalizare Software |
+ | * [27-MAI-2023]- Adaugare video, arhiva, explicatii pentru software | ||
- | ===== Bibliografie/Resurse ===== | ||
- | <note> | + | |
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | ===== Resurse Software ===== |
- | </note> | + | |
+ | https://www.arduinolibraries.info/libraries/liquid-crystal-i2-c | ||
+ | https://docs.arduino.cc/learn/built-in-libraries/eeprom | ||
+ | https://github.com/robsoncouto/arduino-songs | ||
+ | https://reference.arduino.cc/reference/en/language/functions/analog-io/analogread/ | ||
+ | https://www.arduino.cc/reference/en/language/functions/digital-io/pinmode/ | ||
+ | |||
+ | ===== Resurse Hardware===== | ||
+ | |||
+ | https://arduinogetstarted.com/tutorials/arduino-joystick | ||
+ | https://docs.arduino.cc/hardware/uno-rev3 | ||
+ | https://lastminuteengineers.com/i2c-lcd-arduino-tutorial/ | ||
<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> | ||