Best way to add sound to a project using a by8301-16p?

Over the last couple of weeks I've put together a sketch using an Arduino Uno, which i’ll swap out later for the smaller Nano. The sketch controls Leds and their sequence using states, & a small servo motor.

It basically has three stages.

  1. No buttons pressed, servo doesn't move and leds blink slowly
  2. Button A pressed, servo moves 35 degrees and leds blink slightly faster
  3. Button B pressed, servo moves 83 degrees and leds blink really fast

The sketch works without any issue.

What I want to do now is add sound. I have 3 sound files, 01.mp3, 02.mp3 & 03.mp3. I want 1 sound file to play & loop for each of the 3 stages listed above.

I have a BY8301-16p module that I have loaded the 3 sound files onto.

If I take the input pin 1 of the module and draw it to ground, the sound plays through the speaker, but using the rx and tx pins in the Nano, I cannot get the module to work or play the sound.

I’ve tried using this library GitHub - Critters/MP3FLASH16P: Library for the "MP3 FLASH 16P" MP3/WAV player, which didn't work for me

& i’ve also been trying to use this library GitHub - NachtRaveVL/BY8X01-16P-Arduino: Arduino Library for the BY8001-16P/BY8301-16P Audio Module. but i cant get even the simple example sketch to verify to try it out.

I have added a 1K resistor to the TX Nano & per the instructions on the NachtRaveVL library page, I have removed the surface mount resistors on the device at points A, B & C. Everything is on a breadboard & is being powered from the PC usb plugged into the arduino board and the 5v pin of the arduino to the vcc pin of the sound board & the servo motor

I’ve been stuck on this for the last week & i realise it’ll be something that i’ve missed, coded wrongly or just misunderstood.

I REALLY need some advice on how best to wire up the board and the correct code, which library I should be using, or if there is a simple way to add the 3 sound files that I haven't considered, any help would be greatly appreciated by this Arduino newbie.


[code]
#include<Servo.h>

// RED LEDS wired to buttonA & B press
int ledPinRA =  A0;      // the number of the LED pin
int ledPinRB =  A1;      // the number of the LED pin


Servo myservo; // create servo object to control servo

int buttonApin = 2;
int buttonBpin = 4;

int pos = 0; // set initial servo position to 0
int buttonAstate = 0; // variable for reading pushbutton status
int buttonBstate = 0;

/*
  by noiasca
  https://forum.arduino.cc/index.php?topic=666044
*/

const uint16_t intervalSLOW[] {1000, 1000, 1000, 1000, 1000, 1000, 1000, 100};  // time to wait in each intervall
const uint16_t intervalMEDIUM[] {400, 400, 400, 400, 400, 400, 400, 100};
const uint16_t intervalFAST[] {100, 100, 100, 100, 100, 100, 100, 100};


const byte ledPinA = 5;
const byte ledPinB = 6;
const byte ledPinC = 7;
const byte ledPinD = 8;
const byte ledPinE = 9;
const byte ledPinF = 10;
const byte ledPinG = 11;

void handleLedsSLOW()
{

  static uint32_t previousMillis = 0;
  static byte state = 7;
  if (millis() - previousMillis >= intervalSLOW[state])
  {
    // it's time for next state
    state++;
    state = state % 8;
    Serial.print(F("state=")); Serial.println(state);

    // act according state
    switch (state)
    {
      case 0:
        digitalWrite(ledPinA, HIGH);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, LOW);
        break;
      case 1:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, HIGH);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, LOW);
        break;
      case 2:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, HIGH);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, LOW);
        break;
      case 3:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, HIGH);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, LOW);
        break;
      case 4:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, HIGH);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, LOW);
        break;
      case 5:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, HIGH);
        digitalWrite(ledPinG, LOW);
        break;
      case 6:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, HIGH);
        break;
      case 7:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, LOW);
        break;
    }
    previousMillis = millis();
  }
}

