State Machine Switch - Not Switching?

Hiya all, i seem to be having trouble with the code i have included below where by i set the states upon different conditions however this seems to work twice and after that i cannot get any transition.
The state changes as i have added a serial print and i see that the state changes yet the next state does not run and i am unsure what i am doing wrong here any advice or guidance?

Control_Point Control_Point;

enum State {   //Our states we have
  INITIALISING,
  IDLE,
  STARTING,
  CAPTURING,
  STOPPING,
  Nothing
} state;

void setup() {
  Serial.begin(9600);
  Serial.println("Starting...");
  pinMode(ledPin, INPUT);
  pinMode(motionSensor, INPUT);
  pinMode(functionButton, INPUT);
  state = INITIALISING;
  Control_Point.begin(true);
  attachInterrupt(digitalPinToInterrupt(functionButton), setState, CHANGE);
  delay(1000);
  Serial.println("Started");
}

void loop() {
  bool buttonTrigger = Control_Point.check_Button(buttonState);
  switch (state) {
    case INITIALISING:
      Serial.println("Initialising.");
      state = IDLE;
      break;
    case IDLE:
      if (buttonTrigger) {
        Serial.println("Button Triggered!");
        Control_Point.Sound(0, 3900, 0);
        state = STARTING;
      }
      break;
    case STARTING:
      if (Control_Point.Sound(0, 3900, 0) == 0) {
        Serial.println("Starting Finished!");
        state = CAPTURING;
      }
      break;
    case CAPTURING:
      if(buttonTrigger){
        Serial.println("Button Reverse Trigger!");
        Control_Point.Sound(2, 3900, 0);
        state = STOPPING;
      }
      Serial.println(state);
    break;
    case STOPPING:
      if(Control_Point.Sound(2, 3900, 0) == 0){
        Serial.println("Sound Finished!");
        state = IDLE;
      }
    break;
  }
  attachInterrupt(digitalPinToInterrupt(19), setState, CHANGE);
}

Thank you in advance.

Just a little housekeeping... what is

  attachInterrupt(digitalPinToInterrupt(19), setState, CHANGE);

doing inside loop()?

Also, how do you know that the problem is with the state machine, and not the Control_Point (whatever that is...) object?

You are attaching an interrupt to a function called setState but it is nowhere in the code you posted. What I am guessing it does is change the value of the state variable.

However, you have not declared that variable as 'volatile' so the compiler may not be re-fetching the value from memory each time through the loop().

Progressing further through your state machine depends on the value of buttontrigger which as aarg notes is set by something we can't see.

I apologise I am using a custom library and to include that code I thought may cause confusion, the interrupt is for a button and is declared volatile at the top of my code (I forgot to include) it updates a button state and then disables interrupts, my get button function then debounces and returns only the change in state.

I am confident it's not the library as by removing those aspects it appears to still not work however if I put a println just after the state change I see the state does in fact change but then the code seems to just hang.

Unless you post a complete sketch that exhibits the error, only you can debug it.