💻
シリアル送受信の基本
メソッド
Serial.xxx 形式で呼ぶ。
送信系: Arduino → PC
メソッド | 挙動 |
---|---|
write |
write(1) write("xxx") write(buf, len) のどれでもいける |
print(3) で "3" を出力。非同期 | |
println | print の改行付き版 |
flush | 送信完了まで待つ (昔はバッファを破棄していたらしいが今は違うらしい) |
- print の第二引数が地味に便利
-
print(15, BIN)
→ "0101" -
print(15, HEX)
→ "F"
-
- printf はないが sprintf はある
受信系: Arduino ← PC
メソッド | 挙動 |
---|---|
available | 受信したバイト数を返す。空なら 0 |
read | 受信していたら先頭の1バイトを返す。空なら -1 |
peek | read と同じだけどポインタはそのまま |
その他
メソッド | 挙動 |
---|---|
begin | 開始。データレートの設定。例: begin(9600) |
end | 終了 |
- 9600 は÷8で一秒間に1200バイト送るモードにするという意味
echo風送受信例
void setup() {
Serial.begin(9600);
}
void loop() {
char ch = Serial.read();
if (ch >= 0) {
Serial.print(ch, HEX);
}
}
Arduino IDE 側から送ったものを read で読み込める。本体から print で Arduino IDE 側に送信できる。何が送受信されたかはっきりさせたいので HEX オプションをつけている。これで ab ENTER
とすると 6162DA
と表示される。DA は 0xD と 0xA で CR + LF
のこと。
available でチェックすべき?
こちらの書き方を紹介している方が多い。
if (Serial.available() > 0) {
char ch = Serial.read();
}
これはディレクトリがなければ作る問題に似ているがマルチタスクOSではないので心配いらない。
Discussion