Differences

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

Link to this comparison view

pm:prj2022:robert:jewelry_box [2022/05/16 18:07]
stefania.dina
pm:prj2022:robert:jewelry_box [2022/05/20 19:39] (current)
stefania.dina
Line 65: Line 65:
 </​note>​ </​note>​
  
-<​note>​ Parametrii de acționare +<​note>​ Parametrii de acționare  
-        if (distance<​30)+        if (distance < 30)
 </​note>​ </​note>​
  
-<​note> ​Pornire sunet +---- 
-        for (int thisNote = 0; thisNote < notes * 2; thisNote = thisNote + 2) {+Explicație a melodiei, calcului duratei plus funcțiile folosite: 
 + 
 +<​note> ​**Sizeof** oferă numărul de octeți, fiecare valoare **int** este compusă din doi octeți (16 biți). Există două valori pe notă (**înălțimea și durata**), deci pentru fiecare notă sunt patru octeți. ​ 
 +        ​int notes = sizeof(melody) / sizeof(melody[0]) / 2; 
 +</​note>​ 
 +     
 +<​note>​ Calculează durata unei **note întregi** în ms 
 +        int wholenote = ( 60000 * 4 ) / tempo; 
 +</​note>​ 
 + 
 +<​note>​ Selectare notă, prelucrare și emitere finală 
 +          // Itereazăm până la finalul notelor melodiei 
 +         // Vectorul de note conține atât notele cât și durata fiecăreia 
 +         for (int thisNote = 0; thisNote < notes * 2; thisNote = thisNote + 2) { 
 +           // Calculăm durata fiecărei note
            ​divider = pgm_read_word_near(melody+thisNote + 1);            ​divider = pgm_read_word_near(melody+thisNote + 1);
-           if (divider > 0) { .... +           if (divider > 0) { 
-        }+           // Notă obișnuită,​ merge mai departe  
 +           ​noteDuration = (wholenote) / divider; 
 +           // Dacă nota este cu durată negativă atunci se ia valoarea pozitivă însă se mărește durata cu jumătate 
 +           else if (divider < 0) { 
 +               noteDuration = (wholenote) / abs(divider);​ 
 +               ​noteDuration *= 1.5;  
 +            
 +     // Cântăm nota doar pentru 90% din durată, lăsând 10% ca pauză 
 +     ​tone(buzzer,​ pgm_read_word_near(melody+thisNote),​ noteDuration * 0.9); 
 +           
 +    // Asteptăm durata specificată înainte de a reda următoarea notă 
 +    delay(noteDuration);​ 
 +           
 +    // Oprește generarea formei de undă înainte de următoarea notă 
 +    noTone(buzzer);​
 </​note>​ </​note>​
  
 +<​note>​ Pentru a accesa mai rapid variabila stocată în SRAM dar și pentru a susține cantitatea mare de date ce conține notele muzicale nemodificate dinamic în timpul execuției am folosit funcția:
 +       ​pgm_read_word_near()
 +
 +</​note>​
 +
 +<​note>​ Am generat o undă pătrată cu frecvența de **pgm_read_word_near(melody + thisNote)** pentru pinul //buzzer// și o durată de 90%, lăsând 10% ca pauză.
 +        tone(buzzer,​ pgm_read_word_near(melody+thisNote),​ noteDuration * 0.9);
 +</​note>​
 +
 +<​note>​ Dacă nu specific durata, tonul va continua până când funcția **noTone** este apelată pe același pin //​buzzer//​. ​
 +        noTone(buzzer);​
 +</​note>​
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
 <note tip> <note tip>
-Rezultatele se pot urmării aici: +Rezultatele se pot urmării aici: [[https://​youtube.com/​shorts/​4BrKCf2BfKQ?​feature=share | YouTube]]
 </​note>​ </​note>​
  
Line 88: Line 128:
  
 <note warning> Proiectul poate fi descărcat de aici: <note warning> Proiectul poate fi descărcat de aici:
-{{:​pm:​prj2022:​robert:​dina_stefania-gabriela-proiect_pm.zip| Arhiva}}+{{:​pm:​prj2022:​robert:​dina_stefania-gabriela-proiect_pm_1.zip| Arhiva }}
 </​note>​ </​note>​
 ===== Jurnal ===== ===== Jurnal =====
pm/prj2022/robert/jewelry_box.1652713628.txt.gz · Last modified: 2022/05/16 18:07 by stefania.dina
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