17 Commits
1.0.1 ... 1.0.4

Author SHA1 Message Date
jimaobian
90a7483779 update Case 2018-08-27 19:36:30 +08:00
jimaobian
00b6a67814 update Case 2018-08-27 19:36:13 +08:00
jimaobian
c286f98d6d update library.properties 2018-08-15 13:46:08 +08:00
jimaobian
8b4ba4f7d8 update to 1.0.3
* Fix the bug that read cannot get the right result.
* Add USB support
* Add more example.
2018-08-15 13:44:47 +08:00
jimaobian
c295afa686 Update the comments 2018-04-02 11:18:17 +08:00
jimaobian
3613f54569 update the data sheet 2017-12-27 15:41:22 +08:00
jimaobian
beeba2c69d Update 2017-11-20 13:53:10 +08:00
jimaobian
cfb9428978 Merge pull request #6 from jandelgado/add_travis_ci_support
added support for travis ci
2017-11-20 13:46:35 +08:00
jimaobian
c36911d7b3 Merge pull request #5 from jandelgado/make_call_to_init_optional
Made the call to init() in DFRobotDFPlayerMini::begin() optional.
2017-11-20 13:39:01 +08:00
jimaobian
0cf620c20d Merge pull request #4 from jandelgado/adding_missing_return_statements
added missing "return" statements
2017-11-20 13:35:52 +08:00
Jan Delgado
7b5087e1af added support for travis ci 2017-06-13 20:01:49 +02:00
Jan Delgado
c0bd68111b added missing "return" statements 2017-06-13 19:08:52 +02:00
Jan Delgado
20343d62ed Made the call to init() in DFRobotDFPlayerMini::begin() optional.
Ratio: calling init() after the module is initially powered on is not necessary
and leads a) to an additional startup latency and b) (more annoying) to a loud
"plop" sound on the speaker output of the DFPlayerMini module.

By adding an optional parameter doReset to the begin() method, the user can now
decide, if the reset should be peformed.  Default is true, which is same
behaviour as now (i.e. perform reset()).
2017-06-13 19:05:51 +02:00
Angelo
31d5ec18d6 Fix compatible problem on nodeMCU (ESP8266)
add delay(0) to reset the soft wdt
2017-03-08 19:27:55 +08:00
jimaobian
6f4f402c71 Merge pull request #3 from redPanther/master
add function for query folder count + added datasheet
2017-03-08 17:34:23 +08:00
redpanther
c9f758979b add docs 2017-02-23 09:19:18 +01:00
redpanther
6111ae2018 add function to count folders on current device 2017-02-23 09:17:45 +01:00
11 changed files with 679 additions and 49 deletions

17
.travis.yml Normal file
View File

@@ -0,0 +1,17 @@
language: python
python:
- "2.7"
env:
- BOARD=uno
- BOARD=leonardo
- BOARD=esp01
install:
- python -c "$(curl -fsSL https://raw.githubusercontent.com/platformio/platformio/master/scripts/get-platformio.py)"
script:
- cd examples/FullFunction
- platformio ci -l ../.. FullFunction.ino --board=$BOARD
- cd ../GetStarted
- platformio ci -l ../.. getStarted.ino --board=$BOARD

View File

