AUP_Lab6_Music
Dependencies: C12832 MMA7660 mbed
Fork of AUP_Lab5_MMA7660 by
Revision 3:640558c1c0d3, committed 2015-07-08
- Comitter:
- BrentLei
- Date:
- Wed Jul 08 00:09:57 2015 +0000
- Parent:
- 2:09ee85ab1717
- Commit message:
- test
Changed in this revision
SongPlayer.h | Show annotated file Show diff for this revision Revisions of this file |
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r 09ee85ab1717 -r 640558c1c0d3 SongPlayer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SongPlayer.h Wed Jul 08 00:09:57 2015 +0000 @@ -0,0 +1,41 @@ +#include "mbed.h" +// new class to play a note on Speaker based on PwmOut class +class SongPlayer +{ +public: + SongPlayer(PinName pin) : _pin(pin) { +// _pin(pin) means pass pin to the constructor + } +// class method to play a note based on PwmOut class + void PlaySong(float frequency[], float duration[], float volume=1.0) { + vol = volume; + notecount = 0; + _pin.period(1.0/frequency[notecount]); + _pin = volume/2.0; + noteduration.attach(this,&SongPlayer::nextnote, duration[notecount]); + // setup timer to interrupt for next note to play + frequencyptr = frequency; + durationptr = duration; + //returns after first note starts to play + } + void nextnote(); +private: + Timeout noteduration; + PwmOut _pin; + int notecount; + float vol; + float * frequencyptr; + float * durationptr; +}; +//Interrupt Routine to play next note +void SongPlayer::nextnote() +{ + _pin = 0.0; + notecount++; //setup next note in song + if (durationptr[notecount]!=0.0) { + _pin.period(1.0/frequencyptr[notecount]); + noteduration.attach(this,&SongPlayer::nextnote, durationptr[notecount]); + _pin = vol/2.0; + } else + _pin = 0.0; //turn off on last note +} \ No newline at end of file
diff -r 09ee85ab1717 -r 640558c1c0d3 main.cpp --- a/main.cpp Wed Jul 08 00:05:05 2015 +0000 +++ b/main.cpp Wed Jul 08 00:09:57 2015 +0000 @@ -1,17 +1,27 @@ #include "mbed.h" #include "C12832.h" +#include "MMA7660.h" -// 添加MMA7660库文件 -#include "MMA7660.h" +// 添加旋律播放相关文件 +#include "SongPlayer.h" + +// 旋律数据 +float note[18]= {1568.0,1396.9,1244.5,1244.5,1396.9,1568.0,1568.0,1568.0,1396.9, + 1244.5,1396.9,1568.0,1396.9,1244.5,1174.7,1244.5,1244.5, 0.0 + }; +float duration[18]= {0.48,0.24,0.72,0.48,0.24,0.48,0.24,0.24,0.24, + 0.24,0.24,0.24,0.24,0.48,0.24,0.48,0.48, 0.0 + }; PwmOut led(D5); DigitalIn button_up(A2); DigitalIn button_center(D4); DigitalIn button_down(A3); C12832 lcd(D11, D13, D12, D7, D10); +MMA7660 MMA(D14, D15); -// 初始化MMA7660 -MMA7660 MMA(D14, D15); +// 初始化D6引脚作为PWM用于驱动扬声器 +SongPlayer mySpeaker(D6); double brightness = 1.0; double brightness_inc = 0.1; @@ -21,7 +31,10 @@ int bt_flag = 0; lcd.cls(); led.write(brightness); - + + // 播放旋律 + mySpeaker.PlaySong(note,duration,0.05); + while (1) { bt_flag = 1; if(button_up==1) @@ -40,8 +53,6 @@ } lcd.locate(0, 0); lcd.printf("Brightness = %.1f\r\n", 1.0 - brightness); - - // 显示加速度计的测量结果 lcd.printf("x=%.2f y=%.2f z=%.2f", MMA.x(), MMA.y(), MMA.z()); wait(0.2); }