This shows you the differences between two versions of the page.
|
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. | ||