This is an old revision of the document!
Autor: Bucur Calin-Andrei
Grupa: 332CB
Un instrument muzical care in loc de corzi are lasere si transmite cate o nota muzicala cand un laser este intrerupt.
Dispozitivul functioneaza pe baza a 8 diode laser KY-008. Acestea sunt pornite permanent si lumineaza 8 receptori de laser ISO208 conectati la pinii digital I/O. Fiecare laser are asignata o nota muzicala. Cand unul dintre lasere este intrerupt, receptorul detecteaza aceasta schimbare, genereaza un semnal MIDI si il trimite pe interfata seriala catre laptop unde sunetul este interpretat si redat de catre un soft synth. De asemenea, pe unul dintre breadboard-uri se afla doua butoane pentru a schimba octava(mai inalta/joasa).
Am scris codul in Arduino IDE. Tot codul se afla in fisierul harp.c
Functia MIDImessage transmite cele 3 componente ale semnalului(comanda, nota si velocitatea) MIDI pe interfata seriala. Comanda este initializata global cu 144 care reprezinta comanda de noteON, iar velocitatea este initializata cu 20.
De asemenea, setez minimul si maximul range-ului MIDI si anume 21 respectiv 129 iar octava initiala este cea intre 21 si 33. Fiecare nota este calculata in functie de nota A din octava respectiva folosind array-ul global notes_offset.
In setup() setez pinii de input si initializez interfata seriala.
In loop() parcurg fiecare pin corespunzator unui receptor si calculez nota corespunzatoare “corzii” respective. Daca valoarea senzorului este HIGH, inseamna ca laserul este intrerup si trimit nota corespunzatoare folosind functia MIDImessage. Daca valoarea este LOW, trimit o nota cu velocitate 0 echivalenta cu noteOFF. De asemenea, verific daca unul din butoane este apasat si octava curenta se afla in range-ul permis, caz in care urc sau scad nota A cu 12. Folosesc un flag pentru a garanta ca se coboara/urca o singura octava per apasare de buton.