LEDSnake

Introducere

  • Proiectul consta in implementarea jocului Snake folosind o mtrice de Led-uri si butoane.
  • Snake consta in manevrarea unui punct, un pătrat sau un obiect pe un plan mărginit. Pe măsură ce înaintează, lasă o urmă în spate, asemănătoare unui șarpe în mișcare.
  • Sarpele continuă să se lungească pe măsură ce se mișcă.
  • Jucătorul pierde atunci când șarpele intră în marginea ecranului, o urmă, un alt obstacol sau el însuși.

Descriere generala

  • Lungimea sarpelui este reprezentata de numarul de led-uri aprinse intr-un anumit moment de timp.
  • Miscarea sarpelui este controlata cu ajutorul butoanelor

Componente

Schema bloc

Hardware Design

Conexiuni

Putem grupa implementarea în trei tipuri de conexiuni:

  • conexiune Shift Register - Matrice de leduri
  • conexiune Shift Register - Arduino
  • conexiune Butoane - Arduino

Shift Register - Matrice

Matricea a fost realizată prin lipirea a 64 de leduri albastre pe 8 linii și 8 coloane.

  • Pentru o linie am lipit catodurile fiecărui Led corespunzător acesteia și în final cu o rezistență de 220 Ohm.
  • Pentru o coloană am lipit toate anodurile Led-urilor corespunzătoare.

La capetele liniilor/coloanelor se găsesc barete de pini pentru conectarea firelor.

Pentru a avea mai mulți pini de ieșire decât cei oferiți de plăcuță am folosit 2 Shift Register. Unul controlează coloanele, celălalt liniile.

Shift Register - Arduino

Shift Register-ele folosesc aceleași semnale pentru clock, latch și data. Astfel pinii acestor au fost conectați. Pentru conexiunea cu arduino:

  • Latch (ST_CP) - pin 11
  • Clock (SH_CP) - pin 12
  • Data (DS) - pin 9
  • Vcc - 5V
  • Gnd - GND
  • OE - GND

Butoane - Arduino

  • Buton UP - pin 2
  • Buton DOWN - pin 5
  • Buton LEFT - pin 4
  • Buton RIGHT - pin 3

Software Design

Șarpele este reprezentat prin led-urile aprinse la un anumit momemnt de timp. Se începe de la un șarpe de lungime 2 (2 led-uri aprinse). Se va mai aprinde un led (ales random care va reprezenta punctele obținute de șarpe). În momentul în care șarpele ajunge la punct, își va mări lungimea, va crește numărul de led-uri consecutive aprinse.

Implementare

Structuri de date folosite:

  • Vector care reține combinațiile pentru selectarea fiecărui rând
  • Vector care reține combinațiile pentru selectarea fiecărei coloane
  • Vector care reține starea fiecărui led (1- aprins, 2 - stins)
  • Listă simplu înlănțuita care stochează poziția fiecărui led ce alcătuiește șarpele
  • 2 pointeri care rețin capul si coada șarpelui

Controlul șarpelui se realizează prin butoane. De fiecare dată cand un buton este apăsat se tratează întreruperea setându-se noua direcție de mers. Direcția este salvată cu ajutorul unei variabile de tip char (U - UP, D - DOWN, L - LEFT, R - RIGHT). În funcție de direcția de deplasare se actualizează poziția fiecărui led, modificând coordonatele X și Y (vezi funcția moveSnake()). De fiecare dată când se deplasează șarpele, ultimul led (coada este marcat stins) iar un nou bec este marcat aprins, transformându-se în noul cap. În loop se verifică vectorul de led-uri și se aprind cele marcate cu ajutorul configurațiilor row și col, folosind funcția shiftOut(dataPin, clockPin, bitOrder, value) https://www.arduino.cc/reference/en/language/functions/advanced-io/shiftout/

Rezultate obtinute

Video

Concluzii

  • Proiectul funcționează conform așteptărilor
  • Poate fi îmbunătățit adăuănd noi feature-uri.

Download

Jurnal

  • 26.04 - alegere temă
  • 03.05 - realizare schemă electrică în tinkercad
  • 16.05 - implementare miscare șarpe
  • 24.05 - finalizare implementare joc
  • 25.05 - realizare matrice leduri
  • 26.05 - testare + debug impelentare
  • 28.05 - finalizare proiect + reparat matrice
  • 30.05 - documentatie

Bibliografie/Resurse

pm/prj2021/agrigore/ledsnake.txt · Last modified: 2021/06/22 16:54 by ioana_rusalda.savu
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