Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2024:azamfir:ana_maria.toader02 [2024/05/27 01:49]
ana_maria.toader02 [Hardware Design]
pm:prj2024:azamfir:ana_maria.toader02 [2024/05/27 03:27] (current)
ana_maria.toader02 [Rezultate Obţinute]
Line 10: Line 10:
   * un board (solvable) randomizat este generat pentru fiecare nou joc   * un board (solvable) randomizat este generat pentru fiecare nou joc
   * un buzzer emite sunete la realizarea unei mișcări greșite sau la câștigarea jocului   * un buzzer emite sunete la realizarea unei mișcări greșite sau la câștigarea jocului
 +  * fiecare joc are o limită de timp de 5 minute; la expirarea timpului, jocul este pierdut
 Scopul proiectului este realizarea unui joc entertaining. Scopul proiectului este realizarea unui joc entertaining.
 ===== Descriere generală ===== ===== Descriere generală =====
Line 20: Line 21:
 {{:​pm:​prj2024:​azamfir:​schema-electrica-ana_maria.toader02.png?​800|}} {{:​pm:​prj2024:​azamfir:​schema-electrica-ana_maria.toader02.png?​800|}}
 \\ \\
- 
-**Cablaj final:**\\ 
-{{:​pm:​prj2024:​azamfir:​ana_maria.toader02:​cablaj_final.jpeg?​500|}} 
  
 **Lista de componente:​**\\ **Lista de componente:​**\\
Line 38: Line 36:
 | Fire tată-tată | [[https://​www.optimusdigital.ro/​ro/​fire-fire-mufate/​885-set-fire-tata-tata-10p-10-cm.html|Set fire tată-tată]] |  2  |  2,85 lei  | | Fire tată-tată | [[https://​www.optimusdigital.ro/​ro/​fire-fire-mufate/​885-set-fire-tata-tata-10p-10-cm.html|Set fire tată-tată]] |  2  |  2,85 lei  |
 ^   Cost total: 150,87 lei  |||| ^   Cost total: 150,87 lei  ||||
 +
 +**Cablaj final:**\\
 +{{:​pm:​prj2024:​azamfir:​ana_maria.toader02:​cablaj_final.jpeg?​500|}}
 +
  
 ===== Software Design ===== ===== Software Design =====
Line 67: Line 69:
     * emiterea unor sunete distinctive acționând buzzer-ul     * emiterea unor sunete distinctive acționând buzzer-ul
     * la finalul jocului singura acțiune care mai este responsive este apăsarea switch-ului de pe joystick care duce la începerea unui joc nou     * la finalul jocului singura acțiune care mai este responsive este apăsarea switch-ului de pe joystick care duce la începerea unui joc nou
 +\\
 **Grafică**\\ **Grafică**\\
 Pentru a crea imaginile distinctive jocului pentru fiecare celulă posibilă am desenat imagini de 20x20px pe care le-am convertit folosind un [[https://​javl.github.io/​image2cpp/​|tool]] online în bitmap-uri grayscale de 8biți per pixel. Le-am afișat la poziții corespunzătoare pe ecran folosind funcția ''​**void Adafruit_GFX::​drawBitmap(int16_t x, int16_t y, const uint8_t bitmap[], int16_t w, int16_t h, uint16_t color)**''​ din biblioteca **Adafruit_GFX**. Am adăugat culori prin setarea //​foreground color//. \\ Pentru a crea imaginile distinctive jocului pentru fiecare celulă posibilă am desenat imagini de 20x20px pe care le-am convertit folosind un [[https://​javl.github.io/​image2cpp/​|tool]] online în bitmap-uri grayscale de 8biți per pixel. Le-am afișat la poziții corespunzătoare pe ecran folosind funcția ''​**void Adafruit_GFX::​drawBitmap(int16_t x, int16_t y, const uint8_t bitmap[], int16_t w, int16_t h, uint16_t color)**''​ din biblioteca **Adafruit_GFX**. Am adăugat culori prin setarea //​foreground color//. \\
Line 79: Line 81:
 }; };
 </​code>​ </​code>​
 +\\ 
 +**Buzzer**\\ 
 +La sfârșitul jocului, buzzer-ul emite sunete distinctive. Am ales două melodii din [[https://​github.com/​robsoncouto/​arduino-songs|arduino-songs]] pentru cazurile de victorie / înfrângere.\\ 
 +\\
 **Timer**\\ **Timer**\\
 Microcontroller-ul **//​ATmega328p//​** conține 3 unități de timer, două pe 8 biți (//Timer0// și //Timer2//) și unul pe 16 biți (//​Timer1//​). \\ Microcontroller-ul **//​ATmega328p//​** conține 3 unități de timer, două pe 8 biți (//Timer0// și //Timer2//) și unul pe 16 biți (//​Timer1//​). \\
Line 158: Line 163:
 digitalWrite(JOYSTICK_INTERRUPT,​ HIGH); digitalWrite(JOYSTICK_INTERRUPT,​ HIGH);
 attachInterrupt(digitalPinToInterrupt(JOYSTICK_INTERRUPT),​ ISR_joystick,​ RISING); attachInterrupt(digitalPinToInterrupt(JOYSTICK_INTERRUPT),​ ISR_joystick,​ RISING);
 +</​code>​
 +
 +Toate variabilele care vor fi modificate într-o rutină de tratare a întreruperilor trebuie marcate ca **''​volatile''​** pentru a indica compilatorului să nu treacă variabila prin cache. Orice acces la o variabilă **''​volatile''​** se va face prin RAM.
 +<code c>
 +/* Initialize volatile variables used with button interrupts */
 +volatile bool blueButtonFlag = false;
 +volatile bool redButtonFlag = false;
 +
 +volatile unsigned long lastPressRed = 0;
 +volatile unsigned long lastPressBlue = 0;
 +
 +volatile bool joystickButtonFlag = false;
 </​code>​ </​code>​
  
Line 192: Line 209:
 Parametrul **TIMER1_COMPA_vect** indică faptul că se face Compare Match cu pragul A al timerului. Parametrul **TIMER1_COMPA_vect** indică faptul că se face Compare Match cu pragul A al timerului.
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
 +  * inițializarea jocului, cu setarea timer-ului la 5 minute
 +{{:​pm:​prj2024:​azamfir:​ana_maria.toader02:​init.gif?​700|}}
 +
 +  * eliberarea unui grup de celule
 +{{:​pm:​prj2024:​azamfir:​ana_maria.toader02:​clear_multiple_cells.gif?​700|}}
 +
 +  * sfârșitul jocului
 +{{:​pm:​prj2024:​azamfir:​ana_maria.toader02:​game_won.gif?​700|}}
 +{{:​pm:​prj2024:​azamfir:​ana_maria.toader02:​game_over.gif?​700|}}
 +
 +  * resetarea jocului la apăsarea switch-ului de pe joystick, cu resetarea timer-ului la 5 minute
 +{{:​pm:​prj2024:​azamfir:​ana_maria.toader02:​reset.gif?​700|}}
 +
 ===== Concluzii ===== ===== Concluzii =====
 Un proiect interesant, mă bucur că am obținut ceva funcțional. Un proiect interesant, mă bucur că am obținut ceva funcțional.
pm/prj2024/azamfir/ana_maria.toader02.1716763787.txt.gz · Last modified: 2024/05/27 01:49 by ana_maria.toader02
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0