# Serial Trigger

ArduinoへシリアルUSB経由で100 msトリガーパルスを発行するPythonスクリプトです。

## 概要

`trigger.py` を実行すると、指定COMポートに接続されたArduinoへ `TRIG` コマンドを送信します。
ArduinoはACK・DONEを返すことでトリガー完了を通知し、Pythonスクリプトはその応答を確認します。

### 通信シーケンス

```
PC (Python)          Arduino
    |                   |
    |--- TRIG\n ------->|
    |                   | (トリガー出力開始)
    |<-- ACK -----------|
    |                   | (100 ms パルス出力)
    |<-- DONE ----------|
    |                   |
```

## 要件

- Python 3.x
- pyserial

## インストール

```bash
pip install -r requirements.txt
```

## 設定

`trigger.py` 冒頭の定数を環境に合わせて変更してください。

| 定数 | デフォルト値 | 説明 |
|------|------------|------|
| `PORT` | `COM5` | 接続するCOMポート |
| `BAUD_RATE` | `115200` | ボーレート |
| `RESPONSE_TIMEOUT_SECONDS` | `2.0` | Arduino応答待ちタイムアウト (秒) |

## 使い方

```bash
python trigger.py
```

実行例:

```
COM5を開きました。
Arduino: ACK
Arduino: DONE
100 msトリガーが完了しました。
```

## 別プログラムへの組み込み手順

main関数の流れは以下の通りです．
1. シリアルポート接続
2. 安定化待機
3. シグナル送信

ここで，1と2までは別プログラムの初期化ルーチンで事前に行ってください．  
トリガー信号を出す瞬間に 3 シグナル送信 を実行してください．  
このようにせず毎度 1～3 を処理すると，シグナル送信が遅延し，適時にトリガーが出せません．  

## エラー処理

| メッセージ | 原因 |
|-----------|------|
| `Arduinoは現在トリガー出力中です。` | Arduino がBUSY状態のため再送が必要 |
| `Arduinoからの応答がタイムアウトしました。` | ケーブル未接続・ボーレート不一致など |
| `シリアルポートエラー: ...` | COMポートが存在しない・アクセス権なし |
| `シリアル送信タイムアウト: ...` | 書き込みタイムアウト (デフォルト1秒) |
