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 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]]\\
pm/prj2024/azamfir/ana_maria.toader02.1716757988.txt.gz · Last modified: 2024/05/27 00:13 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