Buzzer class with note definitions and custom song functionality

Committer:
Elefantul_umilit
Date:
Mon Feb 20 11:20:16 2017 +0000
Revision:
0:b530d1a3290f
Buzzer class

Who changed what in which revision?

UserRevisionLine numberNew 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