# Arduino IDEのシリアルモニタの使い方

Arduino IDE のシリアルモニタは，Arduino と PC の間でシリアル通信（`Serial.println`等で送信した文字列の確認，PC側から文字を送る等）を行うためのツールである．LED点滅のような出力だけのプログラムではなくセンサ値などをデバッグするときに必須となる．

## 起動方法

1. ArduinoをUSBで接続し，正しいボードとシリアルポートが選択されている状態にする
2. メニューバーから **[ツール] → [シリアルモニタ]** を選択する
   - Arduino IDE 2.x では，右上の虫眼鏡アイコン（🔍）からも開ける
   - ショートカット：`Ctrl + Shift + M`（macOSでは`Cmd + Shift + M`）

```{figure} ../fig/micon-programming/baudrate.png
---
width: 600px
name: fig:serial-monitor-baudrate-tips
---
シリアルモニタはボーレート（通信速度）をArduino側のスケッチと一致させる必要がある．
```

## ボーレートを合わせる

Arduinoのスケッチ内 `Serial.begin(9600);` で指定したボーレートと，シリアルモニタ右下のドロップダウンで選ぶボーレートを**必ず一致させる**こと．食い違うと文字化けや無反応となる．

- スケッチが `Serial.begin(9600)` → シリアルモニタも `9600 baud`
- スケッチが `Serial.begin(115200)` → シリアルモニタも `115200 baud`

## 改行コード（Line Ending）の設定

シリアルモニタの下部にある「改行コード」のドロップダウンで，PC側からArduinoへ送信する文字列の末尾につく改行コードを選択できる：

| 設定 | 送信される改行 | 用途 |
|------|---------------|------|
| 改行なし (No Line Ending) | なし | バイナリ通信や1文字単位の送信 |
| LF | `\n` | `Serial.readStringUntil('\n')` などで使う一般的な設定 |
| CR | `\r` | 古いシリアル機器との通信 |
| CR + LF | `\r\n` | Windows由来の機器 |

サーボモータや距離センサと連携する課題で `Serial.readStringUntil('\n')` を使う場合は **LF** を選んでおく．

## よくあるトラブル

### 文字化けする

ボーレートがスケッチと一致していない．`Serial.begin(...)` の引数と，シリアルモニタ右下のボーレート設定を見比べる．

### 何も表示されない

- スケッチ内に `Serial.begin(...)` の呼び出しがあるか確認する
- スケッチ書き込み後に，Arduino UNO R4 WiFi の場合は自動でリセットがかからないことがある．リセットボタンを一度押してみる
- ポートが正しく選択されていないとき（特にArduinoを抜き差しした後）は，シリアルモニタを一度閉じて開き直す

### `Board not detected` / ポートが選べない

USBの認識自体に問題がある可能性が高い．{doc}`arduino-device-detection` を参照．

### 他のプログラム（cu, Python, C++ など）からアクセスできない

```{warning}
一つのArduinoと同時にシリアル通信できるPC上のプログラムは**一つに限られる**．
シリアルモニタを起動していると，発展課題6（シリアル通信）で外部のプログラム（`cu`，C言語，Python など）からArduinoへ接続できない．
他のプログラムを使うときは，Arduino IDEのシリアルモニタを必ず閉じてから実行すること．
```

## シリアルモニタ vs シリアルプロッタ

Arduino IDE には数値をグラフで可視化できる **シリアルプロッタ** ([ツール] → [シリアルプロッタ]) もある．

- 数値を `Serial.println(value);` の形式で出力すると，リアルタイムに折れ線グラフが描かれる
- 複数の値はタブ区切りで送る：`Serial.print(a); Serial.print('\t'); Serial.println(b);`
- 超音波距離センサ値の時間変化を見るのに便利
