UART MP3 Voice Module with 8MB Flash Memory / DFR0534

Dependents:   DFR0534_MP3_Test_os5 TYBLE16_MP3_Air

see /users/kenjiArai/notebook/mp3--voice-module-dfr0534/

Committer:
kenjiArai
Date:
Sun Dec 29 02:55:07 2019 +0000
Revision:
0:466200f304c9
1st working sample (need to update)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:466200f304c9 1 /*
kenjiArai 0:466200f304c9 2 * Mbed Library program
kenjiArai 0:466200f304c9 3 * UART MP3 Voice Module with 8MB Flash Memory / DFR0534
kenjiArai 0:466200f304c9 4 *
kenjiArai 0:466200f304c9 5 * Copyright (c) 2019 Kenji Arai / JH1PJL
kenjiArai 0:466200f304c9 6 * http://www.page.sannet.ne.jp/kenjia/index.html
kenjiArai 0:466200f304c9 7 * https://os.mbed.com/users/kenjiArai/
kenjiArai 0:466200f304c9 8 * Created: December 28th, 2019
kenjiArai 0:466200f304c9 9 * Revised: December 29th, 2019
kenjiArai 0:466200f304c9 10 */
kenjiArai 0:466200f304c9 11
kenjiArai 0:466200f304c9 12 /*
kenjiArai 0:466200f304c9 13 Reference information:
kenjiArai 0:466200f304c9 14 http://akizukidenshi.com/catalog/g/gM-13708/
kenjiArai 0:466200f304c9 15 https://wiki.dfrobot.com/Voice_Module_SKU__DFR0534
kenjiArai 0:466200f304c9 16 */
kenjiArai 0:466200f304c9 17
kenjiArai 0:466200f304c9 18 #ifndef DFR0534_H
kenjiArai 0:466200f304c9 19 #define DFR0534_H
kenjiArai 0:466200f304c9 20
kenjiArai 0:466200f304c9 21 #include "mbed.h"
kenjiArai 0:466200f304c9 22
kenjiArai 0:466200f304c9 23 #define VOL_MIN 0
kenjiArai 0:466200f304c9 24 #define VOL_MAX 30
kenjiArai 0:466200f304c9 25
kenjiArai 0:466200f304c9 26 enum simple_commands{
kenjiArai 0:466200f304c9 27 Play = 0x02,
kenjiArai 0:466200f304c9 28 Pause,
kenjiArai 0:466200f304c9 29 Playstop,
kenjiArai 0:466200f304c9 30 Prev_Audio,
kenjiArai 0:466200f304c9 31 Next_Audio,
kenjiArai 0:466200f304c9 32 The_Directory_of_the_previous_folder = 0x0e,
kenjiArai 0:466200f304c9 33 The_directory_of_the_next_folder,
kenjiArai 0:466200f304c9 34 End_to_play,
kenjiArai 0:466200f304c9 35 Increase_the_volume = 0x14,
kenjiArai 0:466200f304c9 36 Reduce_the_volume,
kenjiArai 0:466200f304c9 37 End_Combination_Play = 0x1c,
kenjiArai 0:466200f304c9 38 End_repetition = 0x21,
kenjiArai 0:466200f304c9 39 End_to_send_the_playing_time = 0x26
kenjiArai 0:466200f304c9 40 };
kenjiArai 0:466200f304c9 41
kenjiArai 0:466200f304c9 42 /** UART MP3 Voice Module with 8MB Flash Memory / DFR0534
kenjiArai 0:466200f304c9 43 * @code
kenjiArai 0:466200f304c9 44 * #include "mbed.h"
kenjiArai 0:466200f304c9 45 * #include "drf0534.h"
kenjiArai 0:466200f304c9 46 *
kenjiArai 0:466200f304c9 47 * DFR0534 mp3(PA_0, PA_1, PA_4); // tx, rx, busy
kenjiArai 0:466200f304c9 48 *
kenjiArai 0:466200f304c9 49 * int main() {
kenjiArai 0:466200f304c9 50 * mp3.volume_setting(VOL_MAX / 2);
kenjiArai 0:466200f304c9 51 * uint32_t num = mp3.total_num_of_audio();
kenjiArai 0:466200f304c9 52 * while(true) {
kenjiArai 0:466200f304c9 53 * for (uint32_t i = 1; i < num + 1; i++) {
kenjiArai 0:466200f304c9 54 * mp3.play_one(i);
kenjiArai 0:466200f304c9 55 * mp3.get_file_name(name_buf);
kenjiArai 0:466200f304c9 56 * printf("File name = %s\r\n", name_buf);
kenjiArai 0:466200f304c9 57 * }
kenjiArai 0:466200f304c9 58 * }
kenjiArai 0:466200f304c9 59 * }
kenjiArai 0:466200f304c9 60 * @endcode
kenjiArai 0:466200f304c9 61 */
kenjiArai 0:466200f304c9 62
kenjiArai 0:466200f304c9 63 class DFR0534
kenjiArai 0:466200f304c9 64 {
kenjiArai 0:466200f304c9 65 public:
kenjiArai 0:466200f304c9 66 /** Create the DFR0534 object
kenjiArai 0:466200f304c9 67 * @param PinName communication line TX & RX & Busy signal input
kenjiArai 0:466200f304c9 68 */
kenjiArai 0:466200f304c9 69 DFR0534(PinName tx, PinName rx, PinName busy);
kenjiArai 0:466200f304c9 70
kenjiArai 0:466200f304c9 71 /** Play specific truck
kenjiArai 0:466200f304c9 72 * @param truck number
kenjiArai 0:466200f304c9 73 */
kenjiArai 0:466200f304c9 74 void play_one(uint16_t track_num);
kenjiArai 0:466200f304c9 75
kenjiArai 0:466200f304c9 76 /** set volume
kenjiArai 0:466200f304c9 77 * @param volume value(VOL_MIN to VOL_MAX, 0 to 30)
kenjiArai 0:466200f304c9 78 */
kenjiArai 0:466200f304c9 79 void volume_setting(uint8_t vol);
kenjiArai 0:466200f304c9 80
kenjiArai 0:466200f304c9 81 /** increase volume
kenjiArai 0:466200f304c9 82 * @param none
kenjiArai 0:466200f304c9 83 */
kenjiArai 0:466200f304c9 84 void volume_increase();
kenjiArai 0:466200f304c9 85
kenjiArai 0:466200f304c9 86 /** decrease volume
kenjiArai 0:466200f304c9 87 * @param none
kenjiArai 0:466200f304c9 88 */
kenjiArai 0:466200f304c9 89 void volume_decrease();
kenjiArai 0:466200f304c9 90
kenjiArai 0:466200f304c9 91 /** direct command (simple type -> No parameter & no return value)
kenjiArai 0:466200f304c9 92 * @param command
kenjiArai 0:466200f304c9 93 */
kenjiArai 0:466200f304c9 94 void command(enum simple_commands cmds);
kenjiArai 0:466200f304c9 95
kenjiArai 0:466200f304c9 96 /** Check the total number of audio track
kenjiArai 0:466200f304c9 97 * @param none
kenjiArai 0:466200f304c9 98 * @return total number of audio
kenjiArai 0:466200f304c9 99 */
kenjiArai 0:466200f304c9 100 uint16_t total_num_of_audio();
kenjiArai 0:466200f304c9 101
kenjiArai 0:466200f304c9 102 /** Check the current audio track number
kenjiArai 0:466200f304c9 103 * @param none
kenjiArai 0:466200f304c9 104 * @return number
kenjiArai 0:466200f304c9 105 */
kenjiArai 0:466200f304c9 106 uint16_t current_num_of_audio();
kenjiArai 0:466200f304c9 107
kenjiArai 0:466200f304c9 108 /** get file name
kenjiArai 0:466200f304c9 109 * @param buffer pointer (buffer size > 32)
kenjiArai 0:466200f304c9 110 * @return name into buffer
kenjiArai 0:466200f304c9 111 */
kenjiArai 0:466200f304c9 112 void get_file_name(char *buf);
kenjiArai 0:466200f304c9 113
kenjiArai 0:466200f304c9 114 /** get play time
kenjiArai 0:466200f304c9 115 * @param none
kenjiArai 0:466200f304c9 116 * @return time[seconds]
kenjiArai 0:466200f304c9 117 */
kenjiArai 0:466200f304c9 118 uint32_t get_play_time();
kenjiArai 0:466200f304c9 119
kenjiArai 0:466200f304c9 120 /** get play back time
kenjiArai 0:466200f304c9 121 * @param none
kenjiArai 0:466200f304c9 122 * @return time[seconds]
kenjiArai 0:466200f304c9 123 */
kenjiArai 0:466200f304c9 124 uint32_t get_play_back_time();
kenjiArai 0:466200f304c9 125
kenjiArai 0:466200f304c9 126 private:
kenjiArai 0:466200f304c9 127 RawSerial _mp3;
kenjiArai 0:466200f304c9 128 DigitalIn _bsy;
kenjiArai 0:466200f304c9 129
kenjiArai 0:466200f304c9 130 void _rx_handler(void);
kenjiArai 0:466200f304c9 131 void _command(uint8_t cmd_no);
kenjiArai 0:466200f304c9 132 void _command_w_para(uint8_t cmd_no, uint8_t *parameter, uint8_t len);
kenjiArai 0:466200f304c9 133 void _wait_busy(void);
kenjiArai 0:466200f304c9 134 uint32_t get_time(void);
kenjiArai 0:466200f304c9 135
kenjiArai 0:466200f304c9 136 CircularBuffer<char, 32> _rxbuf; // small ring buffer
kenjiArai 0:466200f304c9 137 uint8_t _sum;
kenjiArai 0:466200f304c9 138 char _buf[32];
kenjiArai 0:466200f304c9 139
kenjiArai 0:466200f304c9 140 };
kenjiArai 0:466200f304c9 141
kenjiArai 0:466200f304c9 142 #endif // DFR0534_H