0
Dependencies: Box_buzz Box_led
main.cpp@0:2898785200f6, 2022-02-24 (annotated)
- Committer:
- valentino14
- Date:
- Thu Feb 24 14:54:45 2022 +0000
- Revision:
- 0:2898785200f6
- Child:
- 1:0c88d5db040a
0;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
valentino14 | 0:2898785200f6 | 1 | #include "mbed.h" |
valentino14 | 0:2898785200f6 | 2 | #include "led.h" |
valentino14 | 0:2898785200f6 | 3 | #include "buzzer.h" |
valentino14 | 0:2898785200f6 | 4 | |
valentino14 | 0:2898785200f6 | 5 | |
valentino14 | 0:2898785200f6 | 6 | Timer debounce; //tajmer koji koristimo za debounce |
valentino14 | 0:2898785200f6 | 7 | InterruptIn button(D7); //definiranje tipke za hardverski prekid |
valentino14 | 0:2898785200f6 | 8 | LED led1(D3); //definiranje pina za crvenu ledicu |
valentino14 | 0:2898785200f6 | 9 | LED led2(D4); //definiranje pina za plavu ledicu |
valentino14 | 0:2898785200f6 | 10 | Beep buzzer(D5); //definiranje pina za zvučnik |
valentino14 | 0:2898785200f6 | 11 | DigitalOut ledica(LED2); //definiranje ledice na Nucleo pločici |
valentino14 | 0:2898785200f6 | 12 | Ticker blink; //definiranje tickera |
valentino14 | 0:2898785200f6 | 13 | int a=0; //definiranje integera u nulu |
valentino14 | 0:2898785200f6 | 14 | int b=0; |
valentino14 | 0:2898785200f6 | 15 | int x=0; |
valentino14 | 0:2898785200f6 | 16 | |
valentino14 | 0:2898785200f6 | 17 | //Frequency //Frekvencija svakog tona melodije |
valentino14 | 0:2898785200f6 | 18 | float a4=440.00;float b3=246.94;float b4b=446;float b4=493.88; |
valentino14 | 0:2898785200f6 | 19 | float c4=261.63;float c4_1=130;float c5=523.25;float c5s=554.40; |
valentino14 | 0:2898785200f6 | 20 | float d4=293.66;float d4b=277;float d5=587.33; |
valentino14 | 0:2898785200f6 | 21 | float e4=329.63;float e5=659.25; |
valentino14 | 0:2898785200f6 | 22 | float f4=349.23;float f4s=370.00;float f5=698.46; |
valentino14 | 0:2898785200f6 | 23 | float g3=196; float g4=392.00;float g4s=415.30;float g5=783.99; |
valentino14 | 0:2898785200f6 | 24 | |
valentino14 | 0:2898785200f6 | 25 | //Duration //trajanje tonova |
valentino14 | 0:2898785200f6 | 26 | float t1=16; float t2=8; float t3=4; float t4=2; float t5=6; |
valentino14 | 0:2898785200f6 | 27 | |
valentino14 | 0:2898785200f6 | 28 | |
valentino14 | 0:2898785200f6 | 29 | //"Happy Birthday song" //prva melodija |
valentino14 | 0:2898785200f6 | 30 | float happy_freq[25] = {g4,g4,a4,g4,c5,b4,g4,g4,a4,g4,d5,c5,g4,g4,g5,e5,c5,b4,a4,f5,f5,e5,c5,d5,c5}; |
valentino14 | 0:2898785200f6 | 31 | float happy_tempo[25] = {t3,t3,t3,t3,t3,t3,t3,t3,t3,t3,t3,t3,t3,t3,t3,t3,t3,t3,t2,t3,t3,t3,t3,t3,t3}; |
valentino14 | 0:2898785200f6 | 32 | |
valentino14 | 0:2898785200f6 | 33 | void song1() |
valentino14 | 0:2898785200f6 | 34 | { |
valentino14 | 0:2898785200f6 | 35 | for(a=0; a<25; a++) { //petlja za prvu melodiju |
valentino14 | 0:2898785200f6 | 36 | buzzer.beep(happy_freq[a], happy_tempo[a]); |
valentino14 | 0:2898785200f6 | 37 | led1.state(1); |
valentino14 | 0:2898785200f6 | 38 | led2.state(0); |
valentino14 | 0:2898785200f6 | 39 | wait(0.05); |
valentino14 | 0:2898785200f6 | 40 | led1.state(0); |
valentino14 | 0:2898785200f6 | 41 | led2.state(1); |
valentino14 | 0:2898785200f6 | 42 | wait(1/happy_tempo[a]); //paljenje i gašenje ledica u ritmu melodije |
valentino14 | 0:2898785200f6 | 43 | if(x==2){ //pritiskom na tipkalo petlja se prekida i pokreće druga melodija |
valentino14 | 0:2898785200f6 | 44 | break;} |
valentino14 | 0:2898785200f6 | 45 | } |
valentino14 | 0:2898785200f6 | 46 | } |
valentino14 | 0:2898785200f6 | 47 | |
valentino14 | 0:2898785200f6 | 48 | //''Scary song'' |
valentino14 | 0:2898785200f6 | 49 | float scary_freq[20]={c5s, f4s, f4s, c5s, f4s, f4s, c5s, f4s, d5, f4s, c5s, f4s, f4s, c5s, f4s, f4s, c5s, f4s, d5, f4s}; |
valentino14 | 0:2898785200f6 | 50 | float scary_tempo[20]={t5, t5, t5, t5, t5, t5, t5, t5, t5, t5, t5, t5, t5, t5, t5, t5, t5, t5, t5, t5}; |
valentino14 | 0:2898785200f6 | 51 | |
valentino14 | 0:2898785200f6 | 52 | void song2() |
valentino14 | 0:2898785200f6 | 53 | { |
valentino14 | 0:2898785200f6 | 54 | for(b=0; b<20; b++) { |
valentino14 | 0:2898785200f6 | 55 | buzzer.beep(scary_freq[b], scary_tempo[b]); |
valentino14 | 0:2898785200f6 | 56 | led2.state(1); |
valentino14 | 0:2898785200f6 | 57 | led2.state(0); |
valentino14 | 0:2898785200f6 | 58 | wait(0.05); |
valentino14 | 0:2898785200f6 | 59 | led2.state(0); |
valentino14 | 0:2898785200f6 | 60 | led2.state(1); |
valentino14 | 0:2898785200f6 | 61 | wait(1/scary_tempo[b]); |
valentino14 | 0:2898785200f6 | 62 | if (x==3){ |
valentino14 | 0:2898785200f6 | 63 | led1.state(0); |
valentino14 | 0:2898785200f6 | 64 | led2.state(0); |
valentino14 | 0:2898785200f6 | 65 | buzzer.beep(1000, 0.01); |
valentino14 | 0:2898785200f6 | 66 | break;} |
valentino14 | 0:2898785200f6 | 67 | } |
valentino14 | 0:2898785200f6 | 68 | } |
valentino14 | 0:2898785200f6 | 69 | //Funkcija za detekciju tipke |
valentino14 | 0:2898785200f6 | 70 | void pressbutton() |
valentino14 | 0:2898785200f6 | 71 | { |
valentino14 | 0:2898785200f6 | 72 | if(debounce.read_ms()>100) { //sprečavanje signala da titra |
valentino14 | 0:2898785200f6 | 73 | x++; |
valentino14 | 0:2898785200f6 | 74 | } |
valentino14 | 0:2898785200f6 | 75 | debounce.reset(); |
valentino14 | 0:2898785200f6 | 76 | } |
valentino14 | 0:2898785200f6 | 77 | |
valentino14 | 0:2898785200f6 | 78 | |
valentino14 | 0:2898785200f6 | 79 | //Funkcija za blicanje zelene tipke kada je sklop aktivan |
valentino14 | 0:2898785200f6 | 80 | void active() |
valentino14 | 0:2898785200f6 | 81 | { |
valentino14 | 0:2898785200f6 | 82 | if(x==1 or x==2) |
valentino14 | 0:2898785200f6 | 83 | { |
valentino14 | 0:2898785200f6 | 84 | ledica=!ledica; |
valentino14 | 0:2898785200f6 | 85 | } |
valentino14 | 0:2898785200f6 | 86 | else{ |
valentino14 | 0:2898785200f6 | 87 | ledica=0; |
valentino14 | 0:2898785200f6 | 88 | } |
valentino14 | 0:2898785200f6 | 89 | } |
valentino14 | 0:2898785200f6 | 90 | //Postavljanje početnog stanja sklopa |
valentino14 | 0:2898785200f6 | 91 | int main() |
valentino14 | 0:2898785200f6 | 92 | { |
valentino14 | 0:2898785200f6 | 93 | led1.state(0); |
valentino14 | 0:2898785200f6 | 94 | led2.state(0); |
valentino14 | 0:2898785200f6 | 95 | debounce.start(); |
valentino14 | 0:2898785200f6 | 96 | button.rise(&pressbutton); //button koja poziva funkciju pressbutton na rastući brid signala tipke |
valentino14 | 0:2898785200f6 | 97 | blink.attach(&active,0.5); // blink ticker koji poziva funkciju active u intervalu 0.5 |
valentino14 | 0:2898785200f6 | 98 | //while petlja |
valentino14 | 0:2898785200f6 | 99 | while (true) { |
valentino14 | 0:2898785200f6 | 100 | if(x==1){ |
valentino14 | 0:2898785200f6 | 101 | song1(); |
valentino14 | 0:2898785200f6 | 102 | } |
valentino14 | 0:2898785200f6 | 103 | else{ |
valentino14 | 0:2898785200f6 | 104 | if(x==2){ |
valentino14 | 0:2898785200f6 | 105 | song2(); |
valentino14 | 0:2898785200f6 | 106 | } |
valentino14 | 0:2898785200f6 | 107 | if(x==3) |
valentino14 | 0:2898785200f6 | 108 | { |
valentino14 | 0:2898785200f6 | 109 | x=0; |
valentino14 | 0:2898785200f6 | 110 | } |
valentino14 | 0:2898785200f6 | 111 | } |
valentino14 | 0:2898785200f6 | 112 | } |
valentino14 | 0:2898785200f6 | 113 | } |