This shows you the differences between two versions of the page.
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> |