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/26 00:08]
emilia_iliana.dobre [Software Design]
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.   * **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.
  
-** **Elementul de noutate al proiectului** ​**+**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: 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 pâlpâie verde când șarpele mănâncă un măr.
Line 86: Line 87:
   * În timpul jocului, LED-ul RGB își schimbă culoarea în mod constant pentru a adăuga un efect vizual dinamic.   * Î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** **+**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.   * **GPIO**: Pinii GPIO sunt utilizați pentru a citi valorile de la joystick și pentru a controla starea LED-urilor RGB.
Line 93: Line 94:
   * **SPI**: Interfața SPI este utilizată pentru a comunica cu matricea LED MAX72XX, permițând actualizarea rapidă a ecranului.   * **SPI**: Interfața SPI este utilizată pentru a comunica cu matricea LED MAX72XX, permițând actualizarea rapidă a ecranului.
  
-** **Algoritmi și Structuri Propuse** **+**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**: ​   * **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. 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ă.
  
   * **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 104: 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 121: 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 143: 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.1716671305.txt.gz · Last modified: 2024/05/26 00:08 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