This is an old revision of the document!
TicTacToe++ este o consolă handheld care transformă jocul clasic de “X și 0” dintr-o activitate banală pe hârtie într-o experiență electronică interactivă. Dispozitivul utilizează un microcontroler pentru a gestiona logica de joc, afișând grila pe un ecran OLED de înaltă rezoluție și oferind control tactil prin cinci butoane fizice. Față de varianta tradițională, proiectul aduce funcții avansate precum grile variabile (moduri de joc diferite), un sistem de memorare a scorului și feedback sonor polifonic, generat prin melodii 8-bit specifice pentru victorie sau remiză.
Scopul acestui proiect este crearea unui gadget autonom care să ofere divertisment rapid, punând în același timp în valoare puterea sistemelor embedded. Ideea a pornit de la dorința de a digitaliza un joc retro, dar cu un “upgrade” tehnologic semnificativ: înlocuirea creionului cu un algoritm care arbitrează singur meciurile și eliminarea nevoii de ecrane tactile în favoarea butoanelor mecanice. Am vrut să creez ceva ce se simte ca o consolă de jocuri din anii '90, dar care rulează pe un hardware modern și eficient.
Componentele principale pe care le utilizez în proiect sunt:
Microcontroler ATmega328P (Xplained Mini)
Este unitatea centrală de procesare a consolei, responsabilă pentru rularea logicii jocului și coordonarea tuturor perifericelor. Acesta citește semnalele de la matricea de butoane, procesează mutările jucătorilor și transmite datele vizuale către ecranul TFT prin protocolul SPI, precum și semnalele audio către buzzer. Placa permite programarea facilă prin interfața Micro-USB și oferă stabilitatea necesară pentru gestionarea unei interfețe grafice color.
Display TFT LCD 1.44 inch (Color)
Am utilizat un afișaj TFT color cu rezoluție de 128×128 pixeli pentru a oferi o interfață grafică modernă jocului TicTacToe++. Acesta comunică cu microcontrolerul prin protocolul SPI (Serial Peripheral Interface), oferind o viteză de refresh superioară. Ecranul este compatibil cu logica de 5V și afișează grila de joc, simbolurile “X” și “0” în culori diferite, cursorul de selecție și animații pentru mesajele de victorie sau remiză.
Butoane Push-Button (Input Control)
Sistemul utilizează un set de 6 butoane tactile configurate pentru un control optim: patru butoane așezate în format “D-Pad” pentru navigarea pe grilă (sus, jos, stânga, dreapta), un buton pentru confirmarea mutării (Select) și un buton pentru funcții suplimentare (Reset). Fiecare buton este configurat folosind rezistențele interne de tip pull-up ale microcontrolerului pentru a asigura citiri digitale stabile și pentru a simplifica circuitul electronic.
LED-uri de Semnalizare (5mm)
Am integrat un set de LED-uri de 5mm (roșii și verzi) pentru a oferi feedback vizual suplimentar în afara ecranului. Acestea sunt utilizate pentru a indica rândul jucătorului curent sau pentru a semnaliza starea de “Game Over”. Fiecare LED este conectat în serie cu o rezistență de 220$\Omega$ pentru a limita curentul și a proteja pinii microcontrolerului.
Buzzer Pasiv
Modulul buzzer pasiv este utilizat pentru a oferi feedback audio în timp real, îmbunătățind experiența de utilizare. Acesta permite generarea de frecvențe variabile, oferind posibilitatea de a programa sunete distincte pentru navigare, avertizări în cazul mutărilor incorecte și melodii de tip “8-bit” pentru finalul jocului, procesate prin semnale PWM.
Suport de baterii (6xAA - 9V)
Asigură alimentarea autonomă a consolei la o tensiune nominală de 9V, utilizând două suporturi de baterii conectate în serie. Această tensiune superioară este necesară pentru a menține luminozitatea constantă a ecranului TFT și pentru a asigura un curent stabil prin pinul VIN al plăcii de dezvoltare, oferind portabilitate și performanță sistemului pe durata utilizării.
Sistemul de afișare (Ecranul TFT) este conectat direct la magistrala SPI Hardware a microcontrolerului ATmega328P. Pinii SDA (Pin 11) și SCK (Pin 13) asigură o viteză maximă de transfer a datelor grafice către ecran. Pentru controlul stării, pinii CS (Pin 10), RESET (Pin 9) și A0/DC (Pin 8) gestionează activarea perifericului, inițializarea hardware și sortarea fluxului de date între comenzi și pixeli. Iluminarea de fundal (LED) și alimentarea logică (VCC) sunt legate la linia de 5V pentru stabilitate și luminozitate maximă.
Interfața de control (Butoanele) este împărțită în două blocuri funcționale și folosește exclusiv configurația INPUT_PULLUP. Prin această metodă, pinii procesorului folosesc rezistențele interne de pull-up, iar butoanele doar închid circuitul către GND (masă). Acest lucru elimină rezistențele externe și riscul de scurtcircuit.
Blocul de navigare (WASD) folosește pinii digitali directi PD4 (W), PD5 (S), PD6 (A) și PD7 (D) pentru preluarea rapidă a direcțiilor.
Blocul de sistem (Start și Select) este mapat pe pinii PD2 și PD3. Acești pini au fost aleși strategic deoarece sunt singurii care suportă întreruperi hardware externe (INT0 și INT1), permițând oprirea instantanee a codului sau trezirea plăcii din modurile de economisire a energiei.
Sistemul audio (Buzzerul) este conectat la pinul PC5. Pentru a proteja poarta logică a microcontrolerului, semnalul trece printr-o rezistență de limitare de 220Ω, care menține curentul absorbit sub pragul critic de 20mA în timpul generării bipurilor de feedback.
Alimentarea portabilă este realizată prin legarea în serie a două celule de baterie (BT1 și BT2). Polul pozitiv este conectat la pinul VIN, trimițând tensiunea brută direct în regulatorul intern al plăcii Xplained Mini. Acesta o coboară și o filtrează la un nivel fix de 5V, protejând componentele sensibile și asigurând independența proiectului față de cablul USB al calculatorului.
Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.