void handleLedsMEDIUM()
{

  static uint32_t previousMillis = 0;
  static byte state = 7;
  if (millis() - previousMillis >= intervalMEDIUM[state])
  {
    // it's time for next state
    state++;
    state = state % 8;
    Serial.print(F("state=")); Serial.println(state);

    // act according state
    switch (state)
    {
      case 0:
        digitalWrite(ledPinA, HIGH);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, LOW);
        break;
      case 1:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, HIGH);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, LOW);
        break;
      case 2:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, HIGH);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, LOW);
        break;
      case 3:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, HIGH);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, LOW);
        break;
      case 4:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, HIGH);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, LOW);
        break;
      case 5:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, HIGH);
        digitalWrite(ledPinG, LOW);
        break;
      case 6:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, HIGH);
        break;
      case 7:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, LOW);
        break;
    }
    previousMillis = millis();
  }
}

void handleLedsFAST()
{

  static uint32_t previousMillis = 0;
  static byte state = 7;
  if (millis() - previousMillis >= intervalFAST[state])
  {
    // it's time for next state
    state++;
    state = state % 8;
    Serial.print(F("state=")); Serial.println(state);

    // act according state
    switch (state)
    {
      case 0:
        digitalWrite(ledPinA, HIGH);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, LOW);
        break;
      case 1:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, HIGH);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, LOW);
        break;
      case 2:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, HIGH);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, LOW);
        break;
      case 3:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, HIGH);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, LOW);
        break;
      case 4:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, HIGH);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, LOW);
        break;
      case 5:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, HIGH);
        digitalWrite(ledPinG, LOW);
        break;
      case 6:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, HIGH);
        break;
      case 7:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, LOW);
        break;
    }
    previousMillis = millis();
  }

}



void setup() {
  myservo.attach(3);
  Serial.begin(9600);
  pinMode(3, OUTPUT); // initialize the servo pin as an output
  pinMode(buttonApin, INPUT_PULLUP); // initialize the button A pin as an input
  pinMode(buttonBpin, INPUT_PULLUP); // initialize the button B pin as an input
  pinMode(ledPinA, OUTPUT); // initialize the LED1 pin as an output
  pinMode(ledPinB, OUTPUT); // initialize the LED2 pin as an output
  pinMode(ledPinC, OUTPUT); // initialize the LED3 pin as an output
  pinMode(ledPinD, OUTPUT); // initialize the LED4 pin as an output
  pinMode(ledPinE, OUTPUT); // initialize the LED5 pin as an output
  pinMode(ledPinF, OUTPUT); // initialize the LED6 pin as an output
  pinMode(ledPinG, OUTPUT); // initialize the LED7 pin as an output

  pinMode(12, OUTPUT);    // sets the digital pin 12 as output for 2 SLIDE switch LEDS

  pinMode(ledPinRA, OUTPUT); // initialize the LED pin as an output
  pinMode(ledPinRB, OUTPUT); // initialize the LED pin as an output
}

