💻

シリアル送受信の基本

2022/12/29に公開約1,700字

メソッド

Serial.xxx 形式で呼ぶ

送信系: Arduino → PC

メソッド 挙動
write write(1) write("xxx") write(buf, len) のどれでもいける
print 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

ログインするとコメントできます