DFPlayerMini_Fast
DFPlayerMini_Fast.h
Go to the documentation of this file.
1 
20 #pragma once
21 #include "Arduino.h"
22 #include "FireTimer.h"
23 
24 
25 
26 
27  /**************************************************************************/
31  /**************************************************************************/
32 namespace dfplayer
33 {
35  const uint8_t STACK_SIZE = 10; // total number of bytes in a stack/packet (same for cmds and queries)
36  const uint8_t SB = 0x7E; // start byte
37  const uint8_t VER = 0xFF; // version
38  const uint8_t LEN = 0x6; // number of bytes after "LEN" (except for checksum data and EB)
39  const uint8_t FEEDBACK = 1; // feedback requested
40  const uint8_t NO_FEEDBACK = 0; // no feedback requested
41  const uint8_t EB = 0xEF; // end byte
42 
44  const uint8_t NEXT = 0x01;
45  const uint8_t PREV = 0x02;
46  const uint8_t PLAY = 0x03;
47  const uint8_t INC_VOL = 0x04;
48  const uint8_t DEC_VOL = 0x05;
49  const uint8_t VOLUME = 0x06;
50  const uint8_t EQ = 0x07;
51  const uint8_t PLAYBACK_MODE = 0x08;
52  const uint8_t PLAYBACK_SRC = 0x09;
53  const uint8_t STANDBY = 0x0A;
54  const uint8_t NORMAL = 0x0B;
55  const uint8_t RESET = 0x0C;
56  const uint8_t PLAYBACK = 0x0D;
57  const uint8_t PAUSE = 0x0E;
58  const uint8_t SPEC_FOLDER = 0x0F;
59  const uint8_t VOL_ADJ = 0x10;
60  const uint8_t REPEAT_PLAY = 0x11;
61  const uint8_t USE_MP3_FOLDER = 0x12;
62  const uint8_t INSERT_ADVERT = 0x13;
63  const uint8_t SPEC_TRACK_3000 = 0x14;
64  const uint8_t STOP_ADVERT = 0x15;
65  const uint8_t STOP = 0x16;
66  const uint8_t REPEAT_FOLDER = 0x17;
67  const uint8_t RANDOM_ALL = 0x18;
68  const uint8_t REPEAT_CURRENT = 0x19;
69  const uint8_t SET_DAC = 0x1A;
70 
72  const uint8_t SEND_INIT = 0x3F;
73  const uint8_t RETRANSMIT = 0x40;
74  const uint8_t REPLY = 0x41;
75  const uint8_t GET_STATUS_ = 0x42;
76  const uint8_t GET_VOL = 0x43;
77  const uint8_t GET_EQ = 0x44;
78  const uint8_t GET_MODE = 0x45;
79  const uint8_t GET_VERSION = 0x46;
80  const uint8_t GET_TF_FILES = 0x47;
81  const uint8_t GET_U_FILES = 0x48;
82  const uint8_t GET_FLASH_FILES = 0x49;
83  const uint8_t KEEP_ON = 0x4A;
84  const uint8_t GET_TF_TRACK = 0x4B;
85  const uint8_t GET_U_TRACK = 0x4C;
86  const uint8_t GET_FLASH_TRACK = 0x4D;
87  const uint8_t GET_FOLDER_FILES = 0x4E;
88  const uint8_t GET_FOLDERS = 0x4F;
89 
91  const uint8_t EQ_NORMAL = 0;
92  const uint8_t EQ_POP = 1;
93  const uint8_t EQ_ROCK = 2;
94  const uint8_t EQ_JAZZ = 3;
95  const uint8_t EQ_CLASSIC = 4;
96  const uint8_t EQ_BASE = 5;
97 
99  const uint8_t REPEAT = 0;
100  const uint8_t FOLDER_REPEAT = 1;
101  const uint8_t SINGLE_REPEAT = 2;
102  const uint8_t RANDOM = 3;
103 
105  const uint8_t U = 1;
106  const uint8_t TF = 2;
107  const uint8_t AUX = 3;
108  const uint8_t SLEEP = 4;
109  const uint8_t FLASH = 5;
110 
112  const uint8_t VOL_ADJUST = 0x10;
113 
115  const uint8_t STOP_REPEAT = 0;
116  const uint8_t START_REPEAT = 1;
117 }
118 
119 
120 
121 
122 /**************************************************************************/
126 /**************************************************************************/
128 {
129 public:
130  Stream* _serial;
131 
133  struct stack {
134  uint8_t start_byte;
135  uint8_t version;
136  uint8_t length;
137  uint8_t commandValue;
138  uint8_t feedbackValue;
139  uint8_t paramMSB;
140  uint8_t paramLSB;
141  uint8_t checksumMSB;
142  uint8_t checksumLSB;
143  uint8_t end_byte;
144  } sendStack, recStack;
145 
146  bool _debug;
147 
148 
149 
150 
151  bool begin(Stream& stream, bool debug=false, unsigned long threshold=100);
152 
153  void playNext();
154  void playPrevious();
155  void play(uint16_t trackNum);
156  void stop();
157  void playFromMP3Folder(uint16_t trackNum);
158  void playAdvertisement(uint16_t trackNum);
159  void stopAdvertisement();
160  void incVolume();
161  void decVolume();
162  void volume(uint8_t volume);
163  void EQSelect(uint8_t setting);
164  void loop(uint16_t trackNum);
165  void playbackSource(uint8_t source);
166  void standbyMode();
167  void normalMode();
168  void reset();
169  void resume();
170  void pause();
171  void playFolder(uint8_t folderNum, uint8_t trackNum);
172  void volumeAdjustSet(uint8_t gain);
173  void startRepeatPlay();
174  void stopRepeatPlay();
175  void repeatFolder(uint16_t folder);
176  void randomAll();
177  void startRepeat();
178  void stopRepeat();
179  void startDAC();
180  void stopDAC();
181  void sleep();
182  void wakeUp();
183 
184  bool isPlaying();
185  int16_t currentVolume();
186  int16_t currentEQ();
187  int16_t currentMode();
188  int16_t currentVersion();
189  int16_t numUsbTracks();
190  int16_t numSdTracks();
191  int16_t numFlashTracks();
192  int16_t currentUsbTrack();
193  int16_t currentSdTrack();
194  int16_t currentFlashTrack();
195  int16_t numTracksInFolder(uint8_t folder);
196  int16_t numFolders();
197 
198  void setTimeout(unsigned long threshold);
199  void findChecksum(stack *_stack);
200  void sendData();
201  void flush();
202  int16_t query(uint8_t cmd, uint8_t msb=0, uint8_t lsb=0);
203  bool parseFeedback();
204 
205  void printStack(stack _stack);
206 
207 
208 
209 
210 private:
211  FireTimer timoutTimer;
212  unsigned long _threshold;
213 
215  enum fsm {
216  find_start_byte,
217  find_ver_byte,
218  find_len_byte,
219  find_command_byte,
220  find_feedback_byte,
221  find_param_MSB,
222  find_param_LSB,
223  find_checksum_MSB,
224  find_checksum_LSB,
225  find_end_byte
226  };
227  fsm state = find_start_byte;
228 };
int16_t currentSdTrack()
Determine the current track played via SD card.
Definition: DFPlayerMini_Fast.cpp:811
void playFromMP3Folder(uint16_t trackNum)
Play a specific track in the folder named "MP3".
Definition: DFPlayerMini_Fast.cpp:165
void pause()
Pause playing current track.
Definition: DFPlayerMini_Fast.cpp:431
bool begin(Stream &stream, bool debug=false, unsigned long threshold=100)
Configure the class.
Definition: DFPlayerMini_Fast.cpp:55
int16_t numUsbTracks()
Determine the number of tracks accessible via USB.
Definition: DFPlayerMini_Fast.cpp:755
const uint8_t U
Definition: DFPlayerMini_Fast.h:105
void stopRepeat()
Stop repeat play of the current track.
Definition: DFPlayerMini_Fast.cpp:594
void repeatFolder(uint16_t folder)
Play all tracks in a given folder.
Definition: DFPlayerMini_Fast.cpp:537
int16_t currentFlashTrack()
Determine the current track played via flash.
Definition: DFPlayerMini_Fast.cpp:825
int16_t numSdTracks()
Determine the number of tracks accessible via SD card.
Definition: DFPlayerMini_Fast.cpp:769
int16_t numFlashTracks()
Determine the number of tracks accessible via flash.
Definition: DFPlayerMini_Fast.cpp:783
const uint8_t VOL_ADJUST
Definition: DFPlayerMini_Fast.h:112
Namespace for constants.
Definition: DFPlayerMini_Fast.h:32
void startRepeat()
Repeat the current track.
Definition: DFPlayerMini_Fast.cpp:575
int16_t numFolders()
Determine the number of folders available.
Definition: DFPlayerMini_Fast.cpp:855
void EQSelect(uint8_t setting)
Set the EQ mode.
Definition: DFPlayerMini_Fast.cpp:288
void play(uint16_t trackNum)
Play a specific track.
Definition: DFPlayerMini_Fast.cpp:125
int16_t currentVersion()
Determine the current firmware version.
Definition: DFPlayerMini_Fast.cpp:741
const uint8_t REPEAT
Definition: DFPlayerMini_Fast.h:99
void wakeUp()
Pull the MP3 player out of sleep mode.
Definition: DFPlayerMini_Fast.cpp:664
void playNext()
Play the next song in chronological order.
Definition: DFPlayerMini_Fast.cpp:85
void decVolume()
Decrement the volume by 1 out of 30.
Definition: DFPlayerMini_Fast.cpp:243
const uint8_t EQ_NORMAL
Definition: DFPlayerMini_Fast.h:91
void resume()
Resume playing current track.
Definition: DFPlayerMini_Fast.cpp:412
void setTimeout(unsigned long threshold)
Set the timout value for MP3 player query responses.
Definition: DFPlayerMini_Fast.cpp:871
void playPrevious()
Play the previous song in chronological order.
Definition: DFPlayerMini_Fast.cpp:104
void stop()
Stop the current playback.
Definition: DFPlayerMini_Fast.cpp:144
void volumeAdjustSet(uint8_t gain)
Specify volume gain.
Definition: DFPlayerMini_Fast.cpp:475
Definition: DFPlayerMini_Fast.h:133
void playAdvertisement(uint16_t trackNum)
Interrupt the current track with a new track.
Definition: DFPlayerMini_Fast.cpp:186
int16_t currentEQ()
Determine the current EQ setting.
Definition: DFPlayerMini_Fast.cpp:713
void sleep()
Put the MP3 player into sleep mode.
Definition: DFPlayerMini_Fast.cpp:651
void flush()
Clear out the serial input buffer connected to the MP3 player.
Definition: DFPlayerMini_Fast.cpp:933
int16_t currentMode()
Determine the current mode.
Definition: DFPlayerMini_Fast.cpp:727
const uint8_t NEXT
Definition: DFPlayerMini_Fast.h:44
int16_t numTracksInFolder(uint8_t folder)
Determine the number of tracks in the specified folder.
Definition: DFPlayerMini_Fast.cpp:841
void incVolume()
Increment the volume by 1 out of 30.
Definition: DFPlayerMini_Fast.cpp:224
void stopRepeatPlay()
Stop repeat play.
Definition: DFPlayerMini_Fast.cpp:516
Class for interacting with DFPlayerMini MP3 player.
Definition: DFPlayerMini_Fast.h:127
bool isPlaying()
Determine if a track is currently playing.
Definition: DFPlayerMini_Fast.cpp:680
void stopDAC()
Turn off DAC.
Definition: DFPlayerMini_Fast.cpp:632
void volume(uint8_t volume)
Set the volume to a specific value out of 30.
Definition: DFPlayerMini_Fast.cpp:264
void printStack(stack _stack)
Print the entire contents of the specified config/command packet for debugging purposes.
Definition: DFPlayerMini_Fast.cpp:1164
void normalMode()
Pull the MP3 player out of standby mode.
Definition: DFPlayerMini_Fast.cpp:374
int16_t currentVolume()
Determine the current volume setting.
Definition: DFPlayerMini_Fast.cpp:699
void reset()
Reset all settings to factory default.
Definition: DFPlayerMini_Fast.cpp:393
const uint8_t STACK_SIZE
Definition: DFPlayerMini_Fast.h:35
int16_t query(uint8_t cmd, uint8_t msb=0, uint8_t lsb=0)
Query the MP3 player for specific information.
Definition: DFPlayerMini_Fast.cpp:954
void loop(uint16_t trackNum)
Loop a specific track.
Definition: DFPlayerMini_Fast.cpp:312
void randomAll()
Play all tracks in a random order.
Definition: DFPlayerMini_Fast.cpp:556
void findChecksum(stack *_stack)
Determine and insert the checksum of a given config/command packet into that same packet struct.
Definition: DFPlayerMini_Fast.cpp:888
void stopAdvertisement()
Stop the interrupting track.
Definition: DFPlayerMini_Fast.cpp:205
void startRepeatPlay()
Play all tracks.
Definition: DFPlayerMini_Fast.cpp:497
void standbyMode()
Put the MP3 player in standby mode (this is NOT sleep mode).
Definition: DFPlayerMini_Fast.cpp:355
void sendData()
Send a config/command packet to the MP3 player.
Definition: DFPlayerMini_Fast.cpp:904
void startDAC()
Turn on DAC.
Definition: DFPlayerMini_Fast.cpp:613
const uint8_t SEND_INIT
Definition: DFPlayerMini_Fast.h:72
void playbackSource(uint8_t source)
Specify the playback source.
Definition: DFPlayerMini_Fast.cpp:333
void playFolder(uint8_t folderNum, uint8_t trackNum)
Play a specific track from a specific folder.
Definition: DFPlayerMini_Fast.cpp:454
int16_t currentUsbTrack()
Determine the current track played via USB.
Definition: DFPlayerMini_Fast.cpp:797
const uint8_t STOP_REPEAT
Definition: DFPlayerMini_Fast.h:115
bool parseFeedback()
Parse MP3 player query responses.
Definition: DFPlayerMini_Fast.cpp:983