void setup() 
{
  pinMode( LED_BUILTIN, OUTPUT );
  Serial.begin( 9600 );  
  Serial.print( "Setting up\n\n" );
}

void loop() 
{
  uint32_t now = millis();
  static uint32_t past = now;
  static bool blink = false;
  static bool ledState = false;

  if ( Serial.available() )
  {
    char c = Serial.read();

    if( c == '0' )
    {
      blink = false;
      digitalWrite( LED_BUILTIN, LOW );
      Serial.print( "LED is off\n" );
    }

    else if( c == '1' )
    {
      blink = false;
      digitalWrite( LED_BUILTIN, HIGH );
      Serial.print( "LED is on!\n" );
    }

    else if( c == '2' )
    {
      blink = true;
      past = now;
      ledState = true;
      digitalWrite( LED_BUILTIN, HIGH );
      Serial.print( "LED is blinking!\n" );
    }
  }

  if ( blink && now - past >= 1000 )
  {
    past = now;
    ledState = !ledState;
    digitalWrite( LED_BUILTIN, ledState ? HIGH : LOW );
  }
}