This shows you the differences between two versions of the page.
pm:prj2022:cstan:800 [2022/05/30 02:04] nicu_catalin.iovita [Schema electrica] |
pm:prj2022:cstan:800 [2022/05/30 02:30] (current) nicu_catalin.iovita [Introducere] |
||
---|---|---|---|
Line 10: | Line 10: | ||
{{:pm:prj2022:cstan:screenshot_2022-05-30_at_01.41.18.png?700|}} | {{:pm:prj2022:cstan:screenshot_2022-05-30_at_01.41.18.png?700|}} | ||
+ | |||
+ | {{:pm:prj2022:cstan:mpc2.jpeg?600|}} | ||
+ | |||
+ | {{:pm:prj2022:cstan:mpc1.jpeg?600|}} | ||
+ | |||
===== Descriere generală ===== | ===== Descriere generală ===== | ||
Line 50: | Line 55: | ||
- | <note tip> | + | Ca si biblioteci, am folosit: |
- | Descrierea codului aplicaţiei (firmware): | + | * <Keypad.h> |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | * <LedControl.h> |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | * <LiquidCrystal_I2C.h> |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | |
- | * (etapa 3) surse şi funcţii implementate | + | |
- | </note> | + | == Ecran LCD == |
+ | |||
+ | Ca si implementare, pentru ecranul LCD I2C, mi-am creat funcții care vor printa pe ecran diferite mesaje. Aceste funcții (printVolume, printMelodyTitle, etc), vor apela lcd.clear(), pentru curățarea ecranului, apoi vor poziționa cursorul pe ecran și vor afișa mesajul dorit. | ||
+ | |||
+ | == Matrice leduri == | ||
+ | |||
+ | Pentru afisarea pe matricea de leduri, m-am folosit de o funcție ce parcurge fiecare led din interiorul matricei (printByte), apelând-o cu diferiți bytes. Inițial, am creat o funcție ce se va apela în modul de StandBy (mod în care utilizatorul nu dorește sa acționeze). În acest mod, matricea va cicla cu niște modele specifice, pana când utilizatorul va apasă o tasta anume. De fiecare data când utilizatorul apasă o tasta, modelul de pe matrice se va recolora. Pentru recolorarea matricilor, am folosit un software găsit online, numit Form, ce te ajuta sa creezi modele pe aceasta matrice 8x8, generand o secvența de octeti în binar sau hexazecimal. | ||
+ | |||
+ | [[https://www.youtube.com/watch?v=IwH9vzC4BKI]] | ||
+ | |||
+ | == Keypad == | ||
+ | |||
+ | Pentru tastatura cu membrana, nu a fost complicata partea de software: în funcția de loop voi prelua de fiecare data caracterul apăsat de utilizator, și voi verifica valoarea acestuia. Cum am specificat, pentru tastele de la 1 la 9, se vor emite sunete generate de către difuzoare. La apăsarea tastei D, voi emite sunetul memorat anterior pana când tasta D va fi din nou apăsată. | ||
+ | |||
+ | == Difuzoare == | ||
+ | |||
+ | Pentru difuzoare, m-am folosit de funcțiile tone() și noTone(). Ce nu am reușit prin implementarea mea a fost sa elimin partea de delay din apelul acestor funcții. Eu doream sa pot emite un sunet cu buzzerul (independent) și sa pot emite sunete diferite prin cele trei difuzoare; nu a fost posibil, deoarece sunetele se emiteau pe rând. Am încercat sa elimin o parte din delay, spre exemplu din afișarea pe matrice, creând funcția simulateDelay(), ca sa pot emite sunete în același timp și sa colorez matricea în timp real. | ||
+ | |||
+ | Pentru melodia cântată automat (Game of Thrones theme), am găsit repository-ul lăsat în documentație pe GitHub, unde notele erau generate și melodia era deja existenta (împreună cu delay-ul notelor). Inițial am pus mai multe melodii, însă am renunțat și am lăsat doar una în final, deoarece am vrut sa implementez și partea de Loop, cât și incrementul și decrementul BPM. | ||
+ | |||
+ | Partea de increment și decrement BPM se referă la simularea unui metronom; un instrument ce rulează pe fundal, de obicei niște note mai joase, pentru ca tu sa te poți sincroniza cu acesta, când dorești sa creezi diferite note (funcția freeStyle() din cod) | ||
+ | |||
+ | == Buzzer == | ||
+ | Cum spuneam, buzzerul va lua rolul de 'metronom', creând ciclicitatea la dorința userului de a reda sunete joase sau înalte, pe care iei poate exersa talentul. | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||