You have two delay(500) statements in your code.
checkButton should not need that at all; this should only have a negative effect if you work with the buttons, not when you send a pause command from the serial monitor.
If toggle[1] equals 0, you constantly call mandmStart which contains a delay of 500ms. For testing, I suggest that you take the call to mandmStart out of that if block and see if that improves the situation.
I like to suggest that you replace the numbers for toggle[1] by #defines or an enum; it makes your code easier to understand. The number 1 does not mean anything but something like MM_PAUSED does.
I might have the numbers wrong but something like
#define MM_STARTED 0
#define MM_PAUSED 1
#define MM_INITIALISING 2
#define MM_TERMINATED 3
and next you can replace e.g.
toggle[1] = 1;
by
toggle[1] = MM_PAUSED;
and modify the if conditions as shown in the example below
if ((toggle [1] == MM_PAUSED) || (toggle [1] == MM_INITIALISING)) {
toggle [1] = MM_STARTED;
As said, easier to follow and if you, in a years time or so, have to make a change, you don't have to dig through the code to find out what the numbers mean.