This shows you the differences between two versions of the page.
pm:prj2024:ccontasel:emilia_iliana.dobre [2024/05/26 00:09] emilia_iliana.dobre [Software Design] |
pm:prj2024:ccontasel:emilia_iliana.dobre [2024/05/26 00:48] (current) emilia_iliana.dobre [Bibliografie/Resurse] |
||
---|---|---|---|
Line 81: | Line 81: | ||
**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 92: | Line 93: | ||
* **ADC**: Conversia Analog-Digitală este utilizată pentru a citi poziția joystick-ului. | * **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. | * **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** | **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> |