Differences

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

Link to this comparison view

pm:prj2025:vstoica:stefania.manea [2025/05/21 19:41]
stefania.manea
pm:prj2025:vstoica:stefania.manea [2025/05/22 12:14] (current)
stefania.manea
Line 63: Line 63:
   ​   ​
 ===Software Design=== ===Software Design===
 +
 +==Flow-ul programului==
 +
 +Programul funcționează pe o mașină de stări (`State currentState = BEGIN/​RECORD`),​ în care logica principală este împărțită în două stări esențiale: **BEGIN** și **RECORD**.
 +
 +  * Starea **BEGIN** – Așteptare
 +
 +Această stare este activă imediat după pornirea sistemului. În acest moment, dispozitivul se află în repaus și așteaptă interacțiunea utilizatorului. LED-ul roșu este aprins pentru a semnala starea pasivă, iar LED-ul verde este stins. Speaker-ul este dezactivat. Pe ecranul OLED este afișat un mesaj care îi spune utilizatorului cum să înceapă înregistrarea:​ //Apasă B1 pentru înregistrare//​.
 +
 +La apăsarea butonului 1, sistemul inițiază tranziția către starea de înregistrare (RECORD). În acest moment sunt resetate variabilele relevante: //​beatCount//​ este setat la 0, iar //​beatDetected//​ este resetat pentru a permite o detecție corectă a următoarelor bătăi. Se pornește cronometrul intern (recordStartTime = time_millies()),​ iar ecranul este curățat pentru a începe afișarea semnalului cardiac.
 +
 +  * Starea **RECORD** – Înregistrare activă ​
 +
 +În această stare, dispozitivul începe efectiv procesul de monitorizare a bătăilor inimii. LED-ul verde este stins, în timp ce LED-ul roșu clipește la fiecare 500ms, indicând activitatea înregistrării.
 +
 +În bucla principală a acestei stări, sistemul citește valoarea analogică de la microfonul conectat pe pinul ADC0. Această valoare este convertită într-o poziție verticală y, utilizată pentru desenarea unui grafic asemănător unei electrocardiograme. Dacă valoarea semnalului depășește pragul //​PEAK_THRESHOLD//,​ sistemul consideră că a fost detectată o bătaie a inimii și incrementează //​beatCount//,​ cu condiția să nu fi fost deja detectată o bătaie în momentul anterior (evitând astfel detecțiile duble).
 +
 +Semnalul este desenat în timp real pe display, iar coloanele sunt curățate și desenate continuu.
 +
 +Înregistrarea poate fi oprită prin apăsarea butonului 2. În acest caz, dispozitivul revine în starea **BEGIN**. Speaker-ul este dezactivat, iar sistemul calculează automat durata înregistrării și valoarea ritmului cardiac exprimată în BPM, folosind formulele:
 +
 +  * duration = (time_millies() - recordStartTime) / 1000
 +
 +  * BPM = (beatCount * 60) / duration
 +
 +Datele obținute sunt transmise funcției result_screen(bpm,​ duration, beatCount), care se ocupă de afișarea rezultatelor și animația cu inima care pulsează.
  
 ==Structura și rolul fiecărui fișier== ==Structura și rolul fiecărui fișier==
  
-==main.cpp== + 
-Acesta este punctul de intrare al programului. Are rolul de a inițializa hardware-ul și de a coordona logica ​aplicației ​bazată pe stări.+Proiectul este structurat în mai multe fișiere sursă, fiecare având un rol specific în funcționarea generală a sistemului. În continuare voi descrie în detaliu fiecare fișier: 
 + 
 +==main.cpp ​- Fluxul programului și logica de bază== 
 +Acesta este punctul de intrare al programului. Are rolul de a inițializa hardware-ul și de a coordona logica ​programului ​bazată pe stări.
  
 Apelează funcțiile de inițializare:​ Apelează funcțiile de inițializare:​
Line 78: Line 107:
   * **RECORD**: Citește semnalul de la microfon, detectează bătăi, desenează semnalul pe ecran și calculează BPM la oprirea înregistrării (prin butonul 2).   * **RECORD**: Citește semnalul de la microfon, detectează bătăi, desenează semnalul pe ecran și calculează BPM la oprirea înregistrării (prin butonul 2).
 Integrează controlul LED-urilor și speaker-ului în funcție de starea aplicației. Integrează controlul LED-urilor și speaker-ului în funcție de starea aplicației.
-Găzduiește logica de afișare dinamică (semnalul ​de pulsși contabilizează ​numărul de bătăi.+Gestionează afișarea semnalului ​de puls și menține ​numărul de bătăi.
  
 == init.hpp – Inițializarea componentelor hardware == == init.hpp – Inițializarea componentelor hardware ==
Line 163: Line 192:
  
 Acestea sunt desenate alternativ pe ecran în //​result_screen()//​ pentru a simula o inimă care pulsează. Acestea sunt desenate alternativ pe ecran în //​result_screen()//​ pentru a simula o inimă care pulsează.
 +
 +===Rezultate obținute===
 +
 +[[https://​www.youtube.com/​watch?​v=QOGykQ_T8kw|Demo proiect]]
 +
 +
 +Rezultatele obținute în urma testării arată că proiectul simulează detectarea bătăilor inimii și le contorizează în timp real. Informațiile afișate pe ecranul OLED, mai exact BPM-ul, durata înregistrării și numărul de bătăi, sunt clare și ușor de înțeles, iar animația inimii contribuie la o experiență interactivă și intuitivă pentru utilizator. ​
 +Aceste elemente fac ca proiectul să fie nu doar funcțional,​ ci și accesibil și prietenos pentru utilizatori.
 +
 +{{ :​pm:​prj2025:​vstoica:​poza1.jpg?​300|}}
 +{{ :​pm:​prj2025:​vstoica:​poza2.jpg?​300|}}
 +{{ :​pm:​prj2025:​vstoica:​poza3.jpg?​300|}}
 +{{ :​pm:​prj2025:​vstoica:​poza4.jpg?​300|}}
 +{{ :​pm:​prj2025:​vstoica:​poza5.jpg?​450 || center}}
 +
 +
 +
 +===Concluzie===
 +
 +Proiectul **Stetoscop Digital** pune în evidență un mod practic și eficient de a construi un sistem embedded care răspunde la interacțiuni reale. Utilizarea resurselor hardware precum ADC, GPIO, timer și interfața I2C pentru display-ul OLED a permis construirea unei aplicații care combină interacțiunea fizică (butoane, LED-uri, speaker) cu o interfață grafică intuitivă. Această combinație de componente oferă un rezultat vizual și funcțional.
 +
 +Codul este clar structurat, iar funcționalitatea este împărțită logic, ceea ce face ca proiectul să fie ușor de înțeles și de testat. ​
  
  
pm/prj2025/vstoica/stefania.manea.1747845710.txt.gz · Last modified: 2025/05/21 19:41 by stefania.manea
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