Table of Contents

Tetris Table

Autorul poate fi contactat la adresa: petrgcosmin@gmail.com.

Introducere

Tema acestui proiect consta in implementarea unui joc de tetris pe o platforma din lemn/plastic folosind led-uri (un joystick care din pacate nu mai functioneaza) si butoane. Jocul va putea fi jucat direct cu ajutorul celor 4 butoane asezate pe un controller separat de tablita, fara a fi nevoie de mecanisme complicate de control.

Scopul acestui proiect este de a pune in practica cunostintele dobandite in cadrul laboratoarelor de PM. De asemenea, ar trebui sa rezulte si o modalitate destul de buna de distractie si relaxare pentru utilizatori, mai ales atunci cand se satura de temele dificile de la facultate.

Descriere Generala

Jocul consta in potrivirea formelor de 4 celule astfel incat la formarea unei linii de celule complet ocupata linia respectiva va disparea, linia imediat urmatoare(daca exista) sa ii ia locul, obtinand astfel un anumit scor.

Folosind cele 4 butoane utilizatorul va trimite informatii placutei astfel incat formele se pot deplasa stanga dreapta, se pot roti stanga dreapta cu 90 de grade sau pot fi coborate mai repede.

Pentru afisaj voi folosi o matrice de led-uri RGB peste care voi aseza o bucata de policarbonat.

Hardware Design

Nume piesa Cod piesa/Link
PCB PM 2019
Joystick Joystick Biaxial JM-01(RIP)
Butoane x4 - Butoane cu capac
Leduri WS2812B Led Strip
Alte piese Conectori, condensatori, fire, rezistente
Altele Hartie, platforma plastic, despartitor din carton, geam

Schema Electrica

Software Design

Ca mediu de dezvoltare am folosit Atmel Studio.

Controlarea led-urilor am realizat-o folosind o parte(o singura functie) dintr-o biblioteca speciala. Aceasta functie primeste ca argument un vector de culori, dimensiunea vectorului fiind numarul de led-uri.

Pentru butoane am folosit intreruperi, realizandu-se operatia dorita de jucator(stanga, dreapta, jos, rotire). Valoarea intoarsa de fotorezistor o obtin utilizand convertorul analogic de pe placuta(citire pe PA0). Aceasta valoare este folosita mai departe pentru a scala luminozitatea led-urilor si initial pentru a oferi un seed pentru random.

Cat timp jocul nu este in starea finala(mai exista miscari pe care jucatorul le poate face), vor fi generate piese aleator cu culori de asemenea diverse. Scopul jucatorului este de a completa linii pentru a obtine punctaj cat mai mare. Se obtine scor individual si pentru fiecare piesa asezata pentru a incuraja jucatorul.

Cand jocul intra in starea finala, jucatorul este notificat de acest lucru printr-un mare X si este afisat scorul dupa modelul afisajului cu 7 segmente.

Rezultate Obținute

Matrice de led-uri:


Controller:


In timpul jocului:




Scor:


Demo

Concluzii

Am reusit sa implementez aproape tot ce mi-am propus la acest proiect. Am inceput utilizand un joystick, insa acesta s-a stricat cand am calcat pe el. A fost destul de repede inlocuit de cele 3 butoane. Am introdus si functionalitati suplimentare fata de planul initial: scrierea scorului pe led-uri, utilizarea fotorezistor-ului pentru luminozitate.

Marea dificultate a constat in faptul ca placuta dupa cateva incarcari nu mai era vazuta de laptop si era necesara introducerea bootloader-ului din nou. Am folosit un programator ISP pentru asta. Un alt impediment a constat in faptul ca piesele mele nu apareau tocmai random, obtinand tot timpul aceeasi secventa de piese(datorita seed-ului). Pentru asta, am luat o valoare intoarsa de senzorul de lumina si am folosit hash-ul acesteia ca seed.

In continuare urmaresc sa introduc si sunete deoarece o parte importanta a jocurilor o constituie muzica.

Arhiva contine fisierele de implementare (*.c), Readme si Makefile.
tetristable.zip

Jurnal

Achizitionare placuta si componente de baza: 16.04.2019
Lipit placa de baza: 21.04.2019
Instalare bootloader: 23.04.2019
Achizitionare led-uri, breadboard, fire: 30.04.2019
Schema electrica Eagle: 4.05.2019
Achizitionare butoane, led-uri, materiale cutie: 10.05.2019
Demarare construire cutie: 15.05.2019
Lipire led-uri: 17.05.2019 - 19.05.2019
Achzitionare led-uri(a treia tura): 23.05.2019
Construire controller: 22.05.2019
Atasara fotorezistor si implementare functionalitate: 23.05.2019
Finalizare proiect: 24.05.2019

Bibliografie/Resurse

Biblioteca led-uri
Laborator 5 - ADC
Download PDF