Differences

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

Link to this comparison view

pm:prj2023:danield:mini-tutorial-pentru-pian [2023/05/22 14:59]
indra.catana
pm:prj2023:danield:mini-tutorial-pentru-pian [2023/05/29 14:09] (current)
indra.catana [Download]
Line 40: Line 40:
  
 {{ :​pm:​prj2023:​danield:​screenshot_2023-05-22_145321.png?​700 |}} {{ :​pm:​prj2023:​danield:​screenshot_2023-05-22_145321.png?​700 |}}
 +
  
  
Line 47: Line 48:
 ===== Software Design ===== ===== Software Design =====
  
 +  * Mediu de dezvoltare : Arduino IDE
 +  * Librarii importate : LiquidCrystal_I2C.h pentru comunicarea cu ecranul LCD, Adafruit_NeoPixel.h pentru adresarea bandei led, Arduino Tone Library pentru redarea notelor muzicale
  
-<note tip> +==== Detalii de implementare ==== 
-Descrierea codului aplicaţiei ​(firmware)+ 
-  ​mediu de dezvoltare ​(if any) (e.gAVR StudioCodeVisionAVR+In **setup()** am configurat pinii de input (butoanele corespunzatoare notelor muzicale si butonul corespunzator niveluluisi pinul de output ​(buzzer-ul), LCD-ul si banda led 
-  librării şi surse 3rd-party ​(e.gProcyon AVRlib+ 
-  algoritmi şi structuri ​pe care plănuiţi să le implementaţi +Am implementat functii separate pentru a //​modulariza//​ codul, intrucat rationamentul folosit este identic in cele 5 nivele. 
-  * (etapa 3surse şi funcţii implementate +Functiile** playTone()** si **playNote()** sunt responsabile pentru redarea unui ton pe buzzerrespectiv a unei note muzicale.  
-</​note>​+Cu ajutorul functiei** playNivel()** se va reda secventa corespunzatoare nivelului selectat, aceasta primind ca input o serie de caractere care definesc notele muzicale si durata lor.  
 + 
 +Functia ​**sing()** este responsabila cu functionalitatea "​pianului",​ intrucat reda frecventa notei muzicale asociata butonului apasat cu ajutorul functiei **tone()** si afiseaza pe ecranul LCD denumirea acesteia. 
 + 
 +Functiile **succesLed(),​ failedLed()** si **clearLed()** confera un feedback vizual utilizatorului referitor la redarea secventei auzite. 
 + 
 +Functia **anotherBUtton()** primeste drept argument indicele butonului ce trebuie apasat si verifica daca un alt buton este apasat in schimb. 
 + 
 +Intrucat folosim un timer pentru a masura timpul de reproducere a melodiei, functia ​**setupTimer()** se va ocupa de configurarea **Timer1**, iar **ISR(TIMER1_COMPA_vect)** va fi rutina de intrerupere este declansata atunci cand **timer-ul** atinge valoarea specificata în **registrul OCR1A**. 
 + 
 +In functia **loop()** este implementat flow-ul programului:​ 
 +  - Mesaj de bun-venit afisat ​pe **ecranul LCD** 
 +  ​- Alegerea nivelului intr-un timp de 10 secunde ce va fi masurat folosind functia **millis()**. La fiecare apasare a butonului, nivelul va fi incrementat si utilizatorul va putea vedea cat timp mai are la dispozitie pentru alegere. 
 +  - Redarea melodiei corespunzatoare nivelului 
 +  - Indrumarea utilizatorului pentru a reproduce secventa auzita si feedback-ul in functie de corectitudinea rezultatului.
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
-<note tip> +{{ :​pm:​prj2023:​danield:​01430b05-23b6-47fa-ba11-678ef60a4054.jpeg?300 |}}
-Care au fost rezultatele obţinute în urma realizării proiectului vostru. +
-</​note>​+
  
-===== Concluzii ===== 
  
-===== Download =====+{{ :​pm:​prj2023:​danield:​7cdd7d27-03fc-45c2-95a0-b4583ddc5416.jpeg?​300 |}}
  
-<note warning> 
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului:​ surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). 
  
-Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:pm:prj20??:c?** sau **:pm:prj20??:c?:nume_student** (dacă este cazul)**Exemplu:​** Dumitru Alin, 331CC -> **:pm:prj2009:cc:dumitru_alin**+{{ :pm:prj2023:danield:​02d11e56-a886-4127-a22d-d26b7c85572d_1_.jpeg?300 |}} 
-</​note>​+ 
 + 
 +{{ :pm:prj2023:danield:797aa278-3a86-4f12-bf4b-fe95ddbfb0a8.jpeg?300 |}} 
 + 
 + 
 +{{ :pm:prj2023:danield:bb4b2d30-fcdd-471a-91a5-aa8d49440b2e.jpeg?300 |}} 
 + 
 + 
 + 
 +===== Concluzii ===== 
 + 
 +Ma bucur de alegerea facuta in legatura cu tema proiectului,​ deoarece mi-a facut placere sa il realizez, atat pe partea de hardware, cat si pe partea de software.  
 + 
 +Pentru realizarea hardware-ului am urmarit diverse tutoriale pe youtube, care mi-au fost de mare ajutor, iar pentru scrierea codului am incercat sa implementez initial pe module (functionalitatea pianului, functionalitatea ecranului LCD, redarea melodiilor, adresarea bandei led), iar apoi le-am imbinat pentru a avea functionalitatea dorita. Consider ca am creat un dispozitiv interactiv, distractiv si usor de utilizat datorita mesajelor sugestive afisate pe ecranul LCD si a feedback-urilor luminoase oferite de banda led. 
 +    
 +===== Download =====
  
 +{{:​pm:​prj2023:​danield:​mini-tutorial_pentru_pian.zip|}}
 ===== Jurnal ===== ===== Jurnal =====
  
Line 80: Line 108:
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
-<​note>​ +=== Resurse Software ​=== 
-Listă cu documente, datasheet-uri,​ resurse Internet folosite, eventual grupate pe **Resurse Software** ​şi **Resurse Hardware**. +  ​https://​gist.github.com/​baojie/​4522173 
-</note>+  ​https://​www.youtube.com/​watch?​v=CvZ-SGJ8fGo 
 +  ​https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab3-2023 
 +  ​https://​forum.arduino.cc/​t/​using-millis-for-timing-a-beginners-guide/​483573 
 +  * https://​arduinogetstarted.com/​tutorials/​arduino-neopixel-led-strip
  
-<​html><​a class="media mediafile mf_pdf"​ href="?do=export_pdf">​Export to PDF</a></html>+=== Resurse Hardware === 
 +  * https://​www.youtube.com/​watch?v=CvZ-SGJ8fGoo 
 +  * https://www.youtube.com/​watch?​v=EAeuxjtkumM
pm/prj2023/danield/mini-tutorial-pentru-pian.1684756749.txt.gz · Last modified: 2023/05/22 14:59 by indra.catana
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