void loop() {

  digitalWrite(12, HIGH); // sets the digital pin 12 on

  buttonAstate = digitalRead(buttonApin); // read the state of button A value
  buttonBstate = digitalRead(buttonBpin); // read the state of button B value

  // servo position
  if ((buttonAstate == HIGH) && (buttonBstate == HIGH)) {
    myservo.write(0);

    // LED controls
    handleLedsSLOW();  // checks if something is todo with the LEDs
    //do other important stuff here

    // check if the pushbutton is pressed. If it is, the buttonState is HIGH:
    if (digitalRead(buttonAstate) == HIGH) {
      // turn LED on:
      digitalWrite(ledPinRA, LOW);
    } else {
      // turn LED off:
      digitalWrite(ledPinRA, LOW);
    }


    // check if the pushbutton is pressed. If it is, the buttonState is HIGH:
    if (digitalRead(buttonBstate) == HIGH) {
      // turn LED on:
      digitalWrite(ledPinRB, LOW);
    } else {
      // turn LED off:
      digitalWrite(ledPinRB, LOW);
    }


  }

  else if (buttonAstate == LOW) { // check if button A is pressed
    myservo.write(35); // if it is rotate servo to 35 degrees

    handleLedsMEDIUM();  // checks if something is todo with the LEDs
    //do other important stuff here

    // check if the pushbutton is pressed. If it is, the buttonState is HIGH:
    if (digitalRead(buttonAstate) == HIGH) {
      // turn LED on:
      digitalWrite(ledPinRA, HIGH);
    } else {
      // turn LED off:
      digitalWrite(ledPinRA, LOW);
    }

  }

  else {
    (buttonBstate == LOW)  // check if button B is pressed
    ; myservo.write(83); // if it is rotate servo to 83 degrees

    handleLedsFAST();  // checks if something is todo with the LEDs
    //do other important stuff here

    // check if the pushbutton is pressed. If it is, the buttonState is HIGH:
    if (digitalRead(buttonBstate) == HIGH) {
      // turn LED on:
      digitalWrite(ledPinRB, HIGH);
    } else {
      // turn LED off:
      digitalWrite(ledPinRB, LOW);
    }
  }

  delay(100);                // waits for a second

}
[/code]

Please post the sketch and provide a detailed description of what you mean by "didn't work".

Please tell us which of the examples you had the problem with.

  1. When you encounter an error, you'll see a button on the right side of the orange bar in the Arduino IDE: Copy error messages (or the icon that looks like two pieces of paper at the top right corner of the black console window in the Arduino Web Editor). Click that button.
  2. Open a forum reply here by clicking the Reply button.
  3. Click the </> icon on the post composer toolbar. This will add the forum's code block markup (```) to your reply to make sure the error messages are correctly formatted.
    Code block
  4. Press Ctrl+V. This will paste the compilation output into the code block.
  5. Move the cursor outside of the code block markup before you add any additional text to your reply.
  6. Click the Reply button to post the output.

library GitHub - Critters/MP3FLASH16P
I added the sound file to buttonBstate as a test, no sound played, but the servo constantly cycled rather than move to where it was supposed to go to. Tired adding it to the other 2 states and the same thing happened.

[code]
/*
    This example plays a random file (1, 2 or 3) forever
  It uses the playFile() command so no extra code is needed, it will play another file as soon as the previous one finishes
    If it doesn't work, try reversing the RX/TX wires, (THESE PINS CAN BE CHANGED IN THE CPP FILE I CHANGED THEM TO TX A5 & RX A3 ON THE ARDUINO) as that's probably going to be the most common mistake
    Also check that the player's BUSY line is connected to Arduino pin A4
    Finally check that the player has a speaker connected as well as ground and VCC
*/
#include "SoftwareSerial.h"
#include "MP3FLASH16P.h"
MP3FLASH16P myPlayer;



#include<Servo.h>

// RED LEDS wired to buttonA & B press
int ledPinRA =  A0;      // the number of the LED pin
int ledPinRB =  A1;      // the number of the LED pin


Servo myservo; // create servo object to control servo

int buttonApin = 2;
int buttonBpin = 4;

int pos = 0; // set initial servo position to 0
int buttonAstate = 0; // variable for reading pushbutton status
int buttonBstate = 0;

/*
  by noiasca
  https://forum.arduino.cc/index.php?topic=666044
*/

const uint16_t intervalSLOW[] {1000, 1000, 1000, 1000, 1000, 1000, 1000, 100};  // time to wait in each intervall
const uint16_t intervalMEDIUM[] {400, 400, 400, 400, 400, 400, 400, 100};
const uint16_t intervalFAST[] {100, 100, 100, 100, 100, 100, 100, 100};


const byte ledPinA = 5;
const byte ledPinB = 6;
const byte ledPinC = 7;
const byte ledPinD = 8;
const byte ledPinE = 9;
const byte ledPinF = 10;
const byte ledPinG = 11;

