Controling bldc hoverboard wheels with RF remote movement problems

I have gotten a code that works pretty good. moves in all directions on the work bench. when i push left or right it slows or stops on wheel to turn and returns to the original set position when i release the button. very happy with the results on the work bench.

however, when I put it to use, my weight on the board, it is very sluggish and wont stop when i push the stop button. it stops the wheels fine on the work bench so it is something about being under a load I presume.

I am using the battery from the hover-board. it was rated for 260 pounds so weight should not be a problem. i am suspecting not enough power coming from the motor controllers. i am using RioRand 400W 6-60 volt bought off Amazon RioRand motor controller.

here is my latest code. any help would be appreciated.


#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();

unsigned long   TimerUp;   //UP arrow on the remote
boolean         TimerUpFlag = false;
unsigned long   dummy;
unsigned long * TimerPtr = &dummy; //pointer to the current timer
int speedSetting = 0;
int speedSettingLeft = 0;
int speedSettingRight = 0;
int previousSpeedSetting = 0;
int pinRead;


const byte leftWheel         = 9;  //turns on as long as the UP button is pressed
const byte rightWheel        = 10;
const byte reverseRightWheel = 8;
const byte reverseLeftWheel  = 7;
const byte leftBrake  = 6;
const byte rightBrake = 5;

void setup() {
  Serial.begin(9600);
  mySwitch.enableReceive(0);  // Receiver on interrupt 0 => that is pin #2
  pinMode(leftWheel, OUTPUT);
  pinMode(rightWheel, OUTPUT);
  pinMode(reverseRightWheel, OUTPUT);
  pinMode(reverseLeftWheel, OUTPUT);
  pinMode(leftBrake, OUTPUT);
  pinMode(rightBrake, OUTPUT);
}

void loop() {
  pinRead = analogRead(reverseRightWheel);
  if (mySwitch.available()) {
    processButton();
    mySwitch.resetAvailable();
  }
  if (TimerUpFlag && millis() - TimerUp >= 250ul)
  {
    TimerUpFlag = false; //disable timing
    TimerPtr = &dummy;   //pointer to dummy timer
    Serial.println(previousSpeedSetting);
    analogWrite(leftWheel, previousSpeedSetting);
    analogWrite(rightWheel, previousSpeedSetting);
    digitalWrite(leftBrake, LOW);
    digitalWrite(rightBrake, LOW);
    digitalWrite(reverseRightWheel, LOW);
    digitalWrite(reverseLeftWheel, LOW);
  }

}


void processButton()
{
  switch (mySwitch.getReceivedValue())
  {
    //**********************
    case 12188945:
      Serial.println("SLOW DOWN/REVERSE");
      TimerPtr = &TimerUp;  //point to this timer
      //TimerUpFlag = true;   //enable timing
      if (speedSetting >= 5) {
        speedSetting = speedSetting - 5;
        analogWrite(leftWheel, speedSetting);
        analogWrite(rightWheel, speedSetting);
      }
      else if (speedSetting <= 5) {
        digitalWrite(reverseRightWheel, HIGH);
        digitalWrite(reverseLeftWheel, HIGH);
        analogWrite(leftWheel, 15);
        analogWrite(rightWheel, 15);
      }
      TimerUp = millis();
      break;

    case 12188939:
      Serial.println("FWD");
      TimerPtr = &TimerUp;  //point to this timer
      //TimerUpFlag = true;   //enable timing
        digitalWrite(reverseRightWheel, LOW);
        digitalWrite(reverseLeftWheel, LOW);
      if (speedSetting <= 100) {
        speedSetting = speedSetting + 5;
        analogWrite(leftWheel, speedSetting);
        analogWrite(rightWheel, speedSetting);
      }
      TimerUp = millis();
      break;

    case 12188941:
      Serial.println("LEFT");
      TimerPtr = &TimerUp;  //point to this timer
      TimerUpFlag = true;   //enable timing
      speedSettingRight = speedSetting - 14;
      previousSpeedSetting = speedSetting;
      if (speedSetting >= 16) {
        analogWrite(leftWheel, speedSetting);
        analogWrite(rightWheel, speedSettingRight);
      }
      else if (speedSetting < 16) {
        analogWrite(leftWheel, 0);
        analogWrite(rightWheel, 15);
      }
      TimerUp = millis();
      break;

    case 12188943:
      Serial.println("RIGHT");
      TimerPtr = &TimerUp;  //point to this timer
      TimerUpFlag = true;   //enable timing
      speedSettingLeft = speedSetting - 14;
      previousSpeedSetting = speedSetting;
      if (speedSetting >= 16) {
        analogWrite(leftWheel, speedSettingLeft);
        analogWrite(rightWheel, speedSetting);
      }
      else if (speedSetting < 16) {
        analogWrite(leftWheel, 15);
        analogWrite(rightWheel, 0);
      }
      TimerUp = millis();
      break;

    /*******************SPEED SETTINGS********************/
    case 12188935:
      Serial.println("SPEED 100");
      speedSetting = 60;
      break;

    //**********************
    case 12188936:
      Serial.println("SPEED 50");
      speedSetting = 40;
      break;

    //**********************
    case 12188937:
      Serial.println("SPEED 25");
      speedSetting = 15;
      break;

    //**********************
    /*  case 0xFF30CF:
        Serial.println("SPEED 4");
        TimerPtr = &TimerUp;  //point to this timer
        TimerUpFlag = true;   //enable timing
        speedSetting = 55;
        TimerUp = millis();
        break;

      //**********************
      case 0xFF18E7:
        Serial.println("SPEED 5");
        TimerPtr = &TimerUp;  //point to this timer
        TimerUpFlag = true;   //enable timing
        speedSetting = 70;
        TimerUp = millis();
        break;
    */
    //**********************BRAKE/STOP*********************
    case 12188929:
      Serial.println("BRAKE");
      TimerPtr = &TimerUp;  //point to this timer
      //TimerUpFlag = true;   //enable timing
      digitalWrite(leftWheel, LOW);
      digitalWrite(rightWheel, LOW);
      digitalWrite(leftBrake, LOW);
      digitalWrite(rightBrake, LOW);
      digitalWrite(reverseRightWheel, LOW);
      digitalWrite(reverseLeftWheel, LOW);
      speedSetting = 0;
      TimerUp = millis();
      break;

  }


}