Wave file player helloworld for mbed LCP1768 running mbed OS 5. See https://os.mbed.com/users/4180_1/notebook/using-a-speaker-for-audio-output/
main.cpp@0:9ed9bcd7cc87, 2019-10-01 (annotated)
- Committer:
- HighTide
- Date:
- Tue Oct 01 00:41:43 2019 +0000
- Revision:
- 0:9ed9bcd7cc87
- Child:
- 2:509911a88b64
Initial commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
HighTide | 0:9ed9bcd7cc87 | 1 | #include "mbed.h" |
HighTide | 0:9ed9bcd7cc87 | 2 | #include "rtos.h" |
HighTide | 0:9ed9bcd7cc87 | 3 | #include "SDBlockDevice.h" |
HighTide | 0:9ed9bcd7cc87 | 4 | #include "FATFileSystem.h" |
HighTide | 0:9ed9bcd7cc87 | 5 | #include "wave_player.h" |
HighTide | 0:9ed9bcd7cc87 | 6 | |
HighTide | 0:9ed9bcd7cc87 | 7 | // LED Components |
HighTide | 0:9ed9bcd7cc87 | 8 | PwmOut led(LED1); |
HighTide | 0:9ed9bcd7cc87 | 9 | |
HighTide | 0:9ed9bcd7cc87 | 10 | // SD File System Components |
HighTide | 0:9ed9bcd7cc87 | 11 | SDBlockDevice sd(p5, p6, p7, p8); |
HighTide | 0:9ed9bcd7cc87 | 12 | FATFileSystem fs("sd"); |
HighTide | 0:9ed9bcd7cc87 | 13 | |
HighTide | 0:9ed9bcd7cc87 | 14 | // Audio Components |
HighTide | 0:9ed9bcd7cc87 | 15 | AnalogOut dac(p18); |
HighTide | 0:9ed9bcd7cc87 | 16 | PwmOut speaker(p25); |
HighTide | 0:9ed9bcd7cc87 | 17 | wave_player wav(&dac, &speaker); |
HighTide | 0:9ed9bcd7cc87 | 18 | |
HighTide | 0:9ed9bcd7cc87 | 19 | Thread led_thread, audio_thread; |
HighTide | 0:9ed9bcd7cc87 | 20 | |
HighTide | 0:9ed9bcd7cc87 | 21 | void led_siren() { |
HighTide | 0:9ed9bcd7cc87 | 22 | const int build_time = 100; |
HighTide | 0:9ed9bcd7cc87 | 23 | while (1) { |
HighTide | 0:9ed9bcd7cc87 | 24 | //LED warm up effect using PWM |
HighTide | 0:9ed9bcd7cc87 | 25 | for(int i=0; i<build_time; i++) { |
HighTide | 0:9ed9bcd7cc87 | 26 | led = i / (float) build_time; |
HighTide | 0:9ed9bcd7cc87 | 27 | ThisThread::sleep_for(1000.0*0.02); |
HighTide | 0:9ed9bcd7cc87 | 28 | } |
HighTide | 0:9ed9bcd7cc87 | 29 | //LED at full brightness level |
HighTide | 0:9ed9bcd7cc87 | 30 | led = 1.0; |
HighTide | 0:9ed9bcd7cc87 | 31 | ThisThread::sleep_for(1000.0*0.25); |
HighTide | 0:9ed9bcd7cc87 | 32 | //LED cool down effect using PWM |
HighTide | 0:9ed9bcd7cc87 | 33 | for(int i=build_time-1; i>0; i--) { |
HighTide | 0:9ed9bcd7cc87 | 34 | led = i/ (float) build_time; |
HighTide | 0:9ed9bcd7cc87 | 35 | ThisThread::sleep_for(1000.0*0.02); |
HighTide | 0:9ed9bcd7cc87 | 36 | } |
HighTide | 0:9ed9bcd7cc87 | 37 | //LED off |
HighTide | 0:9ed9bcd7cc87 | 38 | led = 0.0; |
HighTide | 0:9ed9bcd7cc87 | 39 | ThisThread::sleep_for(1000.0*1.5); |
HighTide | 0:9ed9bcd7cc87 | 40 | } |
HighTide | 0:9ed9bcd7cc87 | 41 | } |
HighTide | 0:9ed9bcd7cc87 | 42 | |
HighTide | 0:9ed9bcd7cc87 | 43 | void play_audio() { |
HighTide | 0:9ed9bcd7cc87 | 44 | FILE * wav_file; |
HighTide | 0:9ed9bcd7cc87 | 45 | speaker.period(1.0/1000000.0); |
HighTide | 0:9ed9bcd7cc87 | 46 | while (1) { |
HighTide | 0:9ed9bcd7cc87 | 47 | sd.init(); |
HighTide | 0:9ed9bcd7cc87 | 48 | fs.mount(&sd); |
HighTide | 0:9ed9bcd7cc87 | 49 | wav_file = fopen("/sd/siren.wav", "r"); |
HighTide | 0:9ed9bcd7cc87 | 50 | wav.play(wav_file); |
HighTide | 0:9ed9bcd7cc87 | 51 | fclose(wav_file); |
HighTide | 0:9ed9bcd7cc87 | 52 | sd.deinit(); |
HighTide | 0:9ed9bcd7cc87 | 53 | fs.unmount(); |
HighTide | 0:9ed9bcd7cc87 | 54 | } |
HighTide | 0:9ed9bcd7cc87 | 55 | } |
HighTide | 0:9ed9bcd7cc87 | 56 | |
HighTide | 0:9ed9bcd7cc87 | 57 | // main() runs in its own thread in the OS |
HighTide | 0:9ed9bcd7cc87 | 58 | int main() |
HighTide | 0:9ed9bcd7cc87 | 59 | { |
HighTide | 0:9ed9bcd7cc87 | 60 | led_thread.start(led_siren); |
HighTide | 0:9ed9bcd7cc87 | 61 | audio_thread.start(play_audio); |
HighTide | 0:9ed9bcd7cc87 | 62 | while (true) { |
HighTide | 0:9ed9bcd7cc87 | 63 | ThisThread::sleep_for(500); |
HighTide | 0:9ed9bcd7cc87 | 64 | } |
HighTide | 0:9ed9bcd7cc87 | 65 | } |