This shows you the differences between two versions of the page.
pm:prj2024:azamfir:ana_maria.toader02 [2024/05/27 00:13] ana_maria.toader02 [Download] |
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 35: | 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 ===== | ||
==== Setup ==== | ==== Setup ==== | ||
Line 63: | 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 75: | 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 154: | 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 188: | 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|}} | ||
- | <note tip> | + | * resetarea jocului la apăsarea switch-ului de pe joystick, cu resetarea timer-ului la 5 minute |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | {{:pm:prj2024:azamfir:ana_maria.toader02:reset.gif?700|}} |
- | </note> | + | |
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | Un proiect interesant, mă bucur că am obținut ceva funcțional. | ||
+ | Deși am ales un proiect simplu, cu puține componente hardware (pentru a nu avea mari bătăi de cap :-)) am avut mari bătăi de cap m( încercând să fac display-ul să funcționeze la tensiunea de alimentare de 3v3. | ||
===== Download ===== | ===== Download ===== | ||
[[https://github.com/anatoad/Minesweeper-Arduino|Github repo]] | [[https://github.com/anatoad/Minesweeper-Arduino|Github repo]] | ||
===== Jurnal ===== | ===== Jurnal ===== | ||
+ | * 01/05/2024 - alegere temă proiect | ||
* 04/05/2024 - finalizarea documentației + schema bloc\\ | * 04/05/2024 - finalizarea documentației + schema bloc\\ | ||
* 07/05/2024 - testarea componentelor hardware\\ | * 07/05/2024 - testarea componentelor hardware\\ | ||
* 12/05/2024 - finalizare hardware design\\ | * 12/05/2024 - finalizare hardware design\\ | ||
+ | * 17/05/2024 - Milestone 2 (hardware) \\ | ||
+ | * 21/05/2024 - start code development \\ | ||
+ | * 24/05/2024 - Milestone 3 (software) \\ | ||
Probleme întâmpinate: | Probleme întâmpinate: | ||
+ | * Plăcuța de dezvoltare Arduino UNO R3 are doar doi pini digitali ce suportă întreruperi externe (D2, D3). Aveam nevoie să configurez 3 componente pentru a folosi întreruperi (două butoane și un joystick), dar doar doi pini disponibili. Am folosit două diode pentru a multiplexa butoanele pe același pin. | ||
* Alimentarea modulului LCD funcționează la tensiunea de 3.3V, iar tensiunea de funcționare a plăcii de dezvoltare este de 5V. Am încercat inițial să folosesc un translator de nivel logic. După mult timp pierdut (și un display ars :-\) nu am reușit să îl fac să funcționeze. În urma indicațiilor laborantului, am ales să introduc în circuit rezistențe de 10kΩ. | * Alimentarea modulului LCD funcționează la tensiunea de 3.3V, iar tensiunea de funcționare a plăcii de dezvoltare este de 5V. Am încercat inițial să folosesc un translator de nivel logic. După mult timp pierdut (și un display ars :-\) nu am reușit să îl fac să funcționeze. În urma indicațiilor laborantului, am ales să introduc în circuit rezistențe de 10kΩ. | ||
+ | * Active buzzer module pe care intenționam să îl folosesc inițial nu funcționa, l-am înlocuit cu un buzzer pasiv de 5V. | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
[[https://docs.arduino.cc/resources/datasheets/A000066-datasheet.pdf|Datasheet Arduino UNO R3]]\\ | [[https://docs.arduino.cc/resources/datasheets/A000066-datasheet.pdf|Datasheet Arduino UNO R3]]\\ |