Serial mp3 player yx5300

Hello I am trying to use a code that plays a mp3 file from a random list that i found which is working but would like to turn on the led on pin 13 when a file is playing and off when it is not and I'm not sure sure how to. This is going to be used for a halloween prop. Here's My Code any help appreciated.

#include <SoftwareSerial.h>

#define ARDUINO_RX 10  //should connect to TX of the Serial MP3 Player module
#define ARDUINO_TX 11  //connect to RX of the module

#define trigPin 13  //for the distance module
#define echoPin 12


////////////////////////////////////////////////////////////////////////////////////
//all the commands needed in the datasheet(http://geekmatic.in.ua/pdf/Catalex_MP3_board.pdf)

#define NEXT_SONG 0X01
#define PREV_SONG 0X02

#define CMD_PLAY_W_INDEX 0X03 //DATA IS REQUIRED (number of song)

#define VOLUME_UP_ONE 0X04
#define VOLUME_DOWN_ONE 0X05
#define CMD_SET_VOLUME 0X06//DATA IS REQUIRED (number of volume from 0 up to 30(0x1E))
#define SET_DAC 0X17
#define CMD_PLAY_WITHVOLUME 0X22 //data is needed  0x7E 06 22 00 xx yy EF;(xx volume)(yy number of song)

#define CMD_SEL_DEV 0X09 //SELECT STORAGE DEVICE, DATA IS REQUIRED
#define DEV_TF 0X02 //HELLO,IM THE DATA REQUIRED

#define SLEEP_MODE_START 0X0A
#define SLEEP_MODE_WAKEUP 0X0B

#define CMD_RESET 0X0C//CHIP RESET
#define CMD_PLAY 0X0D //RESUME PLAYBACK
#define CMD_PAUSE 0X0E //PLAYBACK IS PAUSED

#define CMD_PLAY_WITHFOLDER 0X0F//DATA IS NEEDED, 0x7E 06 0F 00 01 02 EF;(play the song with the directory \01\002xxxxxx.mp3

#define STOP_PLAY 0X16

#define PLAY_FOLDER 0X17// data is needed 0x7E 06 17 00 01 XX EF;(play the 01 folder)(value xx we dont care)

#define SET_CYCLEPLAY 0X19//data is needed 00 start; 01 close

#define SET_DAC 0X17//data is needed 00 start DAC OUTPUT;01 DAC no output
////////////////////////////////////////////////////////////////////////////////////
uint8_t Send_buf[8] = {0} ;//The MP3 player undestands orders in a 8 int string
//0X7E FF 06 command 00 00 00 EF;(if command =01 next song order)
SoftwareSerial mySerial(ARDUINO_RX, ARDUINO_TX);//init the serial protocol, tell to myserial wich pins are TX and RX
int x = 6;
int y = 10;

void setup() {
  Serial.begin(9600);  //Start our Serial coms for serial monitor in our pc
  mySerial.begin(9600);  //Start our Serial coms for THE MP3
  delay(500);  //Wait chip initialization is complete
  sendCommand(CMD_SEL_DEV, DEV_TF);  //select the TF card
  delay(200);  //wait for 200ms
 // pinMode(trigPin, OUTPUT);
  //pinMode(echoPin, INPUT);
  randomSeed(analogRead(A0));
  pinMode(x,INPUT_PULLUP);
  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
  pinMode(13,OUTPUT);
}

void loop() {
  //if (measureDistance(trigPin, echoPin) < 10) {
    
  if(digitalRead(x)==HIGH){
    delay(1000);
    int randTrackNo;
    randTrackNo = random(1, 6);
    sendCommand(0x03, randTrackNo);
    Serial.print("Playing track:");
    Serial.println(randTrackNo);
    delay(1000);  //wait to avoid errors
  }
  delay(300);
  
}

void sendCommand(int8_t command, int16_t dat) {
  delay(20);
  Send_buf[0] = 0x7e; //starting byte
  Send_buf[1] = 0xff; //version
  Send_buf[2] = 0x06; //the number of bytes of the command without starting byte and ending byte
  Send_buf[3] = command; //
  Send_buf[4] = 0x00;  //0x00 = no feedback, 0x01 = feedback
  Send_buf[5] = (int8_t)(dat >> 8);  //datah
  Send_buf[6] = (int8_t)(dat);  //datal
  Send_buf[7] = 0xef;  //ending byte
  for (uint8_t i = 0; i < 8; i++) {
    mySerial.write(Send_buf[i]) ;  //send bit to serial mp3
    Serial.print(Send_buf[i], HEX);  //send bit to serial monitor in pc
    Serial.print(" ");
     
  }
  Serial.println();
}

switch the LED on when you start your track.

switch the LED off, when you have received a character on Serial

I am really Bad at code and really don't know how to.

Then you should work with some examples from the Arduino IDE, mainly in the folders "basic" and "digital" and learn how to code.

This might help:

I'm not sure what the feed back is on serial for when a track is done playing i can get the led on by digitalWrite (High) if i put the code line in the loop, but my serial monitor only tells me when its playing. I don't know if theres a way to read RX when its receiving data or when its done receiving data the player

based on that example just check in loop if something is in:

```
  if (Serial.available() > 0) {
    // read the incoming byte:
    int incomingByte = Serial.read();

    // say what you got:
    Serial.print("I received: ");
    Serial.println(incomingByte, HEX);
    // and now switch off
   digitalWrite(whateverPin, LOW);
  }

You should read library documentation, I have a feeling it has functions for processing feedback like DFPlayer, if not then find another library or data sheet for the chip. If you just copy pasted the code and know nothing about programming, then wait if someone else with the same board decides to share the solution

What's wrong with the LED on the player?
(My player has one.)

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.