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 15:05]
indra.catana
pm:prj2023:danield:mini-tutorial-pentru-pian [2023/05/29 14:09] (current)
indra.catana [Download]
Line 49: Line 49:
  
   * Mediu de dezvoltare : Arduino IDE   * Mediu de dezvoltare : Arduino IDE
-  * Librarii importate : LiquidCrystal_I2C.h pentru comunicarea cu ecranul LCD, Adafruit_NeoPixel.h pentru adresarea bandei led+  * Librarii importate : LiquidCrystal_I2C.h pentru comunicarea cu ecranul LCD, Adafruit_NeoPixel.h pentru adresarea bandei led, Arduino Tone Library pentru redarea notelor muzicale 
 + 
 +==== Detalii de implementare ==== 
 + 
 +In **setup()** am configurat pinii de input (butoanele corespunzatoare notelor muzicale si butonul corespunzator nivelului) si pinul de output (buzzer-ul),​ LCD-ul si banda led.  
 + 
 +Am implementat functii separate pentru a //​modulariza//​ codul, intrucat rationamentul folosit este identic in cele 5 nivele. 
 +Functiile** playTone()** si **playNote()** sunt responsabile pentru redarea unui ton pe buzzer, respectiv a unei note muzicale.  
 +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 75: 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.1684757155.txt.gz · Last modified: 2023/05/22 15:05 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