@@ -7,7 +7,7 @@
* @copyright GNU Lesser General Public License * @copyright GNU Lesser General Public License
* *
* @author [Angelo](Angelo.qiao@dfrobot.com) * @author [Angelo](Angelo.qiao@dfrobot.com)
* @version V1.0 * @version V1.0.3
* @date 2016-12-07 * @date 2016-12-07
*/ */
@@ -31,14 +31,12 @@ uint16_t DFRobotDFPlayerMini::calculateCheckSum(uint8_t *buffer){
} }
void DFRobotDFPlayerMini::sendStack(){ void DFRobotDFPlayerMini::sendStack(){
if (_sending[Stack_ACK]) { if (_sending[Stack_ACK]) { //if the ack mode is on wait until the last transmition
while (_isSending) { while (_isSending) {
delay(0);
available(); available();
} }
} }
else{
delay(10);
}
#ifdef _DEBUG #ifdef _DEBUG
Serial.println(); Serial.println();
@@ -52,6 +50,10 @@ void DFRobotDFPlayerMini::sendStack(){
_serial->write(_sending, DFPLAYER_SEND_LENGTH); _serial->write(_sending, DFPLAYER_SEND_LENGTH);
_timeOutTimer = millis(); _timeOutTimer = millis();
_isSending = _sending[Stack_ACK]; _isSending = _sending[Stack_ACK];
if (!_sending[Stack_ACK]) { //if the ack mode is off wait 10 ms after one transmition.
delay(10);
}
} }
void DFRobotDFPlayerMini::sendStack(uint8_t command){ void DFRobotDFPlayerMini::sendStack(uint8_t command){
@@ -79,13 +81,23 @@ void DFRobotDFPlayerMini::disableACK(){
_sending[Stack_ACK] = 0x00; _sending[Stack_ACK] = 0x00;
} }
bool DFRobotDFPlayerMini::waitAvailable(){ bool DFRobotDFPlayerMini::waitAvailable(unsigned long duration){
_isSending = true; unsigned long timer = millis();
while (!available()); if (!duration) {
return _handleType != TimeOut; duration = _timeOutDuration;
}
while (!available()){
if (millis() - timer > duration) {
return false;
}
delay(0);
}
return true;
} }
bool DFRobotDFPlayerMini::begin(Stream &stream, bool isACK){ bool DFRobotDFPlayerMini::begin(Stream &stream, bool isACK, bool doReset){
_serial = &stream;
if (isACK) { if (isACK) {
enableACK(); enableACK();
} }
@@ -93,13 +105,17 @@ bool DFRobotDFPlayerMini::begin(Stream &stream, bool isACK){
disableACK(); disableACK();
} }
_serial = &stream; if (doReset) {
_timeOutDuration += 3000; reset();
reset(); waitAvailable(2000);
waitAvailable(); delay(200);
_timeOutDuration -= 3000; }
delay(200); else {
return (readType() == DFPlayerCardOnline) || !isACK; // assume same state as with reset(): online
_handleType = DFPlayerCardOnline;
}
return (readType() == DFPlayerCardOnline) || (readType() == DFPlayerUSBOnline) || !isACK;
} }
uint8_t DFRobotDFPlayerMini::readType(){ uint8_t DFRobotDFPlayerMini::readType(){
@@ -123,6 +139,7 @@ bool DFRobotDFPlayerMini::handleMessage(uint8_t type, uint16_t parameter){
bool DFRobotDFPlayerMini::handleError(uint8_t type, uint16_t parameter){ bool DFRobotDFPlayerMini::handleError(uint8_t type, uint16_t parameter){
handleMessage(type, parameter); handleMessage(type, parameter);
_isSending = false; _isSending = false;
return false;
} }
uint8_t DFRobotDFPlayerMini::readCommand(){ uint8_t DFRobotDFPlayerMini::readCommand(){
@@ -131,7 +148,13 @@ uint8_t DFRobotDFPlayerMini::readCommand(){
} }
void DFRobotDFPlayerMini::parseStack(){ void DFRobotDFPlayerMini::parseStack(){
_handleCommand = *(_received + Stack_Command); uint8_t handleCommand = *(_received + Stack_Command);
if (handleCommand == 0x41) { //handle the 0x41 ack feedback as a spcecial case, in case the pollusion of _handleCommand, _handleParameter, and _handleType.
_isSending = false;
return;
}
_handleCommand = handleCommand;
_handleParameter = arrayToUint16(_received + Stack_Parameter); _handleParameter = arrayToUint16(_received + Stack_Parameter);
switch (_handleCommand) { switch (_handleCommand) {
@@ -139,26 +162,35 @@ void DFRobotDFPlayerMini::parseStack(){
handleMessage(DFPlayerPlayFinished, _handleParameter); handleMessage(DFPlayerPlayFinished, _handleParameter);
break; break;
case 0x3F: case 0x3F:
if (_handleParameter & 0x02) { if (_handleParameter & 0x01) {
handleMessage(DFPlayerUSBOnline, _handleParameter);
}
else if (_handleParameter & 0x02) {
handleMessage(DFPlayerCardOnline, _handleParameter); handleMessage(DFPlayerCardOnline, _handleParameter);
} }
else if (_handleParameter & 0x03) {
handleMessage(DFPlayerCardUSBOnline, _handleParameter);
}
break; break;
case 0x3A: case 0x3A:
if (_handleParameter & 0x02) { if (_handleParameter & 0x01) {
handleMessage(DFPlayerUSBInserted, _handleParameter);
}
else if (_handleParameter & 0x02) {
handleMessage(DFPlayerCardInserted, _handleParameter); handleMessage(DFPlayerCardInserted, _handleParameter);
} }
break; break;
case 0x3B: case 0x3B:
if (_handleParameter & 0x02) { if (_handleParameter & 0x01) {
handleMessage(DFPlayerUSBRemoved, _handleParameter);
}
else if (_handleParameter & 0x02) {
handleMessage(DFPlayerCardRemoved, _handleParameter); handleMessage(DFPlayerCardRemoved, _handleParameter);
} }
break; break;
case 0x40: case 0x40:
handleMessage(DFPlayerError, _handleParameter); handleMessage(DFPlayerError, _handleParameter);
break; break;
case 0x41:
_isSending = false;
break;
case 0x3C: case 0x3C:
case 0x3E: case 0x3E:
case 0x42: case 0x42:
@@ -174,7 +206,7 @@ void DFRobotDFPlayerMini::parseStack(){
case 0x4D: case 0x4D:
case 0x4E: case 0x4E:
case 0x4F: case 0x4F:
_isAvailable = true; handleMessage(DFPlayerFeedBack, _handleParameter);
break; break;
default: default:
handleError(WrongStack); handleError(WrongStack);
@@ -195,6 +227,7 @@ bool DFRobotDFPlayerMini::validateStack(){
bool DFRobotDFPlayerMini::available(){ bool DFRobotDFPlayerMini::available(){
while (_serial->available()) { while (_serial->available()) {
delay(0);
if (_receivedIndex == 0) { if (_receivedIndex == 0) {
_received[Stack_Header] = _serial->read(); _received[Stack_Header] = _serial->read();
#ifdef _DEBUG #ifdef _DEBUG
@@ -203,7 +236,6 @@ bool DFRobotDFPlayerMini::available(){
Serial.print(F(" ")); Serial.print(F(" "));
#endif #endif
if (_received[Stack_Header] == 0x7E) { if (_received[Stack_Header] == 0x7E) {
_isAvailable = false;
_receivedIndex ++; _receivedIndex ++;
} }
} }
@@ -235,9 +267,6 @@ bool DFRobotDFPlayerMini::available(){
if (validateStack()) { if (validateStack()) {
_receivedIndex = 0; _receivedIndex = 0;
parseStack(); parseStack();
if (_isAvailable && !_sending[Stack_ACK]) {
_isSending = false;
}
return _isAvailable; return _isAvailable;
} }
else{ else{
@@ -375,7 +404,12 @@ void DFRobotDFPlayerMini::disableDAC(){
int DFRobotDFPlayerMini::readState(){ int DFRobotDFPlayerMini::readState(){
sendStack(0x42); sendStack(0x42);
if (waitAvailable()) { if (waitAvailable()) {
return read(); if (readType() == DFPlayerFeedBack) {
return read();
}
else{
return -1;
}
} }
else{ else{
return -1; return -1;
@@ -392,11 +426,15 @@ int DFRobotDFPlayerMini::readVolume(){
} }
} }
uint8_t DFRobotDFPlayerMini::readEQ(){ int DFRobotDFPlayerMini::readEQ(){
sendStack(0x44); sendStack(0x44);
while (!available());
if (waitAvailable()) { if (waitAvailable()) {
return read(); if (readType() == DFPlayerFeedBack) {
return read();
}
else{
return -1;
}
} }
else{ else{
return -1; return -1;
@@ -419,7 +457,12 @@ int DFRobotDFPlayerMini::readFileCounts(uint8_t device){
} }
if (waitAvailable()) { if (waitAvailable()) {
return read(); if (readType() == DFPlayerFeedBack) {
return read();
}
else{
return -1;
}
} }
else{ else{
return -1; return -1;
@@ -441,7 +484,12 @@ int DFRobotDFPlayerMini::readCurrentFileNumber(uint8_t device){
break; break;
} }
if (waitAvailable()) { if (waitAvailable()) {
return read(); if (readType() == DFPlayerFeedBack) {
return read();
}
else{
return -1;
}
} }
else{ else{
return -1; return -1;
@@ -451,7 +499,27 @@ int DFRobotDFPlayerMini::readCurrentFileNumber(uint8_t device){
int DFRobotDFPlayerMini::readFileCountsInFolder(int folderNumber){ int DFRobotDFPlayerMini::readFileCountsInFolder(int folderNumber){
sendStack(0x4E, folderNumber); sendStack(0x4E, folderNumber);
if (waitAvailable()) { if (waitAvailable()) {
return read(); if (readType() == DFPlayerFeedBack) {
return read();
}
else{
return -1;
}
}
else{
return -1;
}
}
int DFRobotDFPlayerMini::readFolderCounts(){
sendStack(0x4F);
if (waitAvailable()) {
if (readType() == DFPlayerFeedBack) {
return read();
}
else{
return -1;
}
} }
else{ else{
return -1; return -1;
@@ -459,11 +527,11 @@ int DFRobotDFPlayerMini::readFileCountsInFolder(int folderNumber){
} }
int DFRobotDFPlayerMini::readFileCounts(){ int DFRobotDFPlayerMini::readFileCounts(){
readFileCounts(DFPLAYER_DEVICE_SD); return readFileCounts(DFPLAYER_DEVICE_SD);
} }
int DFRobotDFPlayerMini::readCurrentFileNumber(){ int DFRobotDFPlayerMini::readCurrentFileNumber(){
readCurrentFileNumber(DFPLAYER_DEVICE_SD); return readCurrentFileNumber(DFPLAYER_DEVICE_SD);
} }

View File

@@ -7,7 +7,7 @@
* @copyright GNU Lesser General Public License * @copyright GNU Lesser General Public License
* *
* @author [Angelo](Angelo.qiao@dfrobot.com) * @author [Angelo](Angelo.qiao@dfrobot.com)
* @version V1.0 * @version V1.0.3
* @date 2016-12-07 * @date 2016-12-07
*/ */
@@ -42,6 +42,11 @@
#define DFPlayerCardOnline 4 #define DFPlayerCardOnline 4
#define DFPlayerPlayFinished 5 #define DFPlayerPlayFinished 5
#define DFPlayerError 6 #define DFPlayerError 6
#define DFPlayerUSBInserted 7
#define DFPlayerUSBRemoved 8
#define DFPlayerUSBOnline 9
#define DFPlayerCardUSBOnline 10
#define DFPlayerFeedBack 11
#define Busy 1 #define Busy 1
#define Sleeping 2 #define Sleeping 2
@@ -105,9 +110,9 @@ class DFRobotDFPlayerMini {
uint8_t readCommand(); uint8_t readCommand();
bool begin(Stream& stream, bool isACK = true); bool begin(Stream& stream, bool isACK = true, bool doReset = true);
bool waitAvailable(); bool waitAvailable(unsigned long duration = 0);
bool available(); bool available();
@@ -177,7 +182,7 @@ class DFRobotDFPlayerMini {
int readVolume(); int readVolume();
uint8_t readEQ(); int readEQ();
int readFileCounts(uint8_t device); int readFileCounts(uint8_t device);
@@ -186,6 +191,8 @@ class DFRobotDFPlayerMini {
int readFileCountsInFolder(int folderNumber); int readFileCountsInFolder(int folderNumber);
int readFileCounts(); int readFileCounts();
int readFolderCounts();
int readCurrentFileNumber(); int readCurrentFileNumber();

Binary file not shown.

View File

@@ -0,0 +1,126 @@
/***************************************************
DFPlayer - A Mini MP3 Player For Arduino
<https://www.dfrobot.com/product-1121.html>
***************************************************
This example shows the basic function of library for DFPlayer.
Created 2016-12-07
By [Angelo qiao](Angelo.qiao@dfrobot.com)
GNU Lesser General Public License.
See <http://www.gnu.org/licenses/> for details.
All above must be included in any redistribution
****************************************************/
/***********Notice and Trouble shooting***************
1.Connection and Diagram can be found here
<https://www.dfrobot.com/wiki/index.php/DFPlayer_Mini_SKU:DFR0299#Connection_Diagram>
2.This code is tested on Arduino Uno, Leonardo, Mega boards.
****************************************************/
#include "Arduino.h"
#include "DFRobotDFPlayerMini.h"
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);
void setup()
{
Serial1.begin(9600);
Serial.begin(115200);
Serial.println();
Serial.println(F("DFRobot DFPlayer Mini Demo"));
Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));
if (!myDFPlayer.begin(Serial1)) { //Use softwareSerial to communicate with mp3.
Serial.println(F("Unable to begin:"));
Serial.println(F("1.Please recheck the connection!"));
Serial.println(F("2.Please insert the SD card!"));
while(true){
delay(0); // Code to compatible with ESP8266 watch dog.
}
}
Serial.println(F("DFPlayer Mini online."));
myDFPlayer.volume(10); //Set volume value. From 0 to 30
myDFPlayer.play(1); //Play the first mp3
}
void loop()
{
static unsigned long timer = millis();
if (millis() - timer > 3000) {
timer = millis();
myDFPlayer.next(); //Play next mp3 every 3 second.
}
if (myDFPlayer.available()) {
printDetail(myDFPlayer.readType(), myDFPlayer.read()); //Print the detail message from DFPlayer to handle different errors and states.
}
}
void printDetail(uint8_t type, int value){
switch (type) {
case TimeOut:
Serial.println(F("Time Out!"));
break;
case WrongStack:
Serial.println(F("Stack Wrong!"));
break;
case DFPlayerCardInserted:
Serial.println(F("Card Inserted!"));
break;
case DFPlayerCardRemoved:
Serial.println(F("Card Removed!"));
break;
case DFPlayerCardOnline:
Serial.println(F("Card Online!"));
break;
case DFPlayerUSBInserted:
Serial.println("USB Inserted!");
break;
case DFPlayerUSBRemoved:
Serial.println("USB Removed!");
break;
case DFPlayerPlayFinished:
Serial.print(F("Number:"));
Serial.print(value);
Serial.println(F(" Play Finished!"));
break;
case DFPlayerError:
Serial.print(F("DFPlayerError:"));
switch (value) {
case Busy:
Serial.println(F("Card not found"));
break;
case Sleeping:
Serial.println(F("Sleeping"));
break;
case SerialWrongStack:
Serial.println(F("Get Wrong Stack"));
break;
case CheckSumNotMatch:
Serial.println(F("Check Sum Not Match"));
break;
case FileIndexOut:
Serial.println(F("File Index Out of Bound"));
break;
case FileMismatch:
Serial.println(F("Cannot Find File"));
break;
case Advertise:
Serial.println(F("In Advertise"));
break;
default:
break;
}
break;
default:
break;
}
}

View File

@@ -0,0 +1,128 @@
/***************************************************
DFPlayer - A Mini MP3 Player For Arduino
<https://www.dfrobot.com/product-1121.html>
***************************************************
This example shows the basic function of library for DFPlayer.
Created 2016-12-07
By [Angelo qiao](Angelo.qiao@dfrobot.com)
GNU Lesser General Public License.
See <http://www.gnu.org/licenses/> for details.
All above must be included in any redistribution
****************************************************/
/***********Notice and Trouble shooting***************
1.Connection and Diagram can be found here
<https://www.dfrobot.com/wiki/index.php/DFPlayer_Mini_SKU:DFR0299#Connection_Diagram>
2.This code is tested on Arduino Uno, Leonardo, Mega boards.
****************************************************/
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);
void setup()
{
mySoftwareSerial.begin(9600);
Serial.begin(115200);
Serial.println();
Serial.println(F("DFRobot DFPlayer Mini Demo"));
Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));
if (!myDFPlayer.begin(mySoftwareSerial, false)) { //Use softwareSerial to communicate with mp3.
Serial.println(F("Unable to begin:"));
Serial.println(F("1.Please recheck the connection!"));
Serial.println(F("2.Please insert the SD card!"));
while(true){
delay(0); // Code to compatible with ESP8266 watch dog.
}
}
Serial.println(F("DFPlayer Mini online."));
myDFPlayer.volume(10); //Set volume value. From 0 to 30
myDFPlayer.play(1); //Play the first mp3
}
void loop()
{
static unsigned long timer = millis();
if (millis() - timer > 3000) {
timer = millis();
myDFPlayer.next(); //Play next mp3 every 3 second.
}
if (myDFPlayer.available()) {
printDetail(myDFPlayer.readType(), myDFPlayer.read()); //Print the detail message from DFPlayer to handle different errors and states.
}
}
void printDetail(uint8_t type, int value){
switch (type) {
case TimeOut:
Serial.println(F("Time Out!"));
break;
case WrongStack:
Serial.println(F("Stack Wrong!"));
break;
case DFPlayerCardInserted:
Serial.println(F("Card Inserted!"));
break;
case DFPlayerCardRemoved:
Serial.println(F("Card Removed!"));
break;
case DFPlayerCardOnline:
Serial.println(F("Card Online!"));
break;
case DFPlayerUSBInserted:
Serial.println("USB Inserted!");
break;
case DFPlayerUSBRemoved:
Serial.println("USB Removed!");
break;
case DFPlayerPlayFinished:
Serial.print(F("Number:"));
Serial.print(value);
Serial.println(F(" Play Finished!"));
break;
case DFPlayerError:
Serial.print(F("DFPlayerError:"));
switch (value) {
case Busy:
Serial.println(F("Card not found"));
break;
case Sleeping:
Serial.println(F("Sleeping"));
break;
case SerialWrongStack:
Serial.println(F("Get Wrong Stack"));
break;
case CheckSumNotMatch:
Serial.println(F("Check Sum Not Match"));
break;
case FileIndexOut:
Serial.println(F("File Index Out of Bound"));
break;
case FileMismatch:
Serial.println(F("Cannot Find File"));
break;
case Advertise:
Serial.println(F("In Advertise"));
break;
default:
break;
}
break;
default:
break;
}
}

View File

@@ -0,0 +1,128 @@
/***************************************************
DFPlayer - A Mini MP3 Player For Arduino
<https://www.dfrobot.com/product-1121.html>
***************************************************
This example shows the basic function of library for DFPlayer.
Created 2016-12-07
By [Angelo qiao](Angelo.qiao@dfrobot.com)
GNU Lesser General Public License.
See <http://www.gnu.org/licenses/> for details.
All above must be included in any redistribution
****************************************************/
/***********Notice and Trouble shooting***************
1.Connection and Diagram can be found here
<https://www.dfrobot.com/wiki/index.php/DFPlayer_Mini_SKU:DFR0299#Connection_Diagram>
2.This code is tested on Arduino Uno, Leonardo, Mega boards.
****************************************************/
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);
void setup()
{
mySoftwareSerial.begin(9600);
Serial.begin(115200);
Serial.println();
Serial.println(F("DFRobot DFPlayer Mini Demo"));
Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));
if (!myDFPlayer.begin(mySoftwareSerial, true, false)) { //Use softwareSerial to communicate with mp3.
Serial.println(F("Unable to begin:"));
Serial.println(F("1.Please recheck the connection!"));
Serial.println(F("2.Please insert the SD card!"));
while(true){
delay(0); // Code to compatible with ESP8266 watch dog.
}
}
Serial.println(F("DFPlayer Mini online."));
myDFPlayer.volume(10); //Set volume value. From 0 to 30
myDFPlayer.play(1); //Play the first mp3
}
void loop()
{
static unsigned long timer = millis();
if (millis() - timer > 3000) {
timer = millis();
myDFPlayer.next(); //Play next mp3 every 3 second.
}
if (myDFPlayer.available()) {
printDetail(myDFPlayer.readType(), myDFPlayer.read()); //Print the detail message from DFPlayer to handle different errors and states.
}
}
void printDetail(uint8_t type, int value){
switch (type) {
case TimeOut:
Serial.println(F("Time Out!"));
break;
case WrongStack:
Serial.println(F("Stack Wrong!"));
break;
case DFPlayerCardInserted:
Serial.println(F("Card Inserted!"));
break;
case DFPlayerCardRemoved:
Serial.println(F("Card Removed!"));
break;
case DFPlayerCardOnline:
Serial.println(F("Card Online!"));
break;
case DFPlayerUSBInserted:
Serial.println("USB Inserted!");
break;
case DFPlayerUSBRemoved:
Serial.println("USB Removed!");
break;
case DFPlayerPlayFinished:
Serial.print(F("Number:"));
Serial.print(value);
Serial.println(F(" Play Finished!"));
break;
case DFPlayerError:
Serial.print(F("DFPlayerError:"));
switch (value) {
case Busy:
Serial.println(F("Card not found"));
break;
case Sleeping:
Serial.println(F("Sleeping"));
break;
case SerialWrongStack:
Serial.println(F("Get Wrong Stack"));
break;
case CheckSumNotMatch:
Serial.println(F("Check Sum Not Match"));
break;
case FileIndexOut:
Serial.println(F("File Index Out of Bound"));
break;
case FileMismatch:
Serial.println(F("Cannot Find File"));
break;
case Advertise:
Serial.println(F("In Advertise"));
break;
default:
break;
}
break;
default:
break;
}
}

View File

@@ -1,6 +1,6 @@
/*************************************************** /***************************************************
DFPlayer - A Mini MP3 Player For Arduino DFPlayer - A Mini MP3 Player For Arduino
<https://www.dfrobot.com/index.php?route=product/product&product_id=1121> <https://www.dfrobot.com/product-1121.html>
*************************************************** ***************************************************
This example shows the all the function of library for DFPlayer. This example shows the all the function of library for DFPlayer.
@@ -115,7 +115,7 @@ void setup()
Serial.println(myDFPlayer.readEQ()); //read EQ setting Serial.println(myDFPlayer.readEQ()); //read EQ setting
Serial.println(myDFPlayer.readFileCounts()); //read all file counts in SD card Serial.println(myDFPlayer.readFileCounts()); //read all file counts in SD card
Serial.println(myDFPlayer.readCurrentFileNumber()); //read current play file number Serial.println(myDFPlayer.readCurrentFileNumber()); //read current play file number
Serial.println(myDFPlayer.readFileCountsInFolder(3)); //read fill counts in folder SD:/03 Serial.println(myDFPlayer.readFileCountsInFolder(3)); //read file counts in folder SD:/03
} }
void loop() void loop()
@@ -149,6 +149,12 @@ void printDetail(uint8_t type, int value){
case DFPlayerCardOnline: case DFPlayerCardOnline:
Serial.println(F("Card Online!")); Serial.println(F("Card Online!"));
break; break;
case DFPlayerUSBInserted:
Serial.println("USB Inserted!");
break;
case DFPlayerUSBRemoved:
Serial.println("USB Removed!");
break;
case DFPlayerPlayFinished: case DFPlayerPlayFinished:
Serial.print(F("Number:")); Serial.print(F("Number:"));
Serial.print(value); Serial.print(value);
@@ -185,4 +191,6 @@ void printDetail(uint8_t type, int value){
default: default:
break; break;
} }
} }

View File

@@ -1,6 +1,6 @@
/*************************************************** /***************************************************
DFPlayer - A Mini MP3 Player For Arduino DFPlayer - A Mini MP3 Player For Arduino
<https://www.dfrobot.com/index.php?route=product/product&product_id=1121> <https://www.dfrobot.com/product-1121.html>
*************************************************** ***************************************************
This example shows the basic function of library for DFPlayer. This example shows the basic function of library for DFPlayer.
@@ -40,7 +40,9 @@ void setup()
Serial.println(F("Unable to begin:")); Serial.println(F("Unable to begin:"));
Serial.println(F("1.Please recheck the connection!")); Serial.println(F("1.Please recheck the connection!"));
Serial.println(F("2.Please insert the SD card!")); Serial.println(F("2.Please insert the SD card!"));
while(true); while(true){
delay(0); // Code to compatible with ESP8266 watch dog.
}
} }
Serial.println(F("DFPlayer Mini online.")); Serial.println(F("DFPlayer Mini online."));
@@ -79,6 +81,12 @@ void printDetail(uint8_t type, int value){
case DFPlayerCardOnline: case DFPlayerCardOnline:
Serial.println(F("Card Online!")); Serial.println(F("Card Online!"));
break; break;
case DFPlayerUSBInserted:
Serial.println("USB Inserted!");
break;
case DFPlayerUSBRemoved:
Serial.println("USB Removed!");
break;
case DFPlayerPlayFinished: case DFPlayerPlayFinished:
Serial.print(F("Number:")); Serial.print(F("Number:"));
Serial.print(value); Serial.print(value);
@@ -115,5 +123,5 @@ void printDetail(uint8_t type, int value){
default: default:
break; break;
} }
} }

View File

@@ -0,0 +1,140 @@
/***************************************************
DFPlayer - A Mini MP3 Player For Arduino
<https://www.dfrobot.com/product-1121.html>
***************************************************
This example shows the basic function of library for DFPlayer.
Created 2016-12-07
Modified 2018-08-15
By [Angelo qiao](Angelo.qiao@dfrobot.com)
GNU Lesser General Public License.
See <http://www.gnu.org/licenses/> for details.
All above must be included in any redistribution
****************************************************/
/***********Notice and Trouble shooting***************
1.Connection and Diagram can be found here
<https://www.dfrobot.com/wiki/index.php/DFPlayer_Mini_SKU:DFR0299#Connection_Diagram>
2.This code is tested on Arduino Uno, Leonardo, Mega boards.
****************************************************/
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);
void setup()
{
mySoftwareSerial.begin(9600);
Serial.begin(115200);
Serial.println();
Serial.println(F("DFRobot DFPlayer Mini Demo"));
Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));
if (!myDFPlayer.begin(mySoftwareSerial)) { //Use softwareSerial to communicate with mp3.
Serial.println(F("Unable to begin:"));
Serial.println(F("1.Please recheck the connection!"));
Serial.println(F("2.Please insert the SD card or USB drive!"));
while(true){
delay(0); // Code to compatible with ESP8266 watch dog.
}
}
Serial.println(F("DFPlayer Mini online."));
}
void loop()
{
static unsigned long timer = millis();
if (millis() - timer > 3000) {
timer = millis();
int value;
// value = myDFPlayer.readState(); //read mp3 state
// value = myDFPlayer.readVolume(); //read current volume
// value = myDFPlayer.readEQ(); //read EQ setting
// value = myDFPlayer.readFileCounts(); //read all file counts in SD card
// value = myDFPlayer.readCurrentFileNumber(); //read current play file number
value = myDFPlayer.readFileCountsInFolder(3); //read file counts in folder SD:/03
if (value == -1) { //Error while Reading.
printDetail(myDFPlayer.readType(), myDFPlayer.read());
}
else{ //Successfully get the result.
Serial.println(value);
}
}
if (myDFPlayer.available()) {
printDetail(myDFPlayer.readType(), myDFPlayer.read()); //Print the detail message from DFPlayer to handle different errors and states.
}
}
void printDetail(uint8_t type, int value){
switch (type) {
case TimeOut:
Serial.println(F("Time Out!"));
break;
case WrongStack:
Serial.println(F("Stack Wrong!"));
break;
case DFPlayerCardInserted:
Serial.println(F("Card Inserted!"));
break;
case DFPlayerCardRemoved:
Serial.println(F("Card Removed!"));
break;
case DFPlayerCardOnline:
Serial.println(F("Card Online!"));
break;
case DFPlayerUSBInserted:
Serial.println("USB Inserted!");
break;
case DFPlayerUSBRemoved:
Serial.println("USB Removed!");
break;
case DFPlayerPlayFinished:
Serial.print(F("Number:"));
Serial.print(value);
Serial.println(F(" Play Finished!"));
break;
case DFPlayerError:
Serial.print(F("DFPlayerError:"));
switch (value) {
case Busy:
Serial.println(F("Card not found"));
break;
case Sleeping:
Serial.println(F("Sleeping"));
break;
case SerialWrongStack:
Serial.println(F("Get Wrong Stack"));
break;
case CheckSumNotMatch:
Serial.println(F("Check Sum Not Match"));
break;
case FileIndexOut:
Serial.println(F("File Index Out of Bound"));
break;
case FileMismatch:
Serial.println(F("Cannot Find File"));
break;
case Advertise:
Serial.println(F("In Advertise"));
break;
default:
break;
}
break;
default:
break;
}
}

View File

@@ -1,9 +1,9 @@
name=DFRobotDFPlayerMini name=DFRobotDFPlayerMini
version=1.0.1 version=1.0.3
author=DFRobot author=DFRobot
maintainer=Angelo <angelo.qiao@dfrobot.com> maintainer=Angelo <angelo.qiao@dfrobot.com>
sentence=Driver for DFPlayer Mini from DFRobot sentence=Driver for DFPlayer Mini from DFRobot
paragraph=Easy-to-use and reliable library for DFPlayer Mini paragraph=Easy-to-use and reliable library for DFPlayer Mini
category=Sensors category=Device Control
url=https://github.com/DFRobot/DFRobotDFPlayerMini url=https://github.com/DFRobot/DFRobotDFPlayerMini
architectures=* architectures=*