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/

Dependencies:   wave_player

Committer:
4180_1
Date:
Wed Oct 02 13:45:40 2019 +0000
Revision:
2:509911a88b64
Parent:
0:9ed9bcd7cc87
ver 1.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
HighTide 0:9ed9bcd7cc87 1 #include "mbed.h"
4180_1 2:509911a88b64 2 // Waveplayer Helloworld for mbed LP1768 running mbed OS 5
4180_1 2:509911a88b64 3 // NOTE: Need "target.components_add": ["SD"] in json project file!
4180_1 2:509911a88b64 4 // This adds the filesystem driver below for SD cards in an OS 5 project
4180_1 2:509911a88b64 5 // See https://os.mbed.com/users/4180_1/notebook/using-a-speaker-for-audio-output/
4180_1 2:509911a88b64 6 // for additional details
HighTide 0:9ed9bcd7cc87 7 #include "SDBlockDevice.h"
HighTide 0:9ed9bcd7cc87 8 #include "FATFileSystem.h"
HighTide 0:9ed9bcd7cc87 9 #include "wave_player.h"
HighTide 0:9ed9bcd7cc87 10
HighTide 0:9ed9bcd7cc87 11 // LED Components
HighTide 0:9ed9bcd7cc87 12 PwmOut led(LED1);
4180_1 2:509911a88b64 13 DigitalOut led4(LED4);
HighTide 0:9ed9bcd7cc87 14
HighTide 0:9ed9bcd7cc87 15 // SD File System Components
HighTide 0:9ed9bcd7cc87 16 SDBlockDevice sd(p5, p6, p7, p8);
HighTide 0:9ed9bcd7cc87 17 FATFileSystem fs("sd");
HighTide 0:9ed9bcd7cc87 18
HighTide 0:9ed9bcd7cc87 19 // Audio Components
HighTide 0:9ed9bcd7cc87 20 AnalogOut dac(p18);
HighTide 0:9ed9bcd7cc87 21 PwmOut speaker(p25);
4180_1 2:509911a88b64 22 //outputs audio to both DAC and PWM pin
4180_1 2:509911a88b64 23 //select one to drive speaker
HighTide 0:9ed9bcd7cc87 24 wave_player wav(&dac, &speaker);
HighTide 0:9ed9bcd7cc87 25
HighTide 0:9ed9bcd7cc87 26 Thread led_thread, audio_thread;
HighTide 0:9ed9bcd7cc87 27
4180_1 2:509911a88b64 28 void led_siren()
4180_1 2:509911a88b64 29 {
HighTide 0:9ed9bcd7cc87 30 const int build_time = 100;
HighTide 0:9ed9bcd7cc87 31 while (1) {
HighTide 0:9ed9bcd7cc87 32 //LED warm up effect using PWM
HighTide 0:9ed9bcd7cc87 33 for(int i=0; i<build_time; 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 at full brightness level
HighTide 0:9ed9bcd7cc87 38 led = 1.0;
HighTide 0:9ed9bcd7cc87 39 ThisThread::sleep_for(1000.0*0.25);
HighTide 0:9ed9bcd7cc87 40 //LED cool down effect using PWM
HighTide 0:9ed9bcd7cc87 41 for(int i=build_time-1; i>0; i--) {
HighTide 0:9ed9bcd7cc87 42 led = i/ (float) build_time;
HighTide 0:9ed9bcd7cc87 43 ThisThread::sleep_for(1000.0*0.02);
HighTide 0:9ed9bcd7cc87 44 }
HighTide 0:9ed9bcd7cc87 45 //LED off
HighTide 0:9ed9bcd7cc87 46 led = 0.0;
HighTide 0:9ed9bcd7cc87 47 ThisThread::sleep_for(1000.0*1.5);
HighTide 0:9ed9bcd7cc87 48 }
HighTide 0:9ed9bcd7cc87 49 }
HighTide 0:9ed9bcd7cc87 50
4180_1 2:509911a88b64 51 void play_audio()
4180_1 2:509911a88b64 52 {
HighTide 0:9ed9bcd7cc87 53 FILE * wav_file;
4180_1 2:509911a88b64 54 speaker.period(1.0/400000.0); //increase PWM clock rate for audio
4180_1 2:509911a88b64 55 sd.init();
4180_1 2:509911a88b64 56 sd.frequency(25000000); //increase SPI clock rate for audio
HighTide 0:9ed9bcd7cc87 57 while (1) {
HighTide 0:9ed9bcd7cc87 58 fs.mount(&sd);
4180_1 2:509911a88b64 59 //need sample.wav file on SD card
4180_1 2:509911a88b64 60 //wave file format mono 16Khz or less (not mp3!)
4180_1 2:509911a88b64 61 wav_file = fopen("/sd/sample.wav", "r");
HighTide 0:9ed9bcd7cc87 62 wav.play(wav_file);
HighTide 0:9ed9bcd7cc87 63 fclose(wav_file);
HighTide 0:9ed9bcd7cc87 64 fs.unmount();
4180_1 2:509911a88b64 65 wait(1);
HighTide 0:9ed9bcd7cc87 66 }
HighTide 0:9ed9bcd7cc87 67 }
HighTide 0:9ed9bcd7cc87 68
HighTide 0:9ed9bcd7cc87 69 // main() runs in its own thread in the OS
HighTide 0:9ed9bcd7cc87 70 int main()
4180_1 2:509911a88b64 71 {
HighTide 0:9ed9bcd7cc87 72 led_thread.start(led_siren);
HighTide 0:9ed9bcd7cc87 73 audio_thread.start(play_audio);
HighTide 0:9ed9bcd7cc87 74 while (true) {
HighTide 0:9ed9bcd7cc87 75 ThisThread::sleep_for(500);
4180_1 2:509911a88b64 76 led4 = !led4;
HighTide 0:9ed9bcd7cc87 77 }
HighTide 0:9ed9bcd7cc87 78 }