void handleLedsSLOW()
{
  static uint32_t previousMillis = 0;
  static byte state = 7;
  if (millis() - previousMillis >= intervalSLOW[state])
  {
    // it's time for next state
    state++;
    state = state % 8;
    Serial.print(F("state=")); Serial.println(state);

    // act according state
    switch (state)
    {
      case 0:
        digitalWrite(ledPinA, HIGH);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, LOW);
        break;
      case 1:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, HIGH);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, LOW);
        break;
      case 2:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, HIGH);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, LOW);
        break;
      case 3:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, HIGH);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, LOW);
        break;
      case 4:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, HIGH);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, LOW);
        break;
      case 5:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, HIGH);
        digitalWrite(ledPinG, LOW);
        break;
      case 6:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, HIGH);
        break;
      case 7:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, LOW);
        break;
    }
    previousMillis = millis();
  }
}

void handleLedsMEDIUM()
{

  static uint32_t previousMillis = 0;
  static byte state = 7;
  if (millis() - previousMillis >= intervalMEDIUM[state])
  {
    // it's time for next state
    state++;
    state = state % 8;
    Serial.print(F("state=")); Serial.println(state);

    // act according state
    switch (state)
    {
      case 0:
        digitalWrite(ledPinA, HIGH);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, LOW);
        break;
      case 1:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, HIGH);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, LOW);
        break;
      case 2:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, HIGH);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, LOW);
        break;
      case 3:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, HIGH);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, LOW);
        break;
      case 4:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, HIGH);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, LOW);
        break;
      case 5:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, HIGH);
        digitalWrite(ledPinG, LOW);
        break;
      case 6:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, HIGH);
        break;
      case 7:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, LOW);
        break;
    }
    previousMillis = millis();
  }
}

void handleLedsFAST()
{

  static uint32_t previousMillis = 0;
  static byte state = 7;
  if (millis() - previousMillis >= intervalFAST[state])
  {
    // it's time for next state
    state++;
    state = state % 8;
    Serial.print(F("state=")); Serial.println(state);

    // act according state
    switch (state)
    {
      case 0:
        digitalWrite(ledPinA, HIGH);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, LOW);
        break;
      case 1:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, HIGH);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, LOW);
        break;
      case 2:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, HIGH);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, LOW);
        break;
      case 3:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, HIGH);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, LOW);
        break;
      case 4:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, HIGH);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, LOW);
        break;
      case 5:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, HIGH);
        digitalWrite(ledPinG, LOW);
        break;
      case 6:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, HIGH);
        break;
      case 7:
        digitalWrite(ledPinA, LOW);
        digitalWrite(ledPinB, LOW);
        digitalWrite(ledPinC, LOW);
        digitalWrite(ledPinD, LOW);
        digitalWrite(ledPinE, LOW);
        digitalWrite(ledPinF, LOW);
        digitalWrite(ledPinG, LOW);
        break;
    }
    previousMillis = millis();
  }

}



void setup() {
  myservo.attach(3);
  Serial.begin(9600);
  pinMode(3, OUTPUT); // initialize the servo pin as an output
  pinMode(buttonApin, INPUT_PULLUP); // initialize the button A pin as an input
  pinMode(buttonBpin, INPUT_PULLUP); // initialize the button B pin as an input
  pinMode(ledPinA, OUTPUT); // initialize the LED1 pin as an output
  pinMode(ledPinB, OUTPUT); // initialize the LED2 pin as an output
  pinMode(ledPinC, OUTPUT); // initialize the LED3 pin as an output
  pinMode(ledPinD, OUTPUT); // initialize the LED4 pin as an output
  pinMode(ledPinE, OUTPUT); // initialize the LED5 pin as an output
  pinMode(ledPinF, OUTPUT); // initialize the LED6 pin as an output
  pinMode(ledPinG, OUTPUT); // initialize the LED7 pin as an output

  pinMode(12, OUTPUT);    // sets the digital pin 12 as output for 2 SLIDE switch LEDS

  pinMode(ledPinRA, OUTPUT); // initialize the LED pin as an output
  pinMode(ledPinRB, OUTPUT); // initialize the LED pin as an output

  // Init the by8301 player with the busy pin connected to Arduino pin A4
  myPlayer.init(A4);

}

void loop() {
  digitalWrite(12, HIGH); // sets the digital pin 12 on

  buttonAstate = digitalRead(buttonApin); // read the state of button A value
  buttonBstate = digitalRead(buttonBpin); // read the state of button B value

  // servo position
  if ((buttonAstate == HIGH) && (buttonBstate == HIGH)) {
    myservo.write(0);


    // LED controls
    handleLedsSLOW();  // checks if something is todo with the LEDs
    //do other important stuff here

    // check if the pushbutton is pressed. If it is, the buttonState is HIGH:
    if (digitalRead(buttonAstate) == HIGH) {
      // turn LED on:
      digitalWrite(ledPinRA, LOW);
    } else {
      // turn LED off:
      digitalWrite(ledPinRA, LOW);

    }


    // check if the pushbutton is pressed. If it is, the buttonState is HIGH:
    if (digitalRead(buttonBstate) == HIGH) {
      // turn LED on:
      digitalWrite(ledPinRB, LOW);
    } else {
      // turn LED off:
      digitalWrite(ledPinRB, LOW);
    }


  }

  else if (buttonAstate == LOW) { // check if button A is pressed
    myservo.write(35); // if it is rotate servo to 35 degrees

    handleLedsMEDIUM();  // checks if something is todo with the LEDs
    //do other important stuff here

    // check if the pushbutton is pressed. If it is, the buttonState is HIGH:
    if (digitalRead(buttonAstate) == HIGH) {
      // turn LED on:
      digitalWrite(ledPinRA, HIGH);
    } else {
      // turn LED off:
      digitalWrite(ledPinRA, LOW);
    }

  }

  else {
    (buttonBstate == LOW)  // check if button B is pressed
    ; myservo.write(83); // if it is rotate servo to 83 degrees
    myPlayer.playFile(1);
    handleLedsFAST();  // checks if something is todo with the LEDs
    //do other important stuff here

    // check if the pushbutton is pressed. If it is, the buttonState is HIGH:
    if (digitalRead(buttonBstate) == HIGH) {
      // turn LED on:
      digitalWrite(ledPinRB, HIGH);
    } else {
      // turn LED off:
      digitalWrite(ledPinRB, LOW);
    }
  }

  delay(100);                // waits for a second

}
[/code]

library [GitHub - NachtRaveVL/BY8X01-16P-Arduino]

[code]
#include "BY8X01-16P.h"

BY8X0116P audioController;              // Library using default disabled busy pin hookup, and default Serial1 @9600bps

void setup() {
  Serial.begin(115200);               // Begin Serial and Serial1 interfaces
  Serial1.begin(audioController.getSerialBaud(),
                audioController.getSerialMode());

  audioController.init();             // Initializes module

  audioController.setVolume(20);      // Sets player volume to 20 (out of 30 max)

  audioController.play();             // Starts playback of loaded tracks
}

void loop() {
}
[/code]

I get this error

Arduino: 1.8.15 (Windows Store 1.8.49.0) (Windows 10), Board: "Arduino Uno"





















test4:3:11: error: no matching function for call to 'BY8X0116P::BY8X0116P()'

 BY8X0116P audioController;              // Library using default disabled busy pin hookup, and default Serial1 @9600bps

           ^~~~~~~~~~~~~~~

In file included from C:\Users\natha_000\Documents\Arduino\test4\test4.ino:1:0:

C:\Users\natha_000\Documents\Arduino\libraries\BY8X01-16P-Arduino-master\src/BY8X01-16P.h:146:5: note: candidate: BY8X0116P::BY8X0116P(HardwareSerial&, byte, byte)

     BY8X0116P(HardwareSerial& serial, byte busyPin = DISABLED, byte busyActiveOn = HIGH);

     ^~~~~~~~~

C:\Users\natha_000\Documents\Arduino\libraries\BY8X01-16P-Arduino-master\src/BY8X01-16P.h:146:5: note:   candidate expects 3 arguments, 0 provided

C:\Users\natha_000\Documents\Arduino\libraries\BY8X01-16P-Arduino-master\src/BY8X01-16P.h:130:7: note: candidate: constexpr BY8X0116P::BY8X0116P(const BY8X0116P&)

 class BY8X0116P {

       ^~~~~~~~~

C:\Users\natha_000\Documents\Arduino\libraries\BY8X01-16P-Arduino-master\src/BY8X01-16P.h:130:7: note:   candidate expects 1 argument, 0 provided

C:\Users\natha_000\Documents\Arduino\libraries\BY8X01-16P-Arduino-master\src/BY8X01-16P.h:130:7: note: candidate: constexpr BY8X0116P::BY8X0116P(BY8X0116P&&)

C:\Users\natha_000\Documents\Arduino\libraries\BY8X01-16P-Arduino-master\src/BY8X01-16P.h:130:7: note:   candidate expects 1 argument, 0 provided

C:\Users\natha_000\Documents\Arduino\test4\test4.ino: In function 'void setup()':

test4:7:3: error: 'Serial1' was not declared in this scope

   Serial1.begin(audioController.getSerialBaud(),

   ^~~~~~~

C:\Users\natha_000\Documents\Arduino\test4\test4.ino:7:3: note: suggested alternative: 'Serial'

   Serial1.begin(audioController.getSerialBaud(),

   ^~~~~~~

   Serial

exit status 1

no matching function for call to 'BY8X0116P::BY8X0116P()'



This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

Forget about your servo and LEDs and sketch for now. You need to start by just getting the sound module by itself working, then once it's working perfectly by itself you can integrate it into your project.

So disconnect everything except for the sound module from your Uno and then try the "super_simple" example the library came with. Make sure to set up some sound files with the filenames the sketch is expecting.

That sketch is only for use with Arduino boards that have a second hardware serial port. The Uno only has one serial port. For the Uno, you would need to use the library's "SoftwareSerialExample" example, but that also requires you to modify the library source code.

My recommendation is that you focus on one library at a time. So start with trying to get the first library working by itself. If you never have success with that one, then you can switch to trying to get the second library working, again starting with the most simple example and the sound module alone, only switching to integration with your servo and LEDs sketch and circuit once the simple sketch is working perfectly.

Started from scratch & reinstalled Critters/MP3FLASH16P & tried the "super_simple" example. It uploaded to the test Nano board & the TX & RX lights flickered but the BY8301 module didn't play.

I then tried NachtRaveVL/BY8X01-16P-Arduino "SoftwareSerialExample" and uncommented the following as per the recommendation.
// // Uncomment or -D this define to enable use of the SoftwareSerial library.
// #define BY8X0116P_ENABLE_SOFTWARE_SERIAL // https://www.arduino.cc/en/Reference/softwareSerial

It uploaded to the test Nano board & the TX & RX lights flickered and thankfully the BY8301 module played a track, just one track, but that's the best result I've had in over a week.
Now to try to figure out how to make it play specific tracks.
When the module had the A&C surface mount resistors it would play a specific track by grounding out a pin, now the resistors have been removed its changed to play random tracks on the same pin.

I'm guessing that i have to add a Busy pin in the void Setup & what i want the module to do, (play a specific track in a loop) in the void loop section of the "SoftwareSerialExample"?
Thank you for your help

Getting some audio out of the module sounds like real progress to me! Sometimes it just takes that small win to start on the progress that eventually leads to a finished project.