This is an old revision of the document!
Ultimate Tic-Tac-Toe - Roșu Mihai Cosmin - 333CA
Introducere
Ideea principală
Proiectul constă în implementarea jocului Ultimate Tic-Tac-Toe folosind drept interfață grafică un mic ecran LCD. Jocul oferă două moduri de joc:
Singleplayer: Utilizatorul joacă împotriva unui AI care dispune de două dificultăți de joc: Easy și Hard.
Multiplayer: Pentru acest mod sunt necesari doi utilizatori care își vor juca turele pe rând.
Motivație
Mereu am fost pasionat de jocuri și întotdeauna mi s-a părut interesantă ideea de a folosi un microprocesor/microcontroller pentru a crea ceva de la zero, așa că acest proiect a fost oportunitatea perfectă de a recrea unul dintre jocurile copilăriei (X și 0), într-un format mai dificil (Ultimate Tic-Tac-Toe).
Descriere generală
Explicarea proiectului
Pentru început, jucătorul poate folosi butoanele pentru a-și alege modul de joc dorit, iar apoi, în cazul în care a fost ales modul de Singleplayer, dificultatea dorită și cu ce simbol vrea să joace (X sau 0). Odată alese, jocul începe.
Pentru a selecta căsuța dorită pentru plasarea unui X (sau 0) este folosit potențiometrul, care oferă posibilitatea parcurgerii tablei de joc linie cu linie, de la stânga la dreapta. După ce este aleasă casuța dorită, este folosit unul dintre butoane pentru a definitiva alegerea. Dacă alegerea făcută nu este permisă, acest lucru este anunțat de buzzer, iar jucătorul trebuie sa aleagă din nou o căsuță.
În final, la terminarea jocului, buzzer-ul va face un sunet pentru a semnala încheierea jocului.
Laboratoare folosite
Laboratoarele folosite pentru realizarea proiectului sunt:
Schema bloc
Modul în care interacționează componentele este următorul: Arduino primește întreruperi de la butoane și de la potențiometru și trimite date către ecran și către buzzer.
Hardware Design
Lista componentelor
Lista componentelor folosite în cadrul proiectului:
Schema circuitului
Software Design
Detalii generale
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
Arduino ST7789 Fast, bibliotecă externă, folosită pentru a comunica cu ecranul, folosește Adafruit GFX
Î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.
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.
Implementare generală