example driver serial mp3 player

Dependencies:   mbed

Committer:
lolocosto
Date:
Thu Jan 12 08:33:12 2017 +0000
Revision:
0:6249d6685c44
Driver for grove Serial Mp3 player

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lolocosto 0:6249d6685c44 1 #include <mbed.h>
lolocosto 0:6249d6685c44 2
lolocosto 0:6249d6685c44 3 DigitalOut sortie1(D3);
lolocosto 0:6249d6685c44 4 DigitalOut sortie2(D4);
lolocosto 0:6249d6685c44 5 DigitalOut sortie3(D5);
lolocosto 0:6249d6685c44 6 DigitalOut led(D13);
lolocosto 0:6249d6685c44 7 DigitalIn entree1(D9);
lolocosto 0:6249d6685c44 8 DigitalIn entree2(D10);
lolocosto 0:6249d6685c44 9 DigitalIn entree3(D11);
lolocosto 0:6249d6685c44 10
lolocosto 0:6249d6685c44 11 Serial pc(USBTX,USBRX);
lolocosto 0:6249d6685c44 12 Serial MP3(D8,D2);
lolocosto 0:6249d6685c44 13
lolocosto 0:6249d6685c44 14 bool setVolume(uint8_t volume);
lolocosto 0:6249d6685c44 15 bool setPlayMode(uint8_t playmode);
lolocosto 0:6249d6685c44 16 bool playSDFile(int fileIndex);
lolocosto 0:6249d6685c44 17 void setup() {
lolocosto 0:6249d6685c44 18
lolocosto 0:6249d6685c44 19 MP3.baud(9600);
lolocosto 0:6249d6685c44 20 pc.baud(9600);
lolocosto 0:6249d6685c44 21
lolocosto 0:6249d6685c44 22 setVolume(31); // 0..31 max
lolocosto 0:6249d6685c44 23 setPlayMode(0);
lolocosto 0:6249d6685c44 24 wait_ms(2000);
lolocosto 0:6249d6685c44 25 }
lolocosto 0:6249d6685c44 26
lolocosto 0:6249d6685c44 27 int i=0;
lolocosto 0:6249d6685c44 28 int C1=0;
lolocosto 0:6249d6685c44 29 int C2=0;
lolocosto 0:6249d6685c44 30 int C3=0;
lolocosto 0:6249d6685c44 31 int C4=0;
lolocosto 0:6249d6685c44 32 int C5=0;
lolocosto 0:6249d6685c44 33 int C6=0;
lolocosto 0:6249d6685c44 34 int C7=0;
lolocosto 0:6249d6685c44 35 int C8=0;
lolocosto 0:6249d6685c44 36 int C9=0;
lolocosto 0:6249d6685c44 37
lolocosto 0:6249d6685c44 38 int main() {
lolocosto 0:6249d6685c44 39
lolocosto 0:6249d6685c44 40
lolocosto 0:6249d6685c44 41 while(1) {
lolocosto 0:6249d6685c44 42 sortie1=1;
lolocosto 0:6249d6685c44 43 if (entree1==1) {playSDFile(1);}
lolocosto 0:6249d6685c44 44 if (entree2==1) {playSDFile(4);}
lolocosto 0:6249d6685c44 45 if (entree3==1) {playSDFile(7);}
lolocosto 0:6249d6685c44 46 sortie1=0;
lolocosto 0:6249d6685c44 47 sortie2=1;
lolocosto 0:6249d6685c44 48 if (entree1==1) {playSDFile(2);}
lolocosto 0:6249d6685c44 49 if (entree2==1) {playSDFile(5);}
lolocosto 0:6249d6685c44 50 if (entree3==1) {playSDFile(8);}
lolocosto 0:6249d6685c44 51 sortie2=0;
lolocosto 0:6249d6685c44 52 sortie3=1;
lolocosto 0:6249d6685c44 53 if (entree1==1) {playSDFile(3);}
lolocosto 0:6249d6685c44 54 if (entree2==1) {playSDFile(6);}
lolocosto 0:6249d6685c44 55 if (entree3==1) {playSDFile(9);}
lolocosto 0:6249d6685c44 56 sortie3=0;
lolocosto 0:6249d6685c44 57
lolocosto 0:6249d6685c44 58
lolocosto 0:6249d6685c44 59 }
lolocosto 0:6249d6685c44 60 }
lolocosto 0:6249d6685c44 61
lolocosto 0:6249d6685c44 62
lolocosto 0:6249d6685c44 63
lolocosto 0:6249d6685c44 64 //Set the music index to play, the index is decided by the input sequence
lolocosto 0:6249d6685c44 65 //of the music;
lolocosto 0:6249d6685c44 66 //hbyte: the high byte of the index;
lolocosto 0:6249d6685c44 67 //lbyte: the low byte of the index;
lolocosto 0:6249d6685c44 68 bool playSDFile(int fileIndex)
lolocosto 0:6249d6685c44 69 {
lolocosto 0:6249d6685c44 70
lolocosto 0:6249d6685c44 71 uint8_t hbyte = fileIndex >> 8;
lolocosto 0:6249d6685c44 72 uint8_t lbyte = fileIndex & 0B11111111;
lolocosto 0:6249d6685c44 73 MP3.putc(0x7E);
lolocosto 0:6249d6685c44 74 MP3.putc(0x04);
lolocosto 0:6249d6685c44 75 MP3.putc(0xA0);
lolocosto 0:6249d6685c44 76 MP3.putc(hbyte);
lolocosto 0:6249d6685c44 77 MP3.putc(lbyte);
lolocosto 0:6249d6685c44 78 MP3.putc(0x7E);
lolocosto 0:6249d6685c44 79 wait_ms(10);
lolocosto 0:6249d6685c44 80 while (MP3.readable())
lolocosto 0:6249d6685c44 81 {
lolocosto 0:6249d6685c44 82 if (0xA0 == MP3.getc())
lolocosto 0:6249d6685c44 83 return true;
lolocosto 0:6249d6685c44 84 else
lolocosto 0:6249d6685c44 85 return false;
lolocosto 0:6249d6685c44 86 }
lolocosto 0:6249d6685c44 87 }
lolocosto 0:6249d6685c44 88 // Pause on/off the current music
lolocosto 0:6249d6685c44 89 bool pauseOnOff()
lolocosto 0:6249d6685c44 90 {
lolocosto 0:6249d6685c44 91 MP3.putc(0x7E);
lolocosto 0:6249d6685c44 92 MP3.putc(0x02);
lolocosto 0:6249d6685c44 93 MP3.putc(0xA3);
lolocosto 0:6249d6685c44 94 MP3.putc(0x7E);
lolocosto 0:6249d6685c44 95 wait_ms(10);
lolocosto 0:6249d6685c44 96 while (MP3.readable())
lolocosto 0:6249d6685c44 97 {
lolocosto 0:6249d6685c44 98 if (0xA3 == MP3.getc())
lolocosto 0:6249d6685c44 99 return true;
lolocosto 0:6249d6685c44 100 else
lolocosto 0:6249d6685c44 101 return false;
lolocosto 0:6249d6685c44 102 }
lolocosto 0:6249d6685c44 103 }
lolocosto 0:6249d6685c44 104
lolocosto 0:6249d6685c44 105 //Set the volume, the range is 0x00 to 0x1F (0-31)
lolocosto 0:6249d6685c44 106 bool setVolume(uint8_t volume)
lolocosto 0:6249d6685c44 107 {
lolocosto 0:6249d6685c44 108 MP3.putc(0x7E);
lolocosto 0:6249d6685c44 109 MP3.putc(0x03);
lolocosto 0:6249d6685c44 110 MP3.putc(0xA7);
lolocosto 0:6249d6685c44 111 MP3.putc(volume);
lolocosto 0:6249d6685c44 112 MP3.putc(0x7E);
lolocosto 0:6249d6685c44 113 wait_ms(10);
lolocosto 0:6249d6685c44 114 while (MP3.readable())
lolocosto 0:6249d6685c44 115 {
lolocosto 0:6249d6685c44 116 if (0xA7 == MP3.getc())
lolocosto 0:6249d6685c44 117 return true;
lolocosto 0:6249d6685c44 118 else
lolocosto 0:6249d6685c44 119 return false;
lolocosto 0:6249d6685c44 120 }
lolocosto 0:6249d6685c44 121 }
lolocosto 0:6249d6685c44 122
lolocosto 0:6249d6685c44 123 bool setPlayMode(uint8_t playmode)
lolocosto 0:6249d6685c44 124 {
lolocosto 0:6249d6685c44 125
lolocosto 0:6249d6685c44 126 //00: single , 01: single loop, 02: all loop, 03: all random
lolocosto 0:6249d6685c44 127 if (((playmode == 0x00) | (playmode == 0x01) | (playmode == 0x02) | (playmode == 0x03)) == false)
lolocosto 0:6249d6685c44 128 {
lolocosto 0:6249d6685c44 129 pc.printf("PlayMode Parameter Error! ");
lolocosto 0:6249d6685c44 130 return false;
lolocosto 0:6249d6685c44 131 }
lolocosto 0:6249d6685c44 132 MP3.putc(0x7E);
lolocosto 0:6249d6685c44 133 MP3.putc(0x03);
lolocosto 0:6249d6685c44 134 MP3.putc(0xA9);
lolocosto 0:6249d6685c44 135 MP3.putc(playmode);
lolocosto 0:6249d6685c44 136 MP3.putc(0x7E);
lolocosto 0:6249d6685c44 137 wait_ms(10);
lolocosto 0:6249d6685c44 138 while (MP3.readable())
lolocosto 0:6249d6685c44 139 {
lolocosto 0:6249d6685c44 140 if (0xA9 == MP3.getc())
lolocosto 0:6249d6685c44 141 return true;
lolocosto 0:6249d6685c44 142 else
lolocosto 0:6249d6685c44 143 return false;
lolocosto 0:6249d6685c44 144 }
lolocosto 0:6249d6685c44 145 }
lolocosto 0:6249d6685c44 146
lolocosto 0:6249d6685c44 147 // stop the current playing music
lolocosto 0:6249d6685c44 148 bool stopFile() {
lolocosto 0:6249d6685c44 149
lolocosto 0:6249d6685c44 150 MP3.putc(0x7E);
lolocosto 0:6249d6685c44 151 MP3.putc(0x02);
lolocosto 0:6249d6685c44 152 MP3.putc(0xA4);
lolocosto 0:6249d6685c44 153 MP3.putc(0x7E);
lolocosto 0:6249d6685c44 154 wait_ms(10);
lolocosto 0:6249d6685c44 155 while (MP3.readable())
lolocosto 0:6249d6685c44 156 {
lolocosto 0:6249d6685c44 157 if (0xA4 == MP3.getc())
lolocosto 0:6249d6685c44 158 return true;
lolocosto 0:6249d6685c44 159 else
lolocosto 0:6249d6685c44 160 return false;
lolocosto 0:6249d6685c44 161 }
lolocosto 0:6249d6685c44 162 }
lolocosto 0:6249d6685c44 163
lolocosto 0:6249d6685c44 164 bool nextFile() {
lolocosto 0:6249d6685c44 165 MP3.putc(0x7E);
lolocosto 0:6249d6685c44 166 MP3.putc(0x02);
lolocosto 0:6249d6685c44 167 MP3.putc(0xA5);
lolocosto 0:6249d6685c44 168 MP3.putc(0x7E);
lolocosto 0:6249d6685c44 169 wait_ms(10);
lolocosto 0:6249d6685c44 170 while (MP3.readable())
lolocosto 0:6249d6685c44 171 {
lolocosto 0:6249d6685c44 172 if (0xA5 == MP3.getc())
lolocosto 0:6249d6685c44 173 return true;
lolocosto 0:6249d6685c44 174 else
lolocosto 0:6249d6685c44 175 return false;
lolocosto 0:6249d6685c44 176 }
lolocosto 0:6249d6685c44 177 }
lolocosto 0:6249d6685c44 178
lolocosto 0:6249d6685c44 179 bool previousFile() {
lolocosto 0:6249d6685c44 180 MP3.putc(0x7E);
lolocosto 0:6249d6685c44 181 MP3.putc(0x02);
lolocosto 0:6249d6685c44 182 MP3.putc(0xA6);
lolocosto 0:6249d6685c44 183 MP3.putc(0x7E);
lolocosto 0:6249d6685c44 184 wait_ms(10);
lolocosto 0:6249d6685c44 185 while (MP3.readable())
lolocosto 0:6249d6685c44 186 {
lolocosto 0:6249d6685c44 187 if (0xA6 == MP3.getc())
lolocosto 0:6249d6685c44 188 return true;
lolocosto 0:6249d6685c44 189 else
lolocosto 0:6249d6685c44 190 return false;
lolocosto 0:6249d6685c44 191 }
lolocosto 0:6249d6685c44 192 }
lolocosto 0:6249d6685c44 193
lolocosto 0:6249d6685c44 194 unsigned char getState() {
lolocosto 0:6249d6685c44 195 MP3.putc(0x7E);
lolocosto 0:6249d6685c44 196 MP3.putc(0x02);
lolocosto 0:6249d6685c44 197 MP3.putc(0xC2);
lolocosto 0:6249d6685c44 198 MP3.putc(0x7E);
lolocosto 0:6249d6685c44 199 wait_ms(10);
lolocosto 0:6249d6685c44 200 while (MP3.readable())
lolocosto 0:6249d6685c44 201 {
lolocosto 0:6249d6685c44 202 if (0xC2 == MP3.getc()) // Opcode
lolocosto 0:6249d6685c44 203 return MP3.getc(); // 01: play, 02:stop, 03:pause
lolocosto 0:6249d6685c44 204 else
lolocosto 0:6249d6685c44 205 return 0;
lolocosto 0:6249d6685c44 206 }
lolocosto 0:6249d6685c44 207
lolocosto 0:6249d6685c44 208 }
lolocosto 0:6249d6685c44 209
lolocosto 0:6249d6685c44 210 unsigned char getSDFileCount() {
lolocosto 0:6249d6685c44 211 MP3.putc(0x7E);
lolocosto 0:6249d6685c44 212 MP3.putc(0x02);
lolocosto 0:6249d6685c44 213 MP3.putc(0xC4);
lolocosto 0:6249d6685c44 214 MP3.putc(0x7E);
lolocosto 0:6249d6685c44 215 wait_ms(10);
lolocosto 0:6249d6685c44 216 while (MP3.readable())
lolocosto 0:6249d6685c44 217 {
lolocosto 0:6249d6685c44 218 if (0xC4 == MP3.getc())
lolocosto 0:6249d6685c44 219 return MP3.getc(); // number of files on sd card
lolocosto 0:6249d6685c44 220 else
lolocosto 0:6249d6685c44 221 return 0;
lolocosto 0:6249d6685c44 222 }
lolocosto 0:6249d6685c44 223 }
lolocosto 0:6249d6685c44 224
lolocosto 0:6249d6685c44 225 unsigned char getFlashFileCount() {
lolocosto 0:6249d6685c44 226 MP3.putc(0x7E);
lolocosto 0:6249d6685c44 227 MP3.putc(0x02);
lolocosto 0:6249d6685c44 228 MP3.putc(0xC4);
lolocosto 0:6249d6685c44 229 MP3.putc(0x7E);
lolocosto 0:6249d6685c44 230 wait_ms(10);
lolocosto 0:6249d6685c44 231 while (MP3.readable())
lolocosto 0:6249d6685c44 232 {
lolocosto 0:6249d6685c44 233 if (0xC4 == MP3.getc())
lolocosto 0:6249d6685c44 234 return MP3.getc(); // number of files on sd card
lolocosto 0:6249d6685c44 235 else
lolocosto 0:6249d6685c44 236 return 0;
lolocosto 0:6249d6685c44 237 }
lolocosto 0:6249d6685c44 238 }
lolocosto 0:6249d6685c44 239
lolocosto 0:6249d6685c44 240 int getCurrentFile() {
lolocosto 0:6249d6685c44 241 uint8_t hbyte = 0;
lolocosto 0:6249d6685c44 242 uint8_t lbyte = 0;
lolocosto 0:6249d6685c44 243
lolocosto 0:6249d6685c44 244 MP3.putc(0x7E);
lolocosto 0:6249d6685c44 245 MP3.putc(0x02);
lolocosto 0:6249d6685c44 246 MP3.putc(0xC6);
lolocosto 0:6249d6685c44 247 MP3.putc(0x7E);
lolocosto 0:6249d6685c44 248 wait_ms(10);
lolocosto 0:6249d6685c44 249 while (MP3.readable())
lolocosto 0:6249d6685c44 250 {
lolocosto 0:6249d6685c44 251
lolocosto 0:6249d6685c44 252 if (0xC6 == MP3.getc()) {
lolocosto 0:6249d6685c44 253 hbyte = MP3.getc();
lolocosto 0:6249d6685c44 254 lbyte = MP3.getc();
lolocosto 0:6249d6685c44 255 return (hbyte << 8) & lbyte;
lolocosto 0:6249d6685c44 256 }
lolocosto 0:6249d6685c44 257 else
lolocosto 0:6249d6685c44 258 return 0;
lolocosto 0:6249d6685c44 259 }
lolocosto 0:6249d6685c44 260 }
lolocosto 0:6249d6685c44 261
lolocosto 0:6249d6685c44 262 unsigned char getVolume() {
lolocosto 0:6249d6685c44 263 MP3.putc(0x7E);
lolocosto 0:6249d6685c44 264 MP3.putc(0x02);
lolocosto 0:6249d6685c44 265 MP3.putc(0xC1);
lolocosto 0:6249d6685c44 266 MP3.putc(0x7E);
lolocosto 0:6249d6685c44 267 wait_ms(10);
lolocosto 0:6249d6685c44 268 while (MP3.readable())
lolocosto 0:6249d6685c44 269 {
lolocosto 0:6249d6685c44 270 if (0xC1 == MP3.getc())
lolocosto 0:6249d6685c44 271 return MP3.getc(); // 0 to 31
lolocosto 0:6249d6685c44 272 else
lolocosto 0:6249d6685c44 273 return 0;
lolocosto 0:6249d6685c44 274 }
lolocosto 0:6249d6685c44 275 }
lolocosto 0:6249d6685c44 276
lolocosto 0:6249d6685c44 277
lolocosto 0:6249d6685c44 278
lolocosto 0:6249d6685c44 279
lolocosto 0:6249d6685c44 280
lolocosto 0:6249d6685c44 281
lolocosto 0:6249d6685c44 282
lolocosto 0:6249d6685c44 283
lolocosto 0:6249d6685c44 284
lolocosto 0:6249d6685c44 285