This shows you the differences between two versions of the page.
pm:prj2022:arosca:cutie-muzicala [2022/05/27 18:42] idumitrescu [Bibliografie/Resurse] |
pm:prj2022:arosca:cutie-muzicala [2022/05/27 22:19] (current) idumitrescu [Rezultate Obţinute] |
||
---|---|---|---|
Line 36: | Line 36: | ||
===Librarii si surse 3rd party=== | ===Librarii si surse 3rd party=== | ||
- | * Keypad.h => | + | * Keypad.h => Biblioteca ce cuprinde declaratia keypad-ului si functia de mapare a acestuia |
- | * Servo.h => | + | * Servo.h => Biblioteca ce cuprinde declaratia servomotorului si a functiei de write pe acesta |
===Surse si functii implementate=== | ===Surse si functii implementate=== | ||
- | * In fisierul "notes.h" | + | * In fisierul "notes.h" - am definit toate notele muzicale, precum si 16 melodii si durata acestora pentru a putea fi redate cu ajutorul |
- | * play_piece() - | + | functiei de redare. |
- | * change_song() - | + | * play_piece() - In aceasta functie, se parcurge vectorul de note muzicale aferent melodiei si este redata fiecare dintre acestea cu durata corespunzatoare din vectorul de durate. Inainte de fiecare redare, se verifica daca nu cumva valoarea senzorului s-a schimbat (daca da, intreg sistemul se intrerupe) sau daca s-a apasat vreun buton ce implica schmbarea melodiei. Tot aici,pe fiecare nota, servomotorul isi schimba pozitia cate putin, acesta realizand treptat o miscare 0-180 grade si inapoi. |
- | * setup() - | + | <code> |
- | * loop() - | + | void play_piece(int pin, int *melody, int *duration, int length) { |
+ | for (int i = 0; i < length; ++i) { | ||
+ | int Sensordata = digitalRead(LDRSENSOR_PIN); | ||
+ | if(Sensordata == 1) { | ||
+ | break; | ||
+ | } | ||
+ | char key; | ||
+ | while(key = kpd.getKey()) { | ||
+ | change_song(key); | ||
+ | } | ||
+ | |||
+ | Servo1.write(posServo); | ||
+ | if(posServo == 180) { | ||
+ | direction = -1; | ||
+ | } else if(posServo == 0) { | ||
+ | direction = 1; | ||
+ | } | ||
+ | |||
+ | if(direction == 1) { | ||
+ | posServo+=10; | ||
+ | } else { | ||
+ | posServo-=10; | ||
+ | } | ||
+ | tone(pin, melody[i], duration[i]); | ||
+ | delay(duration[i]); | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | * change_song() - reda o alta melodie in functie de butonul apasat dintre cele 16 | ||
+ | * setup() - setez pinii folositi ca fiind de input/output | ||
+ | * loop() - citesc valorea de la senzorul de lumina si, daca arata ca este capacul inchis (intensitatea luminii este scazuta), atunci intregul sistem se opreste. Daca nu, atunci apeleaza functia care reda melodia si actioneaza servomotorul. | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
+ | ===Demo=== | ||
+ | https://youtu.be/iaVMPVLegz0 | ||
===Galerie foto=== | ===Galerie foto=== | ||
- | + | {{ :pm:prj2022:arosca:cutiemuzicala4.jpeg?800 |}} | |
- | ===Demo=== | + | {{ :pm:prj2022:arosca:cutiemuzicala1.jpeg?800 |}} |
+ | {{ :pm:prj2022:arosca:cutiemuzicala2.jpeg?800 |}} | ||
+ | {{ :pm:prj2022:arosca:cutiemuzicala3.jpeg?800 |}} | ||
===== Concluzii ===== | ===== Concluzii ===== |