Proiectul este un joc de X si 0, implementat cu ajutorul microcontroller-ului ATmega16. Jocul in sine este reprezentat de o matrice de 3*3 leduri si de un touchpad simplu pentru a prelua miscarile utilizatorului. Touchpadul este alcatuit din 6 fire, cu 9 posibile intersectari. Fiecare dintre acestea aprinde ledul corespunzator din matricea de afisare. Se diferentiaza un jucator de altul prin culoarea ledului aprins(fie rosu, fie verde). Regulile jocului sunt cele clasice(vezi http://en.wikipedia.org/wiki/Tic_tac_toe).
Proiectul este adresat tuturor fanilor jocului de X si O si este o alternativa placuta la simpla foaie de hartie.
Implementarea jocului de X si O presupune 3 module principale:
Modulul Afisare reprezinta o matrice de 3*3 leduri. Toate miscarile vor fi vizibile prin aprinderea ledului corepunzator. Se folosesc leduri bicolore(rosu si verde), pentru a se diferentia jucatorii.
Modulul ATmega16 este placuta realizata la etapa I a proiectului. Nu s-au mai adaugat alte componente.
Modulul Comanda este format din touchpad. Prin apropierea firelor se inchide un circuit, miscarea fiind acceptata sau nu. Nu se accepta o miscare cand se incearca schimbarea culorii unui led.
Se folosesc urmatoarele piese:
Schema matrice leduri(stanga) si schema touchpad(dreapta) :
Pinii folositi sunt in numar de 15. Sunt 6 pini penru touchpad si 9 pentru matricea de afisare. Se folosesc pinii de la portul A, B si C. Acestia sunt specificati in schemele electrice.
Programul urmareste sa implementeze un joc de X si O, in care mutarile adversarului sunt realizate de microcontroller.
Mediul de dezvolatare este AVRStudio 4.0.
Pentru desenarea schemei electrice s-a folosit Eagle 5.7.0.
Pentru a genera mutarile, microcontroller-ul foloseste algoritmul minimax, mai exact varianta Negamax.
Efectiv in functia main(), se preia mutarea utilizatorului si apoi se calculeaza mutarea microcontroller-ului. Dupa fiecare mutare, se verifica daca a castigat cineva sau daca este remiza(adica toate cele doua casute sunt completate).
Alte functii sunt pentru a aprinde becurile si pentru a prelua mutarea de la touchpad.
Pentru a determina care casuta este selectata, se foloseste urmatorul algoritm:
Aprinderea becurilor se face prin setarea pinului de linie pe output high si a pinului de coloana pe output low(ground). Se poate observa acest lucru in schema urmatoare:
Pentru a se aprinde mai multe becuri in acelasi timp, se selecteaza liniile separat, dar la un interval de timp atat de mic, incat toate becurile par aprinse.
}
In urma testelor, proiectul este functional. Utilizatorul este cel care incepe jocul. Acesta se poate termina victorie, infrangere sau remiza.
Proiectul final(O a castigat):
Matricea de leduri:
Placuta cu extensii:
Jocul de X si O ramane interesant.