Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2024:ccontasel:emilia_iliana.dobre [2024/05/25 23:54]
emilia_iliana.dobre [Descriere generală]
pm:prj2024:ccontasel:emilia_iliana.dobre [2024/05/26 00:48] (current)
emilia_iliana.dobre [Bibliografie/Resurse]
Line 72: Line 72:
    
    
-** **Mediu de dezvoltare**: ​**+**Mediu de dezvoltare**: ​
   * **Arduino IDE** care oferă o platformă accesibilă și ușor de utilizat, cu suport pentru compilarea și încărcarea codului direct pe placa Arduino.   * **Arduino IDE** care oferă o platformă accesibilă și ușor de utilizat, cu suport pentru compilarea și încărcarea codului direct pe placa Arduino.
   ​   ​
   ​   ​
-** **Biblioteci Utilizate** **+**Biblioteci Utilizate** ​
   * **LedControl**:​ Aceasta bibliotecă este esențială pentru controlul modulului MAX7219 Dot Matrix. Permite manipularea ușoară a LED-urilor pe matrice, inclusiv aprinderea și stingerea acestora, ceea ce este crucial pentru vizualizarea șarpelui și a mâncării în joc.   * **LedControl**:​ Aceasta bibliotecă este esențială pentru controlul modulului MAX7219 Dot Matrix. Permite manipularea ușoară a LED-urilor pe matrice, inclusiv aprinderea și stingerea acestora, ceea ce este crucial pentru vizualizarea șarpelui și a mâncării în joc.
 +  * **Standard Arduino Libraries**:​ Bibliotecile standard ale Arduino (analogRead,​ pinMode, digitalWrite,​ analogWrite,​ etc.) sunt utilizate pentru a interacționa cu joystick-ul și LED-ul RGB.
  
-** **Descrierea Codului Aplicației (Firmware)** ** +**Elementul ​de noutate al proiectului**
-  * **Inițializarea Sistemului**:​ Configurarea pinilor folosiți, inițializarea matricei ​de LED-uri și stabilirea stării inițiale a jocului. +
-  ​* **Logica Jocului**: Implementarea mecanicii de bază a jocului Snake. Aceasta include mișcarea șarpelui, consumul mâncării, creșterea în lungime, și gestionarea coliziunilor cu marginile matricei sau cu corpul șarpelui. +
-  * **Controlul Utilizatorului**:​ Citirea inputurilor de la joystick pentru a determina direcția de mișcare a șarpelui. +
-  * **Afisarea Stării Jocului**: Actualizarea continuă a matricei de LED-uri pentru a reflecta poziția șarpelui și a mâncării pe matrice. +
-  * **Gestionarea Sfârșitului Jocului**: Detectarea condițiilor de terminare a jocului și afișarea unui mesaj sau efect corespunzător pe matricea de LED-uri.+
  
 +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:
 +  * LED-ul RGB pâlpâie verde când șarpele mănâncă un măr.
 +  * LED-ul RGB devine roșu când jocul se termină.
 +  * În timpul jocului, LED-ul RGB își schimbă culoarea în mod constant pentru a adăuga un efect vizual dinamic.
 +
 +**Funcționalități din laborator**
 +
 +  * **GPIO**: Pinii GPIO sunt utilizați pentru a citi valorile de la joystick și pentru a controla starea LED-urilor RGB.
 +  * **PWM**: Pulse Width Modulation este utilizat pentru a controla intensitatea diferitelor culori ale LED-ului RGB.
 +  * **ADC**: Conversia Analog-Digitală este utilizată pentru a citi poziția joystick-ului.
 +  * **SPI**: Interfața SPI este utilizată pentru a comunica cu matricea LED MAX72XX, permițând actualizarea rapidă a ecranului.
 +
 +**Explicația scheletului proiectului**
 +  * Setup: Funcția setup() inițializează comunicarea cu matricea LED, configurează pinii pentru joystick și LED-ul RGB, și setează seed-ul pentru generatorul de numere aleatoare.
 +  * Loop: Funcția loop() gestionează citirea intrărilor de la joystick, actualizarea poziției șarpelui, schimbarea culorilor LED-ului RGB și redarea graficii pe matricea LED.
 +  * Update: Funcția Update() calculează noua poziție a capului șarpelui, verifică coliziunile și consumul mărului, și actualizează starea șarpelui.
 +  * Render: Funcția Render() afișează starea curentă a jocului pe matricea LED.
 +  * changeColor:​ Funcția changeColor() schimbă culoarea LED-ului RGB în mod constant în timpul jocului.
 +  * eatAppleEffect:​ Funcția eatAppleEffect() face LED-ul RGB să pâlpâie verde atunci când șarpele mănâncă un măr.
 +  * gameOver: Funcția gameOver() schimbă culoarea LED-ului RGB în roșu atunci când jocul se termină.
 +
 +**Algoritmi și Structuri Propuse**
 +  * **Algoritmul de Mișcare a Șarpelui**: ​
 +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.
 +
 +  * Logica matricei LED si bit-shifting: ​
 +Matricea LED este reprezentată de un array de 8 elemente (byte pic[8]), fiecare element reprezentând o linie a matricei LED de 8x8.
 +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ă.
  
