Dobre Emilia Iliana 333CB
Proiectul meu, Snake Game, este o reinterpretare a clasicului joc Snake, conceput să ofere divertisment și nostalgie. Jucătorul controlează un șarpe într-un mediu închis, cu scopul de a mânca bucăți de “hrană” care apar aleatoriu pe o matrice LED de 8×8. Cu fiecare bucată de hrană consumată, șarpele crește în lungime, iar jocul devine progresiv mai dificil. Obiectivul este să acumulezi cât mai multe puncte posibil, evitând coliziunea cu propriul corp al șarpelui.
Inspirat de jocurile arcade clasice, acest proiect combină nostalgia jocurilor retro cu tehnologia modernă Arduino, oferind o experiență simplă, dar captivantă, accesibilă oricărui entuziast de jocuri sau hobbyist de electronică.
Proiectul este construit pe o platformă Arduino UNO și utilizează un modul MAX7219 Dot Matrix 8×8 pentru afișarea vizuală a jocului. Controlul șarpelui se face prin intermediul unui joystick care permite mișcarea în sus, jos, stânga sau dreapta.
Șarpele în sine este reprezentat pe matricea de LED-uri ca o serie de lumini aprinse consecutive, care corespund lungimii sale. Lungimea șarpelui crește de fiecare dată când consumă o bucată de “hrană”, care este reprezentată de un LED aprins într-o locație aleatoare pe matrice. Pe măsură ce jucătorul dirijează șarpele prin intermediul joystick-ului, LED-urile care reprezintă corpul șarpelui se aprind și se sting în secvență, reconfigurându-se pentru a ilustra mișcarea acestuia pe matrice. Astfel, când șarpele se mișcă, LED-urile vechi se sting și cele noi se aprind în direcția mișcării. De asemenea, pentru acest proiect exista un LED RGB care va indica starea jocului (verde când mănâncă, roșu când se termină jocul, și alte culori pe parcursul mișcării).
Componente folosite și rolul lor în proiect:
Pini folosiți/motivul utilizării acestora:
Arduino Uno are:
Matricea LED:
VCC ( Voltage Common Collector) - conectat la pinul de 5V al Arduino asigura alimentarea necesară funcționării matricei de LED-uri. GND ( Ground) - punctul de referință de tensiune zero în circuit, astfel GND al matricei LED MAX72XX este conectat la pinul GND al Arduino DIN (Data In) - conectat la pinul digital 12 de pe Arduino: folosit pentru a trimite date către matrice. CS (Chip Select) - conectat la pinul digital 11 de pe Arduino: folosit pentru a selecta matricea activă. CLK (Clock) - conectat la pinul digital 10 de pe Arduino: folosit pentru a trimite semnale de sincronizare către matrice.
Joystick analogic: Un joystick analogic are două potențiometre încorporate, unul pentru axa X și unul pentru axa Y. Fiecare potențiometru trimite o valoare de tensiune care variază în funcție de poziția joystick-ului. Această valoare de tensiune este citită de pinii analogici de pe Arduino.
VCC - conectat la pinul 5V al Arduino, alimentare joystick GND - conectat la pinul GND al Arduino. VRx - conectat la pinul analogic A3 al Arduino pentru a permite Arduino să citească valoarea analogică corespunzătoare poziției pe axa X. VRY - conectat la pinul analogic A4 al Arduino pentru a permite Arduino să citească valoarea analogică corespunzătoare poziției pe axa Y.
LED RGB:
Catod comun: conectat la pinul GND al Arduino pentru a oferi o referință de tensiune zero comună pentru toate cele trei LED-uri interne. Roșu: pin 7 Verde: pin 6 Albastru: pin 5 Rezistențe de 220Ω: rotejează LED-ul de curentul excesiv Pinii digitali 5,6,7 controlează intensitatea lumininilor folosind semnale PWM de la Arduino.
Schema hardware:
Schema electrica:
Testare functionalitate:
Mediu de dezvoltare:
Biblioteci Utilizate
Elementul de noutate al proiectului
Elementul de noutate al proiectului constă în integrarea efectelor vizuale cu LED-uri RGB, care oferă feedback vizual în funcție de acțiunile jucătorului. De exemplu:
Funcționalități din laborator
Explicația scheletului proiectului
Algoritmi și Structuri Propuse
Calculez noua poziție a capului șarpelui (newHead) pe baza direcției curente. Implementez logica de “wrap around” pentru a face șarpele să apară pe partea opusă a matricei LED dacă depășește marginile. Verific dacă noua poziție a capului șarpelui coincide cu oricare dintre segmentele corpului său. Dacă da, jocul se termină. Setez bit-urile corespunzătoare pentru fiecare segment al corpului șarpelui și pentru măr în array-ul pic, care reprezintă starea matricei LED.
Matricea LED este reprezentată de un array de 8 elemente (byte pic[8]), fiecare element reprezentând o linie a matricei LED de 8×8. iecare bit dintr-un byte reprezintă un LED din linia respectivă:
128 în binar este 10000000.
128 » col deplasează bit-ul 1 spre dreapta cu numărul de poziții specificat de col (de exemplu, dacă col este 3, rezultatul este 00010000).
Operatorul |= (128 » col) este utilizat pentru a seta bit-ul corespunzător în rândul specificat din matricea LED, aprinzând astfel LED-ul la poziția dorită.
Calibrarea elementelor de senzoristică
Optimizări
* Utilizarea SPI: Interfața SPI permite actualizarea rapidă a matricei LED, asigurând o afișare fluidă a graficii jocului. * Reducerea utilizării delay(): În afară de efectele de pâlpâire ale LED-ului RGB, utilizarea delay() a fost minimizată pentru a nu bloca execuția altor funcții. * Structurarea codului: Codul a fost structurat în funcții distincte pentru a simplifica mentenanța și extinderea acestuia.
TODO:
- circuit:
- set up arduino: https://www.youtube.com/watch?v=JnJIKX5J0Cc&list=PLwWF-ICTWmB7-b9bsE3UcQzz-7ipI5tbR
- led: lgb: https://www.instructables.com/RGB-LED-With-Arduino-Uno-R3/
- led control: https://www.youtube.com/watch?v=NEXjteud3is