This is an old revision of the document!
Proiectul constă în implementarea unui dispozitiv ce faciliteaza invatarea si recunoasterea notelor muzicale din gama Do Major.
Se vor folosi 7 butoane, fiecare asociat cu o nota muzicala. Vor exista 5 nivele de dificultate din care utilizatorul poate alege. Dupa redarea unei secvente de note muzicale prin buzzer, utilizatorul are la dispozitie un interval prestabilit de timp pentru a reda secventa corect. Dispozitivul ofera o modalitate interactiva si distractiva de a invata notele muzicale, utilizatorul fiind indrumat de led-urile luminoase si ecranul LCD in acest proces.
Initial, utilizatorul va avea 10 secunde pentru a alege cu ce nivel de dificultate doreste sa continue.
Buzzer-ul va reda o secventa de note muzicale, iar ulterior, utilizatorul va avea la dispozitie un interval de timp masurat cu ajutorul unui timer pentru a reproduce “melodia” auzita. In cazul in care timpul expira sau un buton gresit este apasat, pe ecranul LCD se va afisa un mesaj sugestiv, led-urile vor deveni rosii, iar nivelul selectat se va relua.
Utilizatorii vor fi ghidati de catre o banda led ce va avea cate un led asociat fiecarui buton, iar acesta se va aprinde in cazul in care nota muzicala ce trebuie redata corespunde butonului respectiv. Pentru a imbunatatii procesul de recunoastere si invatare al notelor muzicale, la fiecare buton apasat, numele notei muzicale careia ii corespunde va fi afisat pe ecranul LCD.
Odata ce secventa va fi reprodusa corect, led-urile devin verzi si se ofera posibilitate trecerii la un alt nivel, in cazul in care se doreste continuarea folosirii dispozitivului.
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:
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.