-** **Algoritmi și Structuri Propuse** ** 
-  * **Algoritmul de Mișcare a Șarpelui**:​ Un algoritm simplu de coadă care reține coordonatele segmentelor corpului șarpelui. 
   * **Generarea Aleatoare a Mâncării**:​ Un mecanism pentru plasarea aleatorie a mâncării pe matrice, asigurându-se că aceasta nu apare pe corpul șarpelui.   * **Generarea Aleatoare a Mâncării**:​ Un mecanism pentru plasarea aleatorie a mâncării pe matrice, asigurându-se că aceasta nu apare pe corpul șarpelui.
 +
 +**Calibrarea elementelor de senzoristică**
 +  * Joystick: Valorile citite de la joystick au fost calibrate pentru a determina pragurile pentru fiecare direcție. Aceste praguri au fost ajustate în cod pentru a asigura o reacție precisă la mișcările jucătorului.
 +  * LED RGB: Intensitatea fiecărei culori a fost ajustată folosind PWM pentru a obține efecte vizuale clare și distincte.
 +
 +**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.
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
    
Line 96: Line 134:
 </​note>​ </​note>​
    
 +<​html>​
 +  <​iframe ​
 +    src="​https://​youtube.com/​embed/​ot4f1-Fkhcw" ​
 +    title="​YouTube video player" ​
 +    frameborder="​0" ​
 +    allow="​accelerometer;​ autoplay; clipboard-write;​ encrypted-media;​ gyroscope; picture-in-picture;​ web-share" ​
 +    allowfullscreen
 +    style="​aspect-ratio:​ 16/9; width: 100%;"
 +  ></​iframe>​
 +</​html>​
 ===== Concluzii ===== ===== Concluzii =====
    
Line 113: Line 161:
   * 19.05.2024: Creare schema electrica   * 19.05.2024: Creare schema electrica
   * 20.05.2024: Testare conectivitate componente   * 20.05.2024: Testare conectivitate componente
 +  * 22-25.05.2024:​ Cod
 +  * 26.05.2024: Etapa software
  
 TODO: TODO:
Line 135: Line 185:
 - set up arduino: https://​www.youtube.com/​watch?​v=JnJIKX5J0Cc&​list=PLwWF-ICTWmB7-b9bsE3UcQzz-7ipI5tbR - 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
  
 </​note>​ </​note>​
    
 <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​ <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
pm/prj2024/ccontasel/emilia_iliana.dobre.1716670446.txt.gz · Last modified: 2024/05/25 23:54 by emilia_iliana.dobre
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