Am implementat clasicul joc Connect 4 folosit o matrice de LED-uri bicolore pe care voi afișa cât mai realist mutarea fiecărui jucător. Fiecare jucător are la dispoziție 7 butoane comune pe care le va apăsa când îi va veni rândul. Fiecare buton reprezintă coloana pe care va cădea piesa sa.
Pentru realizarea jocului am utilizat o matrice de LED-uri bicolore de dimensiune 5×7. Matricea este fixată pe o placă placă de test, împreună cu butoanele și celelalte componente necesare pentru funcționarea întregului joc. Conexiunea între matrice și celelalte componente de pe placa cât și conexiunea între placa de test și placa principală ce conține microcontroller-ul se face cu ajutorul unor fire de legătură.
Comenzile de input sunt date cu ajutorul a 7 butoane. Aceste comenzi ajung la ATmega16, sunt procesate, după care output-ul comenzii este afisat pe matricea de LED-uri.
Am reușit să evit folosirea MUX-urilor, DMUX-urile deoarece pinii rămași liberi pe microcontroller mi-au fost de ajuns pentru legarea tuturor comenzilor necesare funcționării jocului.
Placa principală (Etapa I) a fost realizată conform specificațiilor de aici http://cs.curs.pub.ro/wiki/pm/tutorial/placa
Etapa II are următoare schemă:
Placa de test conține următoarele componente:
Realizarea programului constă în următorul algoritm:
void enableColumn(int column); // activează o coloană void enableLineGreen(int line); // activează o linie de culoare VERDE void enableLineRed(int line); // activează o linie de culoare ROȘU void lightGreen(int i, int j); // aprinde un LED de pe poziția (i, j) de culoare VERDE void lightRed(int i, int j); // aprinde un LED de pe poziția (i, j) de culoare ROȘU void lightOff(); // stinge toate LED-urile aprinse int drop(int column); // pune o piesă pe coloana 'column' void checkButtons(); // verifică starea butoanelor (up / down) int checkWin(); // verifică starea board-ului void drawBoard(); // aprinde LED-urile din matrice corespunzătoare stării curente
Click aici
Partea hardware a fost puțin mai dificilă decât cea software deoarece a trebuit să mă gândesc de la început ce pini ai microcontrollerului trebuie sa îmi aleg pentru a putea așeza mai ușor componentele pe plăcuță, dar și pentru a scrie codul mai ușor.
Partea software a fost mai putin dificilă, dar am întâmpinat câteva probleme la partea de flickering pentru jucătorul câștigător
Proiectul mi s-a parut interesant, și cu ocazia lui am acumulat experiență în lipituri și legături.
Datasheet ATmega16 http://www.atmel.com/Images/doc2466.pdf
Datasheet Kingbright TBC20-11EGWA http://www.farnell.com/datasheets/9622.pdf