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