![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
example driver serial mp3 player
main.cpp@0:6249d6685c44, 2017-01-12 (annotated)
- 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?
User | Revision | Line number | New 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 |