Laurent Costes
/
Grove-mp3
example driver serial mp3 player
main.cpp
- Committer:
- lolocosto
- Date:
- 2017-01-12
- Revision:
- 0:6249d6685c44
File content as of revision 0:6249d6685c44:
#include <mbed.h> DigitalOut sortie1(D3); DigitalOut sortie2(D4); DigitalOut sortie3(D5); DigitalOut led(D13); DigitalIn entree1(D9); DigitalIn entree2(D10); DigitalIn entree3(D11); Serial pc(USBTX,USBRX); Serial MP3(D8,D2); bool setVolume(uint8_t volume); bool setPlayMode(uint8_t playmode); bool playSDFile(int fileIndex); void setup() { MP3.baud(9600); pc.baud(9600); setVolume(31); // 0..31 max setPlayMode(0); wait_ms(2000); } int i=0; int C1=0; int C2=0; int C3=0; int C4=0; int C5=0; int C6=0; int C7=0; int C8=0; int C9=0; int main() { while(1) { sortie1=1; if (entree1==1) {playSDFile(1);} if (entree2==1) {playSDFile(4);} if (entree3==1) {playSDFile(7);} sortie1=0; sortie2=1; if (entree1==1) {playSDFile(2);} if (entree2==1) {playSDFile(5);} if (entree3==1) {playSDFile(8);} sortie2=0; sortie3=1; if (entree1==1) {playSDFile(3);} if (entree2==1) {playSDFile(6);} if (entree3==1) {playSDFile(9);} sortie3=0; } } //Set the music index to play, the index is decided by the input sequence //of the music; //hbyte: the high byte of the index; //lbyte: the low byte of the index; bool playSDFile(int fileIndex) { uint8_t hbyte = fileIndex >> 8; uint8_t lbyte = fileIndex & 0B11111111; MP3.putc(0x7E); MP3.putc(0x04); MP3.putc(0xA0); MP3.putc(hbyte); MP3.putc(lbyte); MP3.putc(0x7E); wait_ms(10); while (MP3.readable()) { if (0xA0 == MP3.getc()) return true; else return false; } } // Pause on/off the current music bool pauseOnOff() { MP3.putc(0x7E); MP3.putc(0x02); MP3.putc(0xA3); MP3.putc(0x7E); wait_ms(10); while (MP3.readable()) { if (0xA3 == MP3.getc()) return true; else return false; } } //Set the volume, the range is 0x00 to 0x1F (0-31) bool setVolume(uint8_t volume) { MP3.putc(0x7E); MP3.putc(0x03); MP3.putc(0xA7); MP3.putc(volume); MP3.putc(0x7E); wait_ms(10); while (MP3.readable()) { if (0xA7 == MP3.getc()) return true; else return false; } } bool setPlayMode(uint8_t playmode) { //00: single , 01: single loop, 02: all loop, 03: all random if (((playmode == 0x00) | (playmode == 0x01) | (playmode == 0x02) | (playmode == 0x03)) == false) { pc.printf("PlayMode Parameter Error! "); return false; } MP3.putc(0x7E); MP3.putc(0x03); MP3.putc(0xA9); MP3.putc(playmode); MP3.putc(0x7E); wait_ms(10); while (MP3.readable()) { if (0xA9 == MP3.getc()) return true; else return false; } } // stop the current playing music bool stopFile() { MP3.putc(0x7E); MP3.putc(0x02); MP3.putc(0xA4); MP3.putc(0x7E); wait_ms(10); while (MP3.readable()) { if (0xA4 == MP3.getc()) return true; else return false; } } bool nextFile() { MP3.putc(0x7E); MP3.putc(0x02); MP3.putc(0xA5); MP3.putc(0x7E); wait_ms(10); while (MP3.readable()) { if (0xA5 == MP3.getc()) return true; else return false; } } bool previousFile() { MP3.putc(0x7E); MP3.putc(0x02); MP3.putc(0xA6); MP3.putc(0x7E); wait_ms(10); while (MP3.readable()) { if (0xA6 == MP3.getc()) return true; else return false; } } unsigned char getState() { MP3.putc(0x7E); MP3.putc(0x02); MP3.putc(0xC2); MP3.putc(0x7E); wait_ms(10); while (MP3.readable()) { if (0xC2 == MP3.getc()) // Opcode return MP3.getc(); // 01: play, 02:stop, 03:pause else return 0; } } unsigned char getSDFileCount() { MP3.putc(0x7E); MP3.putc(0x02); MP3.putc(0xC4); MP3.putc(0x7E); wait_ms(10); while (MP3.readable()) { if (0xC4 == MP3.getc()) return MP3.getc(); // number of files on sd card else return 0; } } unsigned char getFlashFileCount() { MP3.putc(0x7E); MP3.putc(0x02); MP3.putc(0xC4); MP3.putc(0x7E); wait_ms(10); while (MP3.readable()) { if (0xC4 == MP3.getc()) return MP3.getc(); // number of files on sd card else return 0; } } int getCurrentFile() { uint8_t hbyte = 0; uint8_t lbyte = 0; MP3.putc(0x7E); MP3.putc(0x02); MP3.putc(0xC6); MP3.putc(0x7E); wait_ms(10); while (MP3.readable()) { if (0xC6 == MP3.getc()) { hbyte = MP3.getc(); lbyte = MP3.getc(); return (hbyte << 8) & lbyte; } else return 0; } } unsigned char getVolume() { MP3.putc(0x7E); MP3.putc(0x02); MP3.putc(0xC1); MP3.putc(0x7E); wait_ms(10); while (MP3.readable()) { if (0xC1 == MP3.getc()) return MP3.getc(); // 0 to 31 else return 0; } }