Buzzer class with note definitions and custom song functionality
Buzzer.cpp@0:b530d1a3290f, 2017-02-20 (annotated)
- Committer:
- Elefantul_umilit
- Date:
- Mon Feb 20 11:20:16 2017 +0000
- Revision:
- 0:b530d1a3290f
Buzzer class
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Elefantul_umilit | 0:b530d1a3290f | 1 | /* |
Elefantul_umilit | 0:b530d1a3290f | 2 | Mbed class for Buzzer |
Elefantul_umilit | 0:b530d1a3290f | 3 | */ |
Elefantul_umilit | 0:b530d1a3290f | 4 | #include "Buzzer.h" |
Elefantul_umilit | 0:b530d1a3290f | 5 | #include "mbed.h" |
Elefantul_umilit | 0:b530d1a3290f | 6 | #include "Tones.h" |
Elefantul_umilit | 0:b530d1a3290f | 7 | |
Elefantul_umilit | 0:b530d1a3290f | 8 | Buzzer::Buzzer(PinName inPin) : pwm(inPin) { |
Elefantul_umilit | 0:b530d1a3290f | 9 | pwm.write(0.0); |
Elefantul_umilit | 0:b530d1a3290f | 10 | } |
Elefantul_umilit | 0:b530d1a3290f | 11 | |
Elefantul_umilit | 0:b530d1a3290f | 12 | void Buzzer::stop() { |
Elefantul_umilit | 0:b530d1a3290f | 13 | pwm.write(0.0); |
Elefantul_umilit | 0:b530d1a3290f | 14 | } |
Elefantul_umilit | 0:b530d1a3290f | 15 | |
Elefantul_umilit | 0:b530d1a3290f | 16 | void Buzzer::beep(float freq, float time) { |
Elefantul_umilit | 0:b530d1a3290f | 17 | pwm.period(1.0/freq); |
Elefantul_umilit | 0:b530d1a3290f | 18 | pwm.write(0.5); // 50% duty cycle - beep on |
Elefantul_umilit | 0:b530d1a3290f | 19 | timeOff.attach(this,&Buzzer::stop, time); // time to off |
Elefantul_umilit | 0:b530d1a3290f | 20 | } |
Elefantul_umilit | 0:b530d1a3290f | 21 | |
Elefantul_umilit | 0:b530d1a3290f | 22 | void Buzzer::delayBeep(float freq, float time) { |
Elefantul_umilit | 0:b530d1a3290f | 23 | pwm.period(1.0/freq); |
Elefantul_umilit | 0:b530d1a3290f | 24 | pwm.write(0.5); |
Elefantul_umilit | 0:b530d1a3290f | 25 | wait(time); |
Elefantul_umilit | 0:b530d1a3290f | 26 | stop(); |
Elefantul_umilit | 0:b530d1a3290f | 27 | } |
Elefantul_umilit | 0:b530d1a3290f | 28 | |
Elefantul_umilit | 0:b530d1a3290f | 29 | void Buzzer::sing(Song song){ |
Elefantul_umilit | 0:b530d1a3290f | 30 | switch (song){ |
Elefantul_umilit | 0:b530d1a3290f | 31 | case POST_SOUND: |
Elefantul_umilit | 0:b530d1a3290f | 32 | beep(C6,0.2); |
Elefantul_umilit | 0:b530d1a3290f | 33 | break; |
Elefantul_umilit | 0:b530d1a3290f | 34 | case IMPERIAL_MARCH: // just random stuff at the moment |
Elefantul_umilit | 0:b530d1a3290f | 35 | delayBeep(G4, 0.5); |
Elefantul_umilit | 0:b530d1a3290f | 36 | delayBeep(P, 1); |
Elefantul_umilit | 0:b530d1a3290f | 37 | delayBeep(G5, 0.5); |
Elefantul_umilit | 0:b530d1a3290f | 38 | delayBeep(P, 1); |
Elefantul_umilit | 0:b530d1a3290f | 39 | delayBeep(G6, 0.5); |
Elefantul_umilit | 0:b530d1a3290f | 40 | break; |
Elefantul_umilit | 0:b530d1a3290f | 41 | } |
Elefantul_umilit | 0:b530d1a3290f | 42 | } |
Elefantul_umilit | 0:b530d1a3290f | 43 | void Buzzer::sing(Song song, unsigned short iterations){ |
Elefantul_umilit | 0:b530d1a3290f | 44 | for (int i = 0; i < iterations; i++){ |
Elefantul_umilit | 0:b530d1a3290f | 45 | sing(song); |
Elefantul_umilit | 0:b530d1a3290f | 46 | } |
Elefantul_umilit | 0:b530d1a3290f | 47 | } |
Elefantul_umilit | 0:b530d1a3290f | 48 |