using millis() for a timer
The problem is in the logic, basically your statement:



    if (cMillis - pMillis &gt; interval)
    {   
       pMillis = cMillis;
       digitalWrite(ledPin, HIGH);
        Serial.println("On");
        Serial.println(interval - cMillis);
    }
    else
    {
       digitalWrite(ledPin, LOW);
       Serial.println("Off");
    }


will always be true, this is as the difference in time, cMillis - pMillis is always greater than interval.

This means that it never enters the else statement to turn off the LED, and thus means the else statement is usually the first thing that rune at ledMode = 3.

What you need to do as the simplest fix is to change your comparison, change &gt; to &lt;, in the is statement:

if (cMillis - pMillis &gt; interval)


to 

if (cMillis - pMillis &lt; interval)


this will ensure the LED is always on during the 5000 mS and then as soon as it is greater it will definitely go to the else