//Remote control start for Champion V1
//****************************************************************
int MotorState()
{ 
  static enum { Idle, PowerOn, StarterOn, PreHeat, Starting,Running, Stopping } state = Idle;
  static uint32_t MotorTimer = 1000; //Time to keep choke on
  switch (state)
    {
    case Idle:
      if (Run == 1)
      {
        state = PowerOn;
        Serial.println("Start button ON");
        MotorTimer = millis();
        digitalWrite(StartRelay, 1);
        digitalWrite(GlowRelay, 1);
        delay(20);
        digitalWrite(PowerRelay, 1);
        digitalWrite(SolenoidRelay, 0); //Start button active
        break;
      }
      break;
    // Delay after engine power on
    case PowerOn:
      while ((millis() - MotorTimer) > 2000)
      {
        state = PreHeat;
        Serial.println("Start button OFF");
        MotorTimer = millis();
        digitalWrite(SolenoidRelay, 1);
        break;   
      }
      break;
          // Delay after engine power on
    case PreHeat:
      while ((millis() - MotorTimer) > 100)
      {
        state = Starting;
        Serial.println("Starting");
        MotorTimer = millis();
        break;   
      }
      break;
    //Start motor on  
    case Starting:
      while ((millis() - MotorTimer) > 100)
      {
        state = Running;
        Serial.println("Running");
        MotorTimer = millis();
        break;   
      }
      if (Run == 0)
      {
        state = Running;
        break;
      } 
      break;
    case Running:
      if (Run == 0)
      {
        state = Stopping;
            Serial.println("Stopping");
            MotorTimer = millis();
            digitalWrite(GlowRelay, 0);
        break;   
      }
      if (Run == 0)
      {
        state = Running;
        break;
      } 
      break;

    case Stopping:
      while ((millis() - MotorTimer) > 2000)
      {
        //delay(500);
        state = Idle;
        Serial.println("Go Idle state");
        MotorTimer = millis();
        digitalWrite(PowerRelay, 0);
        digitalWrite(StartRelay, 0);
        digitalWrite(GlowRelay, 0);
        digitalWrite(SolenoidRelay, 0);
        digitalWrite(StartRelay, 0);
        break;   
      }
      break;
    //default:
      //state = Idle;
      //break;
    }
  return state;
} 
