Wpis z mikrobloga

Siema Mirki. Robię taki mały projekt na Arduino Nano i DFPlayer Mini. Program znalazłem na githubie i prawie wszystko działa. A konkretnie chodzi mi o odczyt ze zmiennej value = myDFPlayer.readFileCounts(). Potrzebuję informacji ile jest plików na karcie sd, żeby później zbudować menu na tej podstawie. Nie rozumiem dlaczego w monitorze portu szeregowego wyświetla się bez problemu nr odtwarzanego utworu a liczba wszystkich utworów już nie.


#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
#define ACTIVATED LOW

SoftwareSerial mySoftwareSerial(7, 6); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);

int buttonNext = 2;
//int buttonPause = 3;
int buttonPrevious = 4;
boolean isPlaying = false;

void setup()
{ pinMode(buttonNext, INPUT);
digitalWrite(buttonNext, HIGH);
pinMode(buttonPrevious, INPUT);
digitalWrite(buttonPrevious, HIGH);

mySoftwareSerial.begin(9600);
Serial.begin(9600);

Serial.println();
delay(500);
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."));

myDFPlayer.volume(20);
myDFPlayer.play(1);
isPlaying = true;
}

void loop()
{
if (digitalRead(buttonNext) == ACTIVATED)
{
if (isPlaying)
{
myDFPlayer.next();
Serial.println("play_next");
delay(500);
}
}

if (digitalRead(buttonPrevious) == ACTIVATED)
{
if (isPlaying)
{
myDFPlayer.previous();
Serial.println("play_previous");
delay(500);
}
}

static unsigned long timer = millis();

if (millis() - timer > 3000) {
timer = millis();

int value;

value = myDFPlayer.readFileCounts(); //read all file counts in SD card
//value = myDFPlayer.readState(); //read mp3 state
//value = myDFPlayer.readVolume(); //read current volume
//value = myDFPlayer.readEQ(); //read EQ setting
//value = myDFPlayer.readCurrentFileNumber(); //read current play file number
//value = myDFPlayer.readFileCountsInFolder(1); //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;
}

}


#arduino #programowanie
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach