(HELP) Question about arduino Bluetooth & IR communication

Hello, everyone I have some trouble related to Bluetooth & IR communication.

I’m making robot communicating each other by IR.

If I put button of smartphone bluetooth application, the robot with BT module transmits IR signal.
And another robot receives the signal and play mp3, shaking arms or light LED.

But system doesn’t work normally.
Bluetooth works very well.
But IR’s just worked once after uploading or when Serial monitor is opened.

I think there is problem in “SOFTWARESERIAL”.
Because I used 2 SoftwareSerials(Bluetooth, MP3)

I uploaded code.
Plz help me…
:sob:

#include <SoftwareSerial.h>
#include<Servo.h>
#include <DFPlayer_Mini_Mp3.h>
#include <IRremote.h>
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif

SoftwareSerial mp3Serial(12, 13); // RX, TX
SoftwareSerial btSerial(7, 8);

#define neopixelPIN    6
#define NUMPIXELS      16
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, neopixelPIN, NEO_GRB + NEO_KHZ800);
int delayval = 100;

Servo servo1;
Servo servo2;

//bt bluetooth
char data_bt = 0;
char data_s = 0;
boolean check_bt = false;

//IR
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;

IRsend irsend;
boolean checkIR = false;

void setup() {
  initToy();
}

void loop() {
  if (bluetooth(1) == true) { //If '1' is sent from BT app
    sendIR(0xa);
  }

  if (receiveIR(0xb) == true) { //IR from another robot
    servoOn(servo1, 0, 100, 10);
    neopixelOn(0, 0, 150);
    neopixelOff();
    Serial.println("Hello");
  }
}

//initialize
void initToy() {
  Serial.begin(9600);
  mp3Init();
  servoInit();
  neopixelInit();
  IRInit();
  bluetoothInit();
}

//bluetooth--------------------------------------------*
void bluetoothInit() {
  btSerial.begin(9600);
  btSerial.println("Hello, world?");
}

boolean bluetooth(int num) {
  if (Serial.available()) { //read from arduino
    data_s = Serial.read();
    delay(10);
    btSerial.write(data_s); //send to BT app
  }

  char a = num + 48;
  check_bt = false;
  if (btSerial.available()) {
    data_bt = btSerial.read();
    if (data_bt == a) {
      Serial.println("bluetooth On");
      check_bt = true;
    }
    Serial.write(data_bt); //send to arduino
    Serial.println();
  }
  return check_bt;
}

//IR -----------------------------------------------------*
void IRInit() {
  irrecv.enableIRIn();
}

boolean receiveIR(int hex) {
  checkIR = false;
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    if (results.value == hex) {
      Serial.println("Hello");
      checkIR = true;
    }
    irrecv.resume();
  }
  delay(30);
  return checkIR;
}

void sendIR(int hex) {
  for (int i = 0 ; i < 3; i++) {
    irsend.sendSony(hex, 20);
    delay(100);
  }
  delay(500);
  Serial.println("IR has been sent");
  Serial.println(hex, HEX);
}


//MP3 -----------------------------------------------------*
void mp3Init() {
  mp3Serial.begin(9600);
  mp3_set_serial (mp3Serial);      //set Serial for DFPlayer-mini mp3 module
  delay(1);                     // delay 1ms to set volume
  mp3_set_volume (30);          // value 0~30
}

void mp3Play(int num, long sec) {
  mp3Serial.listen();
  if (mp3Serial.isListening()) {
    mp3_play(num);
    delay (sec);
    mp3_stop();
  }
}


//Servo -----------------------------------------------------*
void servoInit() {
  servo1.attach(9);
  servo2.attach(10);
}

void servoOn(Servo servo, int startAng, int endAng, int sec) {
  int pos = 0;
  if (startAng <= endAng) {
    for (pos = startAng; pos <= endAng; pos += 1) { // goes from 0 degrees to 180 degrees
      // in steps of 1 degree
      servo.write(pos);              // tell servo to go to position in variable 'pos'
      delay(sec);                       // waits 15ms for the servo to reach the position
    }
    for (pos = endAng; pos >= startAng; pos -= 1) { // goes from 180 degrees to 0 degrees
      servo.write(pos);              // tell servo to go to position in variable 'pos'
      delay(sec);                       // waits 15ms for the servo to reach the position
    }
  } else {
    for (pos = endAng; pos <= startAng; pos += 1) { // goes from 0 degrees to 180 degrees
      // in steps of 1 degree
      servo.write(pos);              // tell servo to go to position in variable 'pos'
      delay(sec);                       // waits 15ms for the servo to reach the position
    }
    for (pos = startAng; pos >= endAng; pos -= 1) { // goes from 180 degrees to 0 degrees
      servo.write(pos);              // tell servo to go to position in variable 'pos'
      delay(sec);                       // waits 15ms for the servo to reach the position
    }
  }
}

//neopixel
void neopixelInit() {
#if defined (__AVR_ATtiny85__)
  if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
#endif
  pixels.begin();
}

void neopixelOn(int red, int green, int blue) {
  for (int i = 0; i < NUMPIXELS; i++) {
    // pixels.Color takes RGB values, from 0,0,0 up to 255,255,255
    pixels.setPixelColor(i, pixels.Color(red, green, blue)); // Moderately bright green color. (0, 150, 0)
    pixels.show(); // This sends the updated pixel color to the hardware.
    delay(delayval); // Delay for a period of time (in milliseconds).
  }
}

void neopixelOff() {
  for (int i = 0; i < NUMPIXELS; i++) {
    pixels.setPixelColor(i, pixels.Color(0, 0, 0));
    pixels.show();
    delay(delayval);
  }
}