Differences

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

Link to this comparison view

pm:prj2023:adarmaz:utictactoe [2023/05/26 16:02]
mihai_cosmin.rosu
pm:prj2023:adarmaz:utictactoe [2023/05/27 18:17] (current)
mihai_cosmin.rosu
Line 1: Line 1:
 ====== Ultimate Tic-Tac-Toe - Roșu Mihai Cosmin - 333CA ====== ====== Ultimate Tic-Tac-Toe - Roșu Mihai Cosmin - 333CA ======
 +
 +===== Demo =====
 +
 +<​html>​
 +  <​iframe ​
 +    src="​https://​www.youtube.com/​embed/​XRYpv7-YvOo" ​
 +    title="​YouTube video player" ​
 +    frameborder="​0" ​
 +    allow="​accelerometer;​ autoplay; clipboard-write;​ encrypted-media;​ gyroscope; picture-in-picture;​ web-share" ​
 +    allowfullscreen
 +    style="​aspect-ratio:​ 16/9; width: 100%;"
 +  ></​iframe>​
 +</​html>​
  
 ===== Introducere ===== ===== Introducere =====
Line 57: Line 70:
   * Pentru dezvoltarea proiectului am folosit **Arduino IDE**, în cadrul căruia am importat următoarele biblioteci:   * Pentru dezvoltarea proiectului am folosit **Arduino IDE**, în cadrul căruia am importat următoarele biblioteci:
     - **Adafruit GFX**, bibliotecă ce se poate importa direct din IDE, necesară pentru a desena/​scrie pe ecran     - **Adafruit GFX**, bibliotecă ce se poate importa direct din IDE, necesară pentru a desena/​scrie pe ecran
-    - **Arduino ST7789 Fast**, bibliotecă externă, folosită pentru a comunica cu ecranul prin **SPI**, folosește **Adafruit GFX**+    - **Arduino ST7789 Fast**, bibliotecă externă, folosită pentru a comunica cu ecranul prin **SPI**, folosește **Adafruit GFX** și **SPI.h**
   * În cadrul implementării am folosit și operații cu registre pentru:   * În cadrul implementării am folosit și operații cu registre pentru:
     - **ADC**: Am ales să configurez și să folosesc ADC astfel, fiindcă am avut nevoie să controlez prescalerul folosit de acesta. Acest lucru era necesar fiindcă pentru o citire de ADC, de fapt au loc 100 de citiri, pentru a reduce noise-ul.     - **ADC**: Am ales să configurez și să folosesc ADC astfel, fiindcă am avut nevoie să controlez prescalerul folosit de acesta. Acest lucru era necesar fiindcă pentru o citire de ADC, de fapt au loc 100 de citiri, pentru a reduce noise-ul.
     - **PWM**: Pentru a trimite un semnal PWM buzzer-ului,​ am ales să folosesc registre pentru a configura **Timer1** în modul **FastPWM**. De asemenea, pentru a determina când trebuie oprit semnalul PWM, folosesc întreruperea de overflow a timer-ului.     - **PWM**: Pentru a trimite un semnal PWM buzzer-ului,​ am ales să folosesc registre pentru a configura **Timer1** în modul **FastPWM**. De asemenea, pentru a determina când trebuie oprit semnalul PWM, folosesc întreruperea de overflow a timer-ului.
-    - **Întreruperi**:​ Pentru întreruperile externe **INT0**, **INT1** și **TIMER1_OVF**.+    - **Întreruperi**:​ Pentru întreruperile externe **INT0**, **INT1** și întreruperea de timer **TIMER1_OVF**.
  
 ==== Implementare generală ==== ==== Implementare generală ====
Line 122: Line 135:
  
 {{ :​pm:​prj2023:​adarmaz:​utictactoe_img2.jpg?​700 |}} {{ :​pm:​prj2023:​adarmaz:​utictactoe_img2.jpg?​700 |}}
 +
 +===== Concluzii =====
 +
 +În primul rand, personal **mă bucur că am avut de făcut acest proiect**, procesul de implementare fiind complet diferit față de o temă obișnuită. Datorită acestuia, acum consider că am văzut măcar o parte din câte lucruri se pot face folosint o simplă placuță Arduino și sper să nu fie ultima dată când interacționez cu una.
 +
 +În al doilea rând, aș vrea să menționez câteva probleme ale proiectului:​
 +  * Deoarece ecranul are nevoie de un timp scurt, dar care nu este neglijabil, pentru a desena ceva, este posibil ca atunci când jocul se termina să se apese un buton, care te duce înapoi în meniu, înainte ca textul "X WINS" sau "0 WINS" să se afișeze, ceea ce duce programul în starea de meniu, deși pe ecran este afișat textul de sfârșit de joc.
 +  * Uneori, o singură apăsare de buton declanșează de două ori întreruperea. Acest lucru poate fi observat ușor încercând o mutare invalidă, fiindcă se va auzi buzzer-ul de două ori.
 +  * Pe dificultatea Hard, la începutul jocului, când tabla este în mare parte goală, o mutare a AI-ului durează aproximativ 10 secunde, ceea ce este mult. Deși nu este o problemă la fel de gravă ca celelalte două, este deranjant pentru utilizator. Timpul poate fi redus prin eficientizarea codului.
 +
 +===== Download =====
 +<note important>​**Codul sursă, biblioteca Arduino_ST7789_Fast,​ schemele și imaginile din această documentație pot fi găsite în următoarea arhivă: {{:​pm:​prj2023:​adarmaz:​pm_rosu_mihai_cosmin_333ca_2023.zip|}}.**
 +
 +**De asemenea, proiectul poate fi găsit și pe GitHub: [[https://​github.com/​mehigh8/​UltimateTicTacToePM|Ultimate Tic-Tac-Toe]]**</​note>​
 +
 +===== Bibliografie/​Resurse =====
 +
 +==== Resurse documentație ====
 +  * [[https://​miro.com/​index/​|Tool folosit la realizarea schemei bloc]]
 +  * [[https://​fritzing.org/​|Tool folosit la realizarea schemei circuitului]]
 +
 +==== Resurse hardware și software ====
 +  * [[https://​ocw.cs.pub.ro/​courses/​_media/​pm/​atmel-7810-automotive-microcontrollers-atmega328p_datasheet.pdf|Documentație ATMega328P]]
 +  * [[https://​docs.arduino.cc/​built-in-examples/​digital/​Button|Tutorial conectare buton Arduino]]
 +  * [[https://​www.youtube.com/​watch?​v=-nECx4DOE84|Tutorial folosire ecran ST7789]]
 +  * [[https://​docs.arduino.cc/​tutorials/​generic/​secrets-of-arduino-pwm|Tutorial PWM cu registre]]
 +  * [[https://​github.com/​cbm80amiga/​Arduino_ST7789_Fast|Biblioteca Arduino_ST7789_Fast]]
 +  * [[pp:​22:​teme:​prolog-ultimate-ttt|Sursă inspirație pentru prioritățile folosite în modul Singleplayer]]
  
  
 <​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>​
  
pm/prj2023/adarmaz/utictactoe.1685106166.txt.gz · Last modified: 2023/05/26 16:02 by mihai_cosmin.rosu
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