Reading txt file while playing music under RTOS
Introduction
This is a small project trying to utilize RTOS to enable reading .txt files line by line while playing music. All .txt and .wav files are stored in the micro sd card.
main.cpp
#include "mbed.h"
#include "rtos.h"
#include "uLCD_4DGL.h"
#include "SDFileSystem.h"
#include "wave_player.h"
#include <fstream>
#include <string>
#include <iostream>
Serial pc(USBTX, USBRX);
Mutex stdio_mutex;
SDFileSystem sd(p5, p6, p7, p8, "sd");
uLCD_4DGL uLCD(p9, p10, p11);
AnalogOut DACout(p18);
wave_player waver(&DACout);
std::string line ;
std::ifstream infile;
FILE *wave_file;
bool txt_finished = false;
bool wave_finished = false;
void txt_show(void const *argument) {
if ( infile ) {
while ( getline( infile , line ) ) {
stdio_mutex.lock();
uLCD.cls();
uLCD.printf("%s \n", line); //print out one line from txt file to LCD
stdio_mutex.unlock();
wait(2);
}
}
stdio_mutex.lock();
infile.close( ) ;
uLCD.printf("End of the file!\n");
stdio_mutex.unlock();
txt_finished = true;
}
void wave_file_player(void const *argument) {
waver.play(wave_file);
fclose(wave_file);
wave_finished = true;
}
int main() {
uLCD.baudrate(3000000);
stdio_mutex.lock();
infile.open( "/sd/sample.txt", std::ifstream::in) ; //open files should be mutex protected since it takes some time
wave_file=fopen("/sd/sample.wav","r");
stdio_mutex.unlock();
Thread t2(txt_show);
Thread t3(wave_file_player);
while (!wave_finished || !txt_finished){} //wait untill both of the thread finished
}
Pin connections
| mbed | uLCD | SD card | Speaker |
|---|---|---|---|
| VOUT | VCC | + | |
| GND | GND | GND | |
| VU | +5V | ||
| P5 | DI | ||
| P6 | DO | ||
| P7 | SCK | ||
| P8 | CS | ||
| P9 | RX | ||
| P10 | TX | ||
| P11 | Reset | ||
| P18 | - |
uLCD and Speaker connections
1 comment on Reading txt file while playing music under RTOS:
Please log in to post comments.

Pin connections