Differences

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

Link to this comparison view

pm:prj2025:ccristi:agavrilut [2025/05/26 00:20]
agavrilut [Organizarea codului]
pm:prj2025:ccristi:agavrilut [2025/05/28 02:34] (current)
agavrilut [Aplicația MiniSynth Recorder]
Line 41: Line 41:
   * Apăsarea celor 8 butoane pentru a reda note muzicale, folosind buzzer-ul pasiv   * Apăsarea celor 8 butoane pentru a reda note muzicale, folosind buzzer-ul pasiv
   * Ajustarea frecvenței notelor prin rotirea potențiometrului   * Ajustarea frecvenței notelor prin rotirea potențiometrului
-    * În poziția minimă a potențiometrului,​ sunt redate notele din gama C4-C5, iar prin rotirea acestuia spre dreapta, frecvențele cresc gradual+    * În poziția minimă a potențiometrului,​ sunt redate notele din gama C4-C5, iar prin rotirea acestuia spre dreapta, frecvențele cresc gradual, până la C5-C6
  
 2. **//Modul record//** 2. **//Modul record//**
Line 115: Line 115:
 | HC-05 TXD        | RX0         | PD0               | Comunicare UART (USART0), HC-05->​Arduino ​            | | HC-05 TXD        | RX0         | PD0               | Comunicare UART (USART0), HC-05->​Arduino ​            |
 ==== Imagini ==== ==== Imagini ====
 +
 +{{:​pm:​prj2025:​ccristi:​whatsapp_image_2025-05-28_at_00.50.06_ffb0866b.jpg?​nolink&​600|}}
  
 Inițial am conectat pinii RX și TX de pe HC-05 la D11 și D12, în ideea de a folosi SoftwareSerial. Ulterior i-am mutat pe TX1 și RX0 și am renunțat complet la bibliotecile Arduino. Inițial am conectat pinii RX și TX de pe HC-05 la D11 și D12, în ideea de a folosi SoftwareSerial. Ulterior i-am mutat pe TX1 și RX0 și am renunțat complet la bibliotecile Arduino.
Line 138: Line 140:
 **''​main.cpp''​** **''​main.cpp''​**
  
-Fișierul principal conține funcția ''​setup()''​ și bucla ''​while(1)'',​ în care sunt apelate funcțiile de actualizare:+Fișierul principal conține funcția ''​setup()''​ și bucla ''​while(1)'',​ în care sunt apelate funcțiile de actualizare
  
   * ''​update_bt_state()'':​ verifică dacă modulul HC-05 este conectat, controlează LED-ul albastru și dezactivează modul record în caz de deconectare   * ''​update_bt_state()'':​ verifică dacă modulul HC-05 este conectat, controlează LED-ul albastru și dezactivează modul record în caz de deconectare
Line 149: Line 151:
 **''​io_utils.h''​** **''​io_utils.h''​**
  
-Funcții pentru configurarea pinilor, folosind structura ''​IOPin'',​ care conține toate registrele asociate unui pin:+Funcții pentru configurarea pinilor, folosind structura ''​IOPin'',​ care conține toate registrele asociate unui pin
  
   * ''​conf_input(IOPin)'':​ setează pinul ca intrare   * ''​conf_input(IOPin)'':​ setează pinul ca intrare
Line 160: Line 162:
 **''​buzzer.h''​** **''​buzzer.h''​**
  
-Controlul buzzer-ului prin PWM, folosind Timer1:+Controlul buzzer-ului prin PWM, folosind Timer1
  
   * ''​buzzer_init()'':​ configurează Timer1 în modul Fast PWM, cu top în ICR1 și ieșire pe pinul OC1B (PB2)   * ''​buzzer_init()'':​ configurează Timer1 în modul Fast PWM, cu top în ICR1 și ieșire pe pinul OC1B (PB2)
Line 169: Line 171:
 **''​adc_pot.h''​** **''​adc_pot.h''​**
  
-Citirea valorii de la potențiometru prin ADC0:+Citirea valorii de la potențiometru prin ADC0
  
   * ''​adc_init()'':​ inițializează perifericul ADC   * ''​adc_init()'':​ inițializează perifericul ADC
Line 177: Line 179:
 **''​timer.h''​** **''​timer.h''​**
  
-Folosește Timer0 pentru funcții asemănătoare cu Arduino:+Folosește Timer0 pentru funcții asemănătoare cu Arduino
  
   * ''​timer0_init()'':​ configurează Timer0 în mod CTC, cu întrerupere pe compare match A   * ''​timer0_init()'':​ configurează Timer0 în mod CTC, cu întrerupere pe compare match A
Line 186: Line 188:
 **''​usart.h''​** **''​usart.h''​**
  
-Comunicare serială cu modulul HC-05:+Comunicare serială cu modulul HC-05
  
   * ''​usart0_init(ubrr)'':​ inițializează USART0 cu baud 9600, format 8N1   * ''​usart0_init(ubrr)'':​ inițializează USART0 cu baud 9600, format 8N1
Line 285: Line 287:
  
 Permite conectarea la dispozitiv prin port serial și înregistrarea notelor transmise în timp real. Permite conectarea la dispozitiv prin port serial și înregistrarea notelor transmise în timp real.
 +
 +{{:​pm:​prj2025:​ccristi:​screenshot_2025-05-28_005653.png?​nolink&​500|}}
  
   * **Port name** – câmp text pentru introducerea portului serial (ex: ''​COM11'',​ ''/​dev/​ttyUSB0''​)   * **Port name** – câmp text pentru introducerea portului serial (ex: ''​COM11'',​ ''/​dev/​ttyUSB0''​)
Line 292: Line 296:
   * **Start Recording/​Stop Recording** – pornește sau oprește înregistrarea   * **Start Recording/​Stop Recording** – pornește sau oprește înregistrarea
     * Înregistrarea se oprește automat și la primirea mesajului ''​RECORD_OFF''​ de la dispozitiv     * Înregistrarea se oprește automat și la primirea mesajului ''​RECORD_OFF''​ de la dispozitiv
-    * După oprirea înregistrării,​ aplicația procesează datele și le salvează într-un fișier ''​.mid''​+    * După oprirea înregistrării,​ aplicația procesează datele și le salvează într-un fișier ''​.mid'',​ în folderul ''​recordings''​
  
 **2. View Recordings** **2. View Recordings**
  
 Afișează toate melodiile înregistrate și permite redarea sau ștergerea acestora. Afișează toate melodiile înregistrate și permite redarea sau ștergerea acestora.
 +
 +{{:​pm:​prj2025:​ccristi:​screenshot_2025-05-28_005720.png?​nolink&​500|}}
  
   * **Listă de înregistrări** – scrollable, afișează toate fișierele MIDI salvate   * **Listă de înregistrări** – scrollable, afișează toate fișierele MIDI salvate
Line 303: Line 309:
   * **Play/​Stop** – redă melodia selectată sau oprește redarea   * **Play/​Stop** – redă melodia selectată sau oprește redarea
   * **Delete** – șterge fișierul selectat   * **Delete** – șterge fișierul selectat
 +
 +
 +==== Testare ====
 +
 +Am testat funcționalitățile incremental,​ pe măsură ce le-am implementat,​ prin observarea comportamentului așteptat sau prin afișarea valorilor prin serial monitor, unde era necesar.
 +  * Apăsare butoane - afișarea frecvenței corespunzătoare
 +  * Debounce - se afișează un singur mesaj la fiecare apăsare
 +  * Buzzer - redarea corectă a frecvențelor
 +  * Pitch shift - afișarea valorii citite de la potențiometru,​ apoi afișarea frecvențelor ajustate și redarea acestora
 +    * am verificat că frecvențele calculate corespund cu tabelul de frecvențe ale notelor (de exemplu, la poziția maximă, am verificat că frecvențele corespund gamei C5-C6)
 +  * Activare/​dezactivare mod record - testat vizual (LED) și prin verificarea mesajelor trimise
 +  * Comunicația Bluetooth - testată inițial cu un script care doar citește și afișează mesajele în terminal, ulterior cu aplicația implementată
 +    * am testat apoi cazurile speciale: se încearcă înregistrarea fără conexiune, se întrerupe conexiunea în timpul înregistrării
 +  * Aplicația Python - am implementat și testat pe rând conectarea, citirea mesajelor (prin afișare în terminal), crearea fișierelor MIDI (testate prin redare cu un player și prin analiza notelor într-un software dedicat), redarea înregistrărilor
 +    * am testat cazurile speciale, ex: note fără ​ ''​note_off'',​ actualizarea interfeței la oprirea înregistrării de către dispozitiv (prin ''​RECORD_OFF''​) etc.
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
-<note tip> +[[https://​youtu.be/qJW-3LLUZFE|Demo]]:​
-Care au fost rezultatele obţinute în urma realizării proiectului vostru. +
-</note>+
  
 +<​HTML><​iframe width="​560"​ height="​315"​ src="//​www.youtube.com/​embed/​qJW-3LLUZFE"​ frameborder="​0"​ allowfullscreen></​iframe></​HTML>​
 +
 +{{:​pm:​prj2025:​ccristi:​whatsapp_image_2025-05-28_at_00.50.06_043a05d0.jpg?​nolink&​500|}}
 +
 +{{:​pm:​prj2025:​ccristi:​whatsapp_image_2025-05-28_at_00.50.06_72c42e1a.jpg?​nolink&​500|}}
 ===== Concluzii ===== ===== Concluzii =====
 +
 +Proiectul m-a ajutat să înțeleg mai bine conceptele studiate în cadrul laboratoarelor,​ prin aplicarea practică a noțiunilor de GPIO, UART, PWM, ADC și timere.
 +
 +În plus, proiectul mi-a oferit ocazia să învăț noțiuni noi despre formatul MIDI și modul în care se procesează digital muzica, de la conversia frecvențelor în note până la generarea și redarea fișierelor MIDI.
 +
 +
  
 ===== Download ===== ===== Download =====
pm/prj2025/ccristi/agavrilut.1748208055.txt.gz · Last modified: 2025/05/26 00:20 by agavrilut
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