int LED;    //LED点灯/消灯モード
int exLED_PIN = 0;    //GPIO: 0, Pin: 1
uint64_t interval_T = 1000000; //[μsec]  //LED ON時間、LEDのOFF時間
uint64_t current_T;  //現在時刻  //pico起動後の経過時間[μsec]
uint64_t target_T;   //LED状態遷移時刻 

typedef enum
{
    TIME_INIT=0,
    TIME_CHECK,
    TIME_REACHED
} STATES;
STATES states;


void setup() {
  pinMode(LED_BUILTIN, OUTPUT);       //内臓LED接続ポート 出力モード設定
  gpio_init(exLED_PIN);
  gpio_set_dir(exLED_PIN, GPIO_OUT);     //ピン出力モード設定
  states = TIME_INIT;
}

void loop() {
  switch(states){
    case TIME_INIT:                   //最初のステート
            current_T = time_us_64();  //pico起動後経過の時間取得[μsec]
            target_T = current_T + interval_T;  //LED状態遷移時刻計算
            states = TIME_CHECK;
            break;

    case TIME_CHECK:                  //interval_T の時間が経過するまでこのステートを繰り返す
            if(target_T <= time_us_64())
            {
              states = TIME_REACHED;
              target_T = 0;
            }
            break;

    case TIME_REACHED:      //所要の時刻に達した場合の処理
            if(LED == 0)    //消灯モードの場合
            {
              LED = 1;
              digitalWrite(LED_BUILTIN, HIGH);  //内臓LED: 点灯       
              digitalWrite(exLED_PIN, 1);       //外付けLED: 点灯
            } else          //点灯モードの場合
            {
              LED = 0;
              digitalWrite(LED_BUILTIN, LOW);   //内臓LED: 消灯 
              digitalWrite(exLED_PIN, 0);       //外付けLED 消灯
            }
            states = TIME_INIT;
            break; 
            
      default: 
            break;
  }

}