Forum >DFPlayer mini MP3 Player - problem with specify File to Play.
DFPlayer mini MP3 Player - problem with specify File to Play.

Hello, I have got a problem during my project.
I am working with Arduino Uno.
In my project I am using 2 ultrasound sensors , DFPlayer mini MP3 Player and a speaker.
The idea is to play specified file, when the sensor can sense a length from the object in range (10-30 cm).
I think that I understood badly the Manual with the part explaining how to specify the file.
I have saved .mp3 files on microSD in folder "01" and they are named "001.mp3" and "002.mp3"
Also, I have a question is there any method to block the switching between .mp3 files by IO_1 and IO_2?
I want to use buttons only to regulate the volume of sound, but I do not want to switch between files from microSD.
I am putting the code below. I hope that somebody will help me.
I am working with Arduino Uno.
In my project I am using 2 ultrasound sensors , DFPlayer mini MP3 Player and a speaker.
The idea is to play specified file, when the sensor can sense a length from the object in range (10-30 cm).
I think that I understood badly the Manual with the part explaining how to specify the file.
I have saved .mp3 files on microSD in folder "01" and they are named "001.mp3" and "002.mp3"
Also, I have a question is there any method to block the switching between .mp3 files by IO_1 and IO_2?
I want to use buttons only to regulate the volume of sound, but I do not want to switch between files from microSD.
I am putting the code below. I hope that somebody will help me.
Code: Select all
#include "SoftwareSerial.h" SoftwareSerial mySerial(10, 11); # define Start_Byte 0x7E # define Version_Byte 0xFF # define Command_Length 0x06 # define End_Byte 0xEF # define Acknowledge 0x00 //Returns info with command 0x41 [0x01: info, 0x00: no info] # define ACTIVATED LOW boolean isPlaying = false; int Trig1 = 3; //pin 2 Arduino połączony z pinem Trigger czujnika int Echo1 = 2; //pin 3 Arduino połączony z pinem Echo czujnika int Trig2 = 5; int Echo2 = 4; int CM1; //odległość w cm long CZAS1; //długość powrotnego impulsu w uS int CM2; long CZAS2; void setup () { Serial.begin (9600); pinMode(Trig1, OUTPUT); //ustawienie pinu 2 w Arduino jako wyjście pinMode(Echo1, INPUT); //ustawienie pinu 3 w Arduino jako wejście pinMode(Trig2, OUTPUT); //ustawienie pinu 4 w Arduino jako wyjście pinMode(Echo2, INPUT); //ustawienie pinu 5 w Arduino jako wejście Serial.println("Test czujnika odleglosci"); } void loop () { pomiar_odleglosci1(); //pomiar odległości Serial.print("Odleglosc1: "); //wyświetlanie wyników na ekranie w pętli dfrobot 200 ms Serial.print(CM1); Serial.println(" cm"); delay(100); pomiar_odleglosci2(); Serial.print("Odleglosc2: "); //wyświetlanie wyników na ekranie w pętli dfrobot 200 ms Serial.print(CM2); Serial.println(" cm"); delay(100); } void pomiar_odleglosci1 () { digitalWrite(Trig1, LOW); //ustawienie stanu wysokiego na 2 uS - impuls inicjalizujacy - patrz dokumentacja delayMicroseconds(2); digitalWrite(Trig1, HIGH); //ustawienie stanu wysokiego na 10 uS - impuls inicjalizujacy - patrz dokumentacja delayMicroseconds(10); digitalWrite(Trig1, LOW); digitalWrite(Echo1, HIGH); CZAS1 = pulseIn(Echo1, HIGH); CM1 = CZAS1 / 58; //szerokość odbitego impulsu w uS podzielone przez 58 to odleglosc w cm - patrz dokumentacja } void pomiar_odleglosci2 () { digitalWrite(Trig2, LOW); //ustawienie stanu wysokiego na 2 uS - impuls inicjalizujacy - patrz dokumentacja delayMicroseconds(2); digitalWrite(Trig2, HIGH); //ustawienie stanu wysokiego na 10 uS - impuls inicjalizujacy - patrz dokumentacja delayMicroseconds(10); digitalWrite(Trig2, LOW); digitalWrite(Echo2, HIGH); CZAS2 = pulseIn(Echo2, HIGH); CM2 = CZAS2 / 58; //szerokość odbitego impulsu w uS podzielone przez 58 to odleglosc w cm - patrz dokumentacja } void playFront() { execute_CMD(0x3F,0,0); delay(500); setVolume(20); delay(500); isPlaying = true; } void pause() { execute_CMD(0x0E,0,0); delay(500); } void playBack() { execute_CMD(0x3F, 0, 1); delay(500); setVolume(20); delay(500); isPlaying = true; } void setVolume(int volume) { execute_CMD(0x06, 0, volume); // Set the volume (0x00~0x30) delay(500); } void execute_CMD(byte CMD, byte Par1, byte Par2) // Excecute the command and parameters { // Calculate the checksum (2 bytes) word checksum = -(Version_Byte + Command_Length + CMD + Acknowledge + Par1 + Par2); byte Command_line[10] = { Start_Byte, Version_Byte, Command_Length, CMD, Acknowledge, Par1, Par2// Build the command line , highByte(checksum), lowByte(checksum), End_Byte}; //Send the command line to the module for (byte k=0; k<10; k++) { mySerial.write( Command_line[k]); } if(CM1<30&&CM1>10) { playBack(); delay(100); } else { pause(); delay(100); } if(CM2<30&&CM2>10) { playFront(); delay(100); } else { pause(); delay(100); } }