Autorul poate fi contactat la adresa: Login pentru adresa
Proiectul va presupune implementarea jocului “Lights out” utilizând o matrice de LED-uri, display-uri de tip 7-digits și un joystick. Scopul jocului este de a stinge toate LED-urile de pe tabla de joc în cât mai puțin timp și utilizând cât mai puține mișcări.
Utilitatea proiectului este centrată în jurul divertismentului și relaxării prin joc.
Display-ul jocului va fi o matrice de LED-uri de dimensiune 5×5, iar input-ul va fi realizat prin intermediul unui joystick. Informații precum numărul de mișcări realizate până la momentul actual și timpul trecut de la începutul jocului vor fi afișate prin intermediul a trei display-uri de tip 7-digits. Mișcarea în spațiul de joc este conceput pentru a fi cât mai intuitiv prin utilizarea unui joystick. Acesta va fi utilizat atât pentru mișcarea pe cele două axe de joc, cât și pentru selectare prin apăsarea pe joystick.
Pe schemă este reprezentată prin săgeți comunicarea dintre placa de bază și componentele adicente - sursa de curent și joystick-ul vor fi utilizate ca input-uri, iar cele două tipuri de display - matricea de led-uri și 7-digits vor fi utilizate ca output. Am optat pentru o arhitectură simplă pentru a face cât mai intuitivă interacțiunea dintre utilizator și sistem.
Denumire componentă | Număr de componente |
---|---|
Componente placă de bază | |
ATMEGA324PA-PU | 1 |
USB-B | 1 |
16MHz QMIN016 | 1 |
Diodă ZENER | 2 |
LED EL333 | 2 |
K1X10 WSL040 | 1 |
K2X10 | 1 |
PUSHBUTTON | 2 |
Rezistență 100R | 3 |
Rezistență 470R | 3 |
Rezistență 1K5 | 1 |
Rezistență 10K | 1 |
Condensator 100nF | 3 |
Condensator 15pF | 2 |
Soclu DIP40 dil40emf | 1 |
Jumper | 1 |
Componente placă de joc | |
Led 5mm Verde | 25 |
Joystick COMP-BJT-05 | 1 |
Afișaj LED dual DC03-11GWA | 3 |
Tranzistor BC337-40 | 5 |
Rezistență 220R | 7 |
Rezistență 270R | 5 |
Rezistență 10K | 5 |
Placă de test 100x100mm | 1 |
Fire M-M 10p / 30cm | 2 |
Fire M-M 8p / 20cm | 2 |
Headere pini 40p | 1 |
Partea din față a placii de test cu toate componentele atașate
Partea din spate a placii. Se pot vedea legăturile fizice între componente. Firele suprapuse (din partea de stânga jos sunt legăturile între display-urile 7-segment pentru a realiza o matrice din acestea (sunt display-uri cu catod comun, iar anozii au fost lipiți pentru a forma matricea). Bila este formată din fire și mult tub termocontractibil (altfel probabil ar fi apărut cel puțin un scurtcircuit).
Jocul utilizează un joystick pentru input (mișcarea cursorului și selectarea unei celule). Pentru a îl utiliza ca dispozitiv de input, pinii de output analogic (deplasarea pe orizontală și deplasarea pe verticală) sunt conectați la doi pini ai port-ului A pentru a putea realiza conversia între tensiuni analogice și valori digitale. Butonul joystick-ului este conectat la un pin al port-ului C.
Ca output este utilizată matricea de LED-uri ce are rol de ecran, pe care sunt afișate valorile din matricea de joc prin aprinderea LED-urilor și 3 display-uri de câte două cifre de tipul 7-segments, pe care sunt afișate timpul în minute și secunde, și numărul de mișcări realizate de la începutul jocului.
Pentru generarea aleatoare valorilor din matricea de joc, se incrementează un counter până la apăsarea butonului de pe joystick. Valoarea astfel obținută va fi utilizată ca seed pentru numerele random.
Proiectul este complet funcțional. Există unele probleme minore cu joystick-ul, deoarece este necesar ca input-ul să fie menținut un interval de timp (aproximativ 0.2-0.3 secunde pentru a fi înregistrat).
Display-urile și matricea de LED-uri înainte de începerea jocului. Se afișază o animație simplă până la începerea jocului.
În timpul derulării jocului, pe matricea de LED-uri se va afișa matricea de joc și cursorul, iar pe display-urile 7-segments va fi afișat timpul de joc (minute și secunde) și numărul de mișcări realizate.
Implementarea părții hardware a fost mai dificilă, deoarece a fost prima experiență de acest fel; în special realizarea matricei din display-uri a fost dificilă, deoarece pinii acestora se aflau la distanțe foarte mici unii de ceilalți, iar o greșală la lipire a fost costisitoare (ca timp necesar pentru reparare).
În contrast cu partea de hardware, implementarea software s-a dovedit simplu de realizat și amuzantă, deoarece rezultatele erau ușor vizibile iar cerințele relativ simple.
Pentru compilare rulați 'make build'; comanda 'make' va compila și scrie fișierul .hex rezulat pe placa de bază (asigurați-vă ca poate fi scris atunci cand rulați comanda).