Differences

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

Link to this comparison view

pm:prj2023:avaduva:live_or_die [2023/05/28 15:24]
alexandru.mazur
pm:prj2023:avaduva:live_or_die [2023/05/31 16:03] (current)
alexandru.mazur [Bibliografie]
Line 75: Line 75:
  </​html>​  </​html>​
  
-==== Test includere video (ignorati) ​==== +==== Software design ​====
-<​html>​ +
-  <iframe  +
-    src="​https://​www.youtube.com/​embed/​J0a2Prc_MQo"​  +
-    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%; display: none"​ +
-  ></​iframe>​ +
-</​html>​+
  
 +Iată principalele aspecte ale designului software și alegerile făcute:
  
-<​html>​ +**Biblioteci**:​ Scriptul utilizează biblioteca LiquidCrystal_I2C pentru gestionarea ​display-ului LCD, care este conectat folosind protocolul de comunicare I2CAceastă bibliotecă oferă o interfață simplă pentru controlul display-ului LCD, făcând mai ușor afișarea mesajelor text pe ecranAceastă alegere este avantajoasădeoarece simplifică procesul de gestionare a display-ului și reduce numărul de pini GPIO necesari.
-<img +
-    style="​display: none; width: 100%; transition: transform 0.3s ease; cursor: pointer; cursor: zoom-in;" +
-    src="​https://​ocw.cs.pub.ro/​courses/​_media/​pm/​prj2023/​avaduva/​sometimes_i_dream_about_cheese.png"​ +
-    onclick="​if (this.style.transform === '​scale(1)'​) { this.style.transform = '​scale(1.2)';​ this.style.cursor = 'zoom-out'; this.style.boxShadow = '0 0 5px rgba(00, 0, 0.5)'; } else if (this.style.transform === '​scale(1.2)'​) { this.style.transform = '​scale(1.4)';​ } else { this.style.transform = '​scale(1)';​ this.style.cursor = 'zoom-in'; this.style.boxShadow = '​none';​ }" +
-/> +
-</​html>​+
  
 +**Structuri de date**: Am definit o structură, Level, pentru a reprezenta un nivel în joc, care încapsulează notele, ordinea butoanelor și numărul lor. Această structură imi permite să reprezinț în mod convenabil diferite niveluri folosind aceeași structură de cod, crescând modularitatea și ușurând întreținerea codului.
 +
 +**Tablouri și bucle**: Am folosit tablouri pentru a stoca informații precum ordinea butoanelor, notele, textul nivelului și sugestiile pentru fiecare nivel. Această alegere de design facilitează iterarea prin aceste tablouri în timpul funcționării jocului. Acest lucru face ca codul să fie flexibil și ușor de extins pentru niveluri suplimentare.
 +
 +**Funcții**:​ Am împărțit codul în diverse funcții, fiecare cu un scop specific, îmbunătățind citibilitatea și întreținerea codului. De exemplu, funcția handleButtonActions gestionează apăsările butoanelor, iar playNote este folosită pentru a reda tonuri pe buzzer.
 +
 +**Temporizare**:​ Am utilizat în mod extensiv funcția millis() pentru gestionarea sincronizării diferitelor evenimente, cum ar fi afișarea mesajelor de timeout, controlul progresiei nivelului de joc, gestionarea sunetelor buzzer-ului și menținerea timpului de apăsare. Această abordare non-blocking permite Arduino-ului să efectueze alte sarcini în paralel, îmbunătățind astfel eficiența.
 +
 +**Integrare a senzorilor**:​ În cod, am integrat un senzor ultrasunete pentru unul dintre nivele. Această alegere arată flexibilitatea designului de a incorpora diferite tipuri de intrări. Am utilizat datele de la senzor pentru a ajusta intervalul de bipuri al buzzer-ului,​ creând o reacție audio dinamică în funcție de interacțiunea jucătorului.
 +
 +**Gestionarea apăsării butoanelor**:​ Codul gestionează inteligent evenimentele de apăsare și eliberare a butoanelor. Am inclus o logică de eliminare a zgomotelor și am utilizat modul INPUT_PULLUP pentru a asigura citiri precise ale apăsărilor butoanelor. Mai mult, codul poate gestiona apăsări simultane ale butoanelor, oferind un mecanism de interacțiune pentru utilizatorii confuzi.
 +
 +**Mecanisme de feedback**: Jocul oferă feedback prin intermediul display-ului LCD și al buzzer-ului. Această abordare multimodală îmbunătățește interacțiunea utilizatorului cu jocul. Utilizarea buzzer-ului pentru a furniza semnale audio și a display-ului pentru indicii vizuale contribuie la o experiență mai captivantă.
 +
 +**Randomness**:​ Pentru nivelul 3, este generată o frecvență aleatoare pentru a fi redată pe buzzer, demonstrând integrarea aleatorului în designul jocului.
 +
 +==== Concluzii ====
 +Daca stiam ca in Arduino nu suporta lucrul cu un numar mare de String-uri, probabil faceam alt proiect.
 +In final, a fost o experienta distractiva,​ dar putin scumpa.
 +==== Bibliografie ====
 +https://​chat.openai.com/?​model=gpt-4
 +si laboratoarele de la PM, bineinteles.
pm/prj2023/avaduva/live_or_die.1685276699.txt.gz · Last modified: 2023/05/28 15:24 by alexandru.mazur
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