Ya veo lo que esta mal, jamas da SpeedX = 0 o por instantes de tiempo muy chicos entonces no se detiene.
Cuando tienes un joystick hay que asegurarse que al soltar el joystick ese umbral se mantenga. Por eso olvida todo y concéntrate en el joystick
algo como esto
void loop() {
ValueX = analogRead(Joystick);
if (ValueX <= TresholdDown) {
SpeedX = - 500;
MoveX = true;
}
else if (ValueX >= TresholdUp) {
SpeedX = 500;
MoveX = true;
} else {
SpeedX = 0;
MoveX = false;
}
MotorControl(SpeedX);
}
void MotorControl(bool MoveX) {
if (MoveX) {
MotorX.setSpeed(SpeedX);
MotorX.run();
}
else {
MotorX.stop();
}
}