Tetris Matrix

Introducere

Scopul acestui proiect este de a reda jocul clasic Tetris prin intermediul unei matrici de LED-uri NeoPixel folosind biblioteca cunoscută Fastled. Pe lângă LED-uri, proiectul va încorpora și diferite componente periferice menite să îmbunătățească experiența de joc, cum ar fi: buzzer audio, ecran LCD, butoane.

Descriere generală

Matricea de LED-uri va funcționa ca un ecran low-pixel pentru jocul nostru, fiecare LED putând fi controlat individual la orice moment de timp. Interacțiunea I/O cu jocul se va desfășura exclusiv prin intermediul mai multor butoane prin care jucătorul poate să pornească jocul, să rotească Tetrominoes-urile pe ecran, să restarteze jocul sau să închidă sesiunea. Prin intermediul unui ecran LCD, jucatorul va putea naviga prin meniu sau va putea vizualiza scorul în timp real. Unul sau mai multe buzzere audio vor cânta în permanență sountrack-ul Tetris

Hardware Design

Lista de componente

  • Arduino Uno
  • BreadBoard
  • 80~ LED-uri WS2812B RGB
  • Pushbuttons
  • Rezistențe
  • Fire
  • Stație de cositorit
  • Buzzer audio
  • Materiale auxiliare pentru realizarea matricii (carton, sticlă acrilică etc.)

Schema bloc

Schema electrica

LED-urile se folosesc de 3 canale: VCC (5V), GND și un canal de Data (D0). Pentru coordonarea LED-urilor, mă folosesc de pinul D7, având legată o rezistență de 330 ohmi. Pentru a adresa secvențial LED-urilor, acestea sunt legate în serie. Între VCC și GND am legat un condensator de 1000uF. Speaker-ul este legat la D13 și la GND. Pentru a controla mișcările obiectelor, am conectat 3 butoane: butonul de LEFT-DOWN conectat la D2, butonul de DOWN conectat la D8 și butonul de RIGHT-DOWN conectat la D12. Butoanele sunt legate fiecare la o rezistență de 330 ohmi fiecare.

Software Design

Descrierea codului aplicației:

Codul se folosește de biblioteca FastLED.h pentru a comunica cu matricea de leduri. Pentru a spațializa funcțiile jocului, am realizat mai multe fișiere de tip header pe care le-am reunit în fișierul tetris-fastled.ino :

  • Tetris.h - conține toate funcțiile logice ale jocului
  • Paint.h - conține toate funcțiile care se ocupă cu colorarea LED-urilor
  • Music.h - conține toate funcțiile și notele muzicale pentru coloana sonoră
  • Constants.h - conține toate constantele jocului (ex. înălțimea și lungimea matricii de joc)

Jocul începe inițial cu o tablă liberă. Programul alege la întamplare o culoare și un tetromino pe care îl instanțiaza pe tablă. În prezent, tetrominourile nu pot fi rotite, ci doar deplasate pe tablă. Prin butoanele fizice, jucătorul poate să miște tetrominoul în jos, dreapta-jos sau stânga-jos. Programul se asigură printr-un sistem de coliziuni ca obiectele să nu iasă din scenă sau să se suprapună. Odată ce un tetromino nu mai poate să se deplaseze în jos, se valideaza acest lucru și un nou obiect este instanțiat în scenă. De fiecare dată când un tetromino se oprește, programul se asigură dacă există linii complete, iar în acel caz, le șterge pentru a face loc în scenă. Programul se folosește de o matrice de tip char pentru a coordona jocul, iar la finalul fiecărui frame, matricea este proiectată pe ecranul de LED-uri.

Link cod: https://github.com/AndreiPopa21/tetris-matrix

Rezultate și concluzii

Link demo: demo

tetris-matrix-1.jpeg tetris-matrix-2.jpeg

În realizarea acestui proiect, principala provocarea a fost sudarea firelor în realizarea matricii de LED-uri. Fără o experiență anterioara, m-am confruntat adeseori cu multe lipituri “reci” sau cu componente arse, lucru care a îngreunat mult procesul de dezvoltare. Vizibil în poză este că nu toate liniile de LED-uri participă, multe dintre acestea fiind afectate în procesul de sudare. Ca software, jocul nu este implementat 100%, dar prezintă principalele caracteristici și mecanici ale jocului original. Deși sunt 6 linii de LED-uri active, acestea pot fi oricând extinse ca număr, iar software-ul prezintă această flexibilitate.

Resurse: stefan_andrei_popa_333cc_resurse.zip

Bibliografie

pm/prj2021/avaduva/tetrismatrix.txt · Last modified: 2021/06/01 02:29 by stefan_andrei.popa
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0