Jongwan Seo
/
UART_Interrupt_Softuart_MP3
F746ZG UART Interrupt and Software Uart with DFPlayer Mini(PF_13, PF_14)
DFPlayer.cpp@0:2444e79e5540, 2021-04-23 (annotated)
- Committer:
- angler
- Date:
- Fri Apr 23 02:58:41 2021 +0000
- Revision:
- 0:2444e79e5540
F746ZG UART_Interrupt and DFPlayer with software uart(PF_13, PF_14)
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
angler | 0:2444e79e5540 | 1 | #include "mbed.h" |
angler | 0:2444e79e5540 | 2 | #include "SoftSerial.h" |
angler | 0:2444e79e5540 | 3 | //#include "DFPlayer.h" |
angler | 0:2444e79e5540 | 4 | |
angler | 0:2444e79e5540 | 5 | #ifdef __cplusplus |
angler | 0:2444e79e5540 | 6 | extern "C" { |
angler | 0:2444e79e5540 | 7 | #endif |
angler | 0:2444e79e5540 | 8 | SoftSerial mp3(PF_13, PF_14); |
angler | 0:2444e79e5540 | 9 | |
angler | 0:2444e79e5540 | 10 | uint8_t is_replay = 0; |
angler | 0:2444e79e5540 | 11 | |
angler | 0:2444e79e5540 | 12 | uint8_t send_buf[10] = {0x7E, 0xFF, 0x06, 0x03, 00, 00, 01, 0xFE, 0xF6, 0xEF}; |
angler | 0:2444e79e5540 | 13 | |
angler | 0:2444e79e5540 | 14 | |
angler | 0:2444e79e5540 | 15 | void fill_uint16_bigend (uint8_t *thebuf, uint16_t data) |
angler | 0:2444e79e5540 | 16 | { |
angler | 0:2444e79e5540 | 17 | *thebuf = (uint8_t)(data>>8); |
angler | 0:2444e79e5540 | 18 | *(thebuf+1) = (uint8_t)data; |
angler | 0:2444e79e5540 | 19 | } |
angler | 0:2444e79e5540 | 20 | |
angler | 0:2444e79e5540 | 21 | uint16_t mp3_get_checksum (uint8_t *thebuf) |
angler | 0:2444e79e5540 | 22 | { |
angler | 0:2444e79e5540 | 23 | uint16_t sum = 0; |
angler | 0:2444e79e5540 | 24 | for (int i=1; i<7; i++) { |
angler | 0:2444e79e5540 | 25 | sum += thebuf[i]; |
angler | 0:2444e79e5540 | 26 | } |
angler | 0:2444e79e5540 | 27 | return -sum; |
angler | 0:2444e79e5540 | 28 | } |
angler | 0:2444e79e5540 | 29 | |
angler | 0:2444e79e5540 | 30 | void mp3_fill_checksum () |
angler | 0:2444e79e5540 | 31 | { |
angler | 0:2444e79e5540 | 32 | uint16_t checksum = mp3_get_checksum (send_buf); |
angler | 0:2444e79e5540 | 33 | fill_uint16_bigend (send_buf+7, checksum); |
angler | 0:2444e79e5540 | 34 | } |
angler | 0:2444e79e5540 | 35 | |
angler | 0:2444e79e5540 | 36 | void send_func () |
angler | 0:2444e79e5540 | 37 | { |
angler | 0:2444e79e5540 | 38 | int i; |
angler | 0:2444e79e5540 | 39 | for (i = 0; i < 10; i++) { |
angler | 0:2444e79e5540 | 40 | mp3.putc(send_buf[i]); |
angler | 0:2444e79e5540 | 41 | // uart8.printf("%02X ",send_buf[i]); |
angler | 0:2444e79e5540 | 42 | } |
angler | 0:2444e79e5540 | 43 | // uart8.printf("\r\n"); |
angler | 0:2444e79e5540 | 44 | // uart8.printf("\r\n"); |
angler | 0:2444e79e5540 | 45 | |
angler | 0:2444e79e5540 | 46 | } |
angler | 0:2444e79e5540 | 47 | |
angler | 0:2444e79e5540 | 48 | void mp3_send_cmd1 (uint8_t cmd, uint16_t arg) |
angler | 0:2444e79e5540 | 49 | { |
angler | 0:2444e79e5540 | 50 | send_buf[3] = cmd; |
angler | 0:2444e79e5540 | 51 | fill_uint16_bigend ((send_buf+5), arg); |
angler | 0:2444e79e5540 | 52 | mp3_fill_checksum (); |
angler | 0:2444e79e5540 | 53 | send_func (); |
angler | 0:2444e79e5540 | 54 | } |
angler | 0:2444e79e5540 | 55 | |
angler | 0:2444e79e5540 | 56 | void mp3_send_cmd (uint8_t cmd) |
angler | 0:2444e79e5540 | 57 | { |
angler | 0:2444e79e5540 | 58 | send_buf[3] = cmd; |
angler | 0:2444e79e5540 | 59 | fill_uint16_bigend ((send_buf+5), 0); |
angler | 0:2444e79e5540 | 60 | mp3_fill_checksum (); |
angler | 0:2444e79e5540 | 61 | send_func (); |
angler | 0:2444e79e5540 | 62 | } |
angler | 0:2444e79e5540 | 63 | |
angler | 0:2444e79e5540 | 64 | void mp3_set_reply (uint8_t state) |
angler | 0:2444e79e5540 | 65 | { |
angler | 0:2444e79e5540 | 66 | is_replay = state; |
angler | 0:2444e79e5540 | 67 | send_buf[4] = is_replay; |
angler | 0:2444e79e5540 | 68 | } |
angler | 0:2444e79e5540 | 69 | |
angler | 0:2444e79e5540 | 70 | void mp3_play_physical1 (uint16_t num) |
angler | 0:2444e79e5540 | 71 | { |
angler | 0:2444e79e5540 | 72 | mp3_send_cmd1 (0x03, num); |
angler | 0:2444e79e5540 | 73 | } |
angler | 0:2444e79e5540 | 74 | |
angler | 0:2444e79e5540 | 75 | void mp3_play_physical () |
angler | 0:2444e79e5540 | 76 | { |
angler | 0:2444e79e5540 | 77 | mp3_send_cmd (0x03); |
angler | 0:2444e79e5540 | 78 | } |
angler | 0:2444e79e5540 | 79 | |
angler | 0:2444e79e5540 | 80 | void mp3_next () |
angler | 0:2444e79e5540 | 81 | { |
angler | 0:2444e79e5540 | 82 | mp3_send_cmd (0x01); |
angler | 0:2444e79e5540 | 83 | } |
angler | 0:2444e79e5540 | 84 | |
angler | 0:2444e79e5540 | 85 | void mp3_prev () |
angler | 0:2444e79e5540 | 86 | { |
angler | 0:2444e79e5540 | 87 | mp3_send_cmd (0x02); |
angler | 0:2444e79e5540 | 88 | } |
angler | 0:2444e79e5540 | 89 | |
angler | 0:2444e79e5540 | 90 | //0x06 set volume 0-30 |
angler | 0:2444e79e5540 | 91 | void mp3_set_volume (uint16_t volume) |
angler | 0:2444e79e5540 | 92 | { |
angler | 0:2444e79e5540 | 93 | if(volume > 30) |
angler | 0:2444e79e5540 | 94 | { |
angler | 0:2444e79e5540 | 95 | volume = 30; |
angler | 0:2444e79e5540 | 96 | } |
angler | 0:2444e79e5540 | 97 | mp3_send_cmd1 (0x06, volume); |
angler | 0:2444e79e5540 | 98 | } |
angler | 0:2444e79e5540 | 99 | |
angler | 0:2444e79e5540 | 100 | //0x07 set EQ0/1/2/3/4/5 Normal/Pop/Rock/Jazz/Classic/Bass |
angler | 0:2444e79e5540 | 101 | void mp3_set_EQ (uint16_t eq) |
angler | 0:2444e79e5540 | 102 | { |
angler | 0:2444e79e5540 | 103 | mp3_send_cmd1 (0x07, eq); |
angler | 0:2444e79e5540 | 104 | } |
angler | 0:2444e79e5540 | 105 | |
angler | 0:2444e79e5540 | 106 | //0x09 set device 1/2/3/4/5 U/SD/AUX/SLEEP/FLASH |
angler | 0:2444e79e5540 | 107 | void mp3_set_device (uint16_t device) |
angler | 0:2444e79e5540 | 108 | { |
angler | 0:2444e79e5540 | 109 | mp3_send_cmd1 (0x09, device); |
angler | 0:2444e79e5540 | 110 | } |
angler | 0:2444e79e5540 | 111 | |
angler | 0:2444e79e5540 | 112 | void mp3_sleep () |
angler | 0:2444e79e5540 | 113 | { |
angler | 0:2444e79e5540 | 114 | mp3_send_cmd (0x0a); |
angler | 0:2444e79e5540 | 115 | } |
angler | 0:2444e79e5540 | 116 | |
angler | 0:2444e79e5540 | 117 | void mp3_reset () |
angler | 0:2444e79e5540 | 118 | { |
angler | 0:2444e79e5540 | 119 | mp3_send_cmd (0x0c); |
angler | 0:2444e79e5540 | 120 | } |
angler | 0:2444e79e5540 | 121 | |
angler | 0:2444e79e5540 | 122 | void mp3_play () |
angler | 0:2444e79e5540 | 123 | { |
angler | 0:2444e79e5540 | 124 | mp3_send_cmd (0x0d); |
angler | 0:2444e79e5540 | 125 | } |
angler | 0:2444e79e5540 | 126 | |
angler | 0:2444e79e5540 | 127 | void mp3_pause () |
angler | 0:2444e79e5540 | 128 | { |
angler | 0:2444e79e5540 | 129 | mp3_send_cmd (0x0e); |
angler | 0:2444e79e5540 | 130 | } |
angler | 0:2444e79e5540 | 131 | |
angler | 0:2444e79e5540 | 132 | void mp3_stop () |
angler | 0:2444e79e5540 | 133 | { |
angler | 0:2444e79e5540 | 134 | mp3_send_cmd (0x16); |
angler | 0:2444e79e5540 | 135 | } |
angler | 0:2444e79e5540 | 136 | |
angler | 0:2444e79e5540 | 137 | // play mp3 file in mp3 folder in your tf card |
angler | 0:2444e79e5540 | 138 | void mp3_play1 (uint16_t num) |
angler | 0:2444e79e5540 | 139 | { |
angler | 0:2444e79e5540 | 140 | mp3_send_cmd1 (0x12, num); |
angler | 0:2444e79e5540 | 141 | } |
angler | 0:2444e79e5540 | 142 | |
angler | 0:2444e79e5540 | 143 | void mp3_get_state () |
angler | 0:2444e79e5540 | 144 | { |
angler | 0:2444e79e5540 | 145 | mp3_send_cmd (0x42); |
angler | 0:2444e79e5540 | 146 | } |
angler | 0:2444e79e5540 | 147 | |
angler | 0:2444e79e5540 | 148 | void mp3_get_volume () |
angler | 0:2444e79e5540 | 149 | { |
angler | 0:2444e79e5540 | 150 | mp3_send_cmd (0x43); |
angler | 0:2444e79e5540 | 151 | } |
angler | 0:2444e79e5540 | 152 | |
angler | 0:2444e79e5540 | 153 | void mp3_get_u_sum () |
angler | 0:2444e79e5540 | 154 | { |
angler | 0:2444e79e5540 | 155 | mp3_send_cmd (0x47); |
angler | 0:2444e79e5540 | 156 | } |
angler | 0:2444e79e5540 | 157 | |
angler | 0:2444e79e5540 | 158 | void mp3_get_tf_sum () |
angler | 0:2444e79e5540 | 159 | { |
angler | 0:2444e79e5540 | 160 | mp3_send_cmd (0x48); |
angler | 0:2444e79e5540 | 161 | } |
angler | 0:2444e79e5540 | 162 | |
angler | 0:2444e79e5540 | 163 | void mp3_get_flash_sum () |
angler | 0:2444e79e5540 | 164 | { |
angler | 0:2444e79e5540 | 165 | mp3_send_cmd (0x49); |
angler | 0:2444e79e5540 | 166 | } |
angler | 0:2444e79e5540 | 167 | |
angler | 0:2444e79e5540 | 168 | void mp3_get_tf_current () |
angler | 0:2444e79e5540 | 169 | { |
angler | 0:2444e79e5540 | 170 | mp3_send_cmd (0x4c); |
angler | 0:2444e79e5540 | 171 | } |
angler | 0:2444e79e5540 | 172 | |
angler | 0:2444e79e5540 | 173 | void mp3_get_u_current () |
angler | 0:2444e79e5540 | 174 | { |
angler | 0:2444e79e5540 | 175 | mp3_send_cmd (0x4b); |
angler | 0:2444e79e5540 | 176 | } |
angler | 0:2444e79e5540 | 177 | |
angler | 0:2444e79e5540 | 178 | void mp3_get_flash_current () |
angler | 0:2444e79e5540 | 179 | { |
angler | 0:2444e79e5540 | 180 | mp3_send_cmd (0x4d); |
angler | 0:2444e79e5540 | 181 | } |
angler | 0:2444e79e5540 | 182 | |
angler | 0:2444e79e5540 | 183 | void mp3_single_loop (uint8_t state) |
angler | 0:2444e79e5540 | 184 | { |
angler | 0:2444e79e5540 | 185 | mp3_send_cmd1 (0x19, !state); |
angler | 0:2444e79e5540 | 186 | } |
angler | 0:2444e79e5540 | 187 | |
angler | 0:2444e79e5540 | 188 | void mp3_single_play (uint16_t num) |
angler | 0:2444e79e5540 | 189 | { |
angler | 0:2444e79e5540 | 190 | mp3_play1 (num); |
angler | 0:2444e79e5540 | 191 | wait_ms (10); |
angler | 0:2444e79e5540 | 192 | mp3_single_loop (true); |
angler | 0:2444e79e5540 | 193 | } |
angler | 0:2444e79e5540 | 194 | |
angler | 0:2444e79e5540 | 195 | void mp3_DAC (uint8_t state) |
angler | 0:2444e79e5540 | 196 | { |
angler | 0:2444e79e5540 | 197 | mp3_send_cmd1 (0x1a, !state); |
angler | 0:2444e79e5540 | 198 | } |
angler | 0:2444e79e5540 | 199 | |
angler | 0:2444e79e5540 | 200 | void mp3_random_play () |
angler | 0:2444e79e5540 | 201 | { |
angler | 0:2444e79e5540 | 202 | mp3_send_cmd (0x18); |
angler | 0:2444e79e5540 | 203 | } |
angler | 0:2444e79e5540 | 204 | |
angler | 0:2444e79e5540 | 205 | #ifdef __cplusplus |
angler | 0:2444e79e5540 | 206 | } |
angler | 0:2444e79e5540 | 207 | #endif |