Program not working as intended

You have some recursion going on. You call Accelerate() which calls Coast() which blocks forever. You get an interrupt which calls SlowDown() which calls Stationary() which calls Accelerate() which calls Coast().

And since you called this from an interrupt, interrupts are disabled so you never get them re-enabled and your code will never see another interrupt.

You need to re-design your code as more of a state machine and just have your interrupt routine set a flag to indicate it is time to change states. You should also get rid of those for() loops in your ramps and just do them one step at a time

const int interruptPin = 3;
#define MOTOR_EN_1_2  10
#define MOTOR_IN1     9
#define MOTOR_IN2     8

const int cspeed = 150;// Constant Speed
int currentSpeed;


enum { STATIONARY, SLOWDOWN, ACCELERATE, COAST };
int currentState;

volatile byte flag;

unsigned long currentTime = 0;
unsigned long previousTime = 0;


//*************************************************
void setup()
{
  Serial.begin(9600);
  Serial.println("Motor Speed Up Hold Slow Down with interrupt");
  pinMode(interruptPin, INPUT_PULLUP);
  pinMode(MOTOR_EN_1_2, OUTPUT);
  pinMode(MOTOR_IN1, OUTPUT);
  pinMode(MOTOR_IN2, OUTPUT);
  attachInterrupt(digitalPinToInterrupt(interruptPin), change, CHANGE);
  Accelerate();
}

void change() {
  // interrupt service routine
  flag = 1;
}

//*********************************************
void Stationary()//Motor stopped for interval time
{
  const unsigned long interval = 5000;

  if (currentTime - previousTime >= interval)
  {
    currentState = ACCELERATE;
  }
}

//*********************************************
void SlowDown()
{
  const unsigned long interval = 400;
  static int idx = cspeed;

  digitalWrite(MOTOR_IN1, HIGH);
  digitalWrite(MOTOR_IN2, LOW);

  if (currentTime - previousTime >= interval)
  {
    previousTime = currentTime;
    analogWrite(MOTOR_EN_1_2, currentSpeed);
    Serial.println(currentSpeed);
    currentSpeed--;
    if ( currentSpeed == 0) {
      // we are done decelerating so transition to STATIONARY
      currentState = STATIONARY;
    }
  }
}

//*********************************************
void Accelerate()
{
  const unsigned long interval = 400;

  if (currentTime - previousTime >= interval)
  {
    analogWrite(MOTOR_EN_1_2, currentSpeed);
    Serial.println(currentSpeed);
    currentSpeed++;
    if ( currentSpeed >= cspeed ) {
      // we are done accelerating so transition to COAST
      currentState = COAST;
    }
  }
}

//**********************************************
void Coast()
{
  // nothing to do since we are up to speed
}

//***********************************************
void loop()
{
  currentTime = millis();

  int oldState = currentState;
  
  if ( flag ) {
    currentState = SLOWDOWN;
    flag = 0;
  }

  if ( oldState != currentState ) {
    beginState( currentState );
  }

  checkState( currentState );
}

void beginState( int state ) {

  currentState = state;
  previousTime = currentTime;

  // do whatever you need to start this state
  switch (state) {
    case STATIONARY:
      digitalWrite(MOTOR_IN1, LOW);
      digitalWrite(MOTOR_IN2, LOW);
      Serial.println("Stopped");
      break;

    case SLOWDOWN:
      digitalWrite(MOTOR_IN1, HIGH);
      digitalWrite(MOTOR_IN2, LOW);
      Serial.println("Slowing down");
      break;

    case ACCELERATE:
      digitalWrite(MOTOR_IN1, HIGH);
      digitalWrite(MOTOR_IN2, LOW);
      Serial.println("Speeding up");
      if ( currentSpeed < 50 ) currentSpeed = 50;
      break;

    case COAST:
      Serial.println("at speed");
      break;
  }
}

void checkState( int state ) {

  // do whatever you need to during this state
  switch (state) {
    case STATIONARY:
      Stationary();
      break;

    case SLOWDOWN:
      SlowDown();
      break;

    case ACCELERATE:
      Accelerate();
      break;

    case COAST:
      Coast();
      break;
  }
}