TIC TAC TOE
Autor: Trofim Victoria
Grupa: 332CD
Introducere
Imi pare util acest joculet fiindca pentru a-l juca este nevoie de implicarea a minim 2 utilizatori / maxim 2 utilizatori + multi vizionatori care isi asteapta randul. Astfel, acest proiect ajuta oamenilor in socializare, iar facand parte din clasicele jocuri de entertaiment, ar atrage mai multi oameni sa il incerce si sa se distreze datorita cunoasterii preventive a conceptului jocului.
Descriere generală
Proiectul este dezvoltat pe o placuta Arduino cu afisarea starii jocului pe matricea LED. La fiecare miscare, unul din jucatori va atinge casuta dorita de pe tastatura capacitiva iar rezultatul va fi colorarea zonei alese pe matricea LED cu rosu sau verde in functie de culoarea care defineste jucatorul. Cand jocul a luat sfarsit, se apasa pe butonul de reset pentru a reincepe joaca.
Laboratoare folosite:
PWM - control LED pentru efect tranzitie intre culori
UART - afisarea starii jocului in consola + interfata processing
I2C - control tastatura capacitiva
Hardware Design
EXPLICATII SCHEMA ELECTRICA
→ Legaturile 5V - VCC → Alimentarea
→ Legaturile GND - GND → Impamantarea
→ Microcontroller - Tastatura(TTP229)
→ Microcontroller - Registre
→ Microcontroller - LED/BUTON
→ Registru1 - Matricea LED
PIN 1-4 → PIN 6-9 - control LED asoc. PIN-ului
PIN 5-7 → PIN 10-12 - control LED asoc. PIN-ului
PIN 8(GND) → GND
PIN 9 → SER(Registru2)
PIN 10 ← 5V controleaza stergerea registrului (pe LOW sterge registrul, tinem pe HIGH ca sa retinem date)
PIN 11,12,14 - explicat la sectiunea microcontroller - registre
PIN 13(!OE) → GND - (LOW pentru activarea iesirilor, altfel - deconectate)
PIN 15 → PIN 5 - control LED asoc. PIN-ului
PIN 16 ← 5V
→ Registru2 - Matricea LED
PIN 1-7 → PIN 23-16 - control LED asoc. PIN-ului
PIN 8(GND) → GND
PIN 9 → SER(Registru3)
PIN 10 ← 5V controleaza stergerea registrului (pe LOW sterge registrul, tinem pe HIGH ca sa retinem date)
PIN 11,12 - explicat la sectiunea microcontroller - registre
PIN 13(!OE) → GND - (LOW pentru activarea iesirilor, altfel - deconectate)
PIN 14 ← PIN 9 REG 1 - transmite date de la REG1 → REG2
PIN 15 → PIN 24 - control LED asoc. PIN-ului
PIN 16 ← 5V
→ Registru3 - Matricea LED
PIN 1-3 → PIN 2-4 - control LED asoc. PIN-ului
PIN 4-7 → PIN 16-13 - control LED asoc. PIN-ului
PIN 8(GND) → GND
PIN 10 ← 5V controleaza stergerea registrului (pe LOW sterge registrul, tinem pe HIGH ca sa retinem date)
PIN 11,12 - explicat la sectiunea microcontroller - registre
PIN 13(!OE) → GND - (LOW pentru activarea iesirilor, altfel - deconectate)
PIN 14 ← PIN 9 REG 2 - transmite date de la REG2 → REG3
PIN 15 → PIN 1 - control LED asoc. PIN-ului
PIN 16 ← 5V
Software Design
Descrierea codului aplicaţiei (firmware):
Mediu de dezvoltare - Arduino IDE
Librării şi surse 3rd-party : ”#include <TTP229.h>” - biblioteca third-party pentru controlul tastaturii capacitive TTP229(GetKey16(), resetKey16())
Structuri implementate
struct Matrix – structură pentru a reține starea unei celule din matricea LED: poziția rândului și starea LED-urilor verzi/roșii
matrixArray[20] – vector de Matrix pentru a salva mișcările jucătorilor pe tablă
movesArray[20] – vector care ține minte tastele apăsate (pozițiile ocupate)
board[12] – vector care reține starea fiecărei poziții din joc (0 = liber, 1 = roșu, 2 = verde)
reverseBits() → inversează ordinea bitilor dintr-un byte (pentru afisarea corectă pe LED-uri)
checkWinner() → verifică dacă un jucător a câștigat folosind combinații predefinite
Tranziție culori LED RGB → algoritm de fade color cycling între roșu, verde și albastru
Senzor folosit → TTP229 – tastatură capacitiva
TTP229 funcționează bine fără calibrare software dacă este corect alimentat și setat: SCL și SDO conectați corect la pini digitali (in cazul nostru TTP_SCL = 3, TTP_SDO = 2)
Codul folosește direct registrele temporizatorilor TCCR1A, TCCR1B, TCCR2A, TCCR2B pentru controlul LED-ului RGB → E mult mai eficient decât analogWrite() pentru controlul fin și sincronizat al culorilor. Optimizarea se face in setup() și folosit în updateRGB() prin modificarea valorilor OCR1A, OCR1B, OCR2A
Se folosește millis() pentru temporizarea tranzițiilor LED RGB, evitând delay().Delay() blochează programul, cat timp millis() permite execuție paralelă.
moveIsValid() previne ocuparea de 2 ori a aceleiași celule
Funcții separate pentru sarcini repetitive (shiftColor(), resetGame(), checkWinner()) → imbunatateste modularitatea
Rezultate Obţinute
Concluzii
Download
O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună

.
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.
Bibliografie/Resurse
Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.
Export to PDF