Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdint.h"
- #include "SoftwareSerial.h"
- #include "DFRobotDFPlayerMini.h"
- #define interruptPin 2
- #define softSerialRx 10
- #define softSerialTx 11
- #define debounceDelayMillis 1000
- volatile uint32_t lastInterruptTime = 0;
- volatile bool interruptOccured = false;
- SoftwareSerial softSerial(softSerialRx, softSerialTx);
- DFRobotDFPlayerMini player;
- void setup() {
- softSerial.begin(9600);
- Serial.begin(115200);
- pinMode(interruptPin, INPUT_PULLUP);
- attachInterrupt(digitalPinToInterrupt(interruptPin), interruptHandler, FALLING);
- Serial.println(F("Initing player ..."));
- // `player.begin(stream)` returns true when module is initialized
- if (!player.begin(softSerial)) {
- Serial.println(F("... failed"));
- while(true) {
- // never leave this loop since initialization went wrong
- }
- }
- Serial.println(F("... ready."));
- // volume: 0 ... 30
- player.volume(30);
- // when using `player.readFileCounts()` player module does not respond to further commands
- // Serial.println(player.readFileCounts());
- }
- void loop() {
- // read status messages from DFPlayerMini on its software serial port when available
- if (player.available()) {
- printPlayerStatus(player.readType(), player.read());
- }
- if (interruptOccured) {
- Serial.println("Button pressed");
- player.next();
- interruptOccured = false;
- }
- }
- void interruptHandler() {
- uint32_t interruptTime = millis();
- if (interruptTime - lastInterruptTime > debounceDelayMillis) {
- interruptOccured = true;
- }
- lastInterruptTime = interruptTime;
- }
- void printPlayerStatus(uint8_t type, uint16_t 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 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;
- }
- }
Add Comment
Please, Sign In to add comment