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; } }