Imaginary Code

from kougaku-navi.net

Arduinoにおけるコマンドラインインタフェースの雛型

ArduinoとPC間のシリアル通信において、ターミナルからキーボード入力でコマンドを打ち込んで対話的に動かしたいときのプログラム例です。たまに忘れるので覚書きとして。

Arduinoのプログラム
void setup() {
  Serial.begin(9600);
  Serial.setTimeout(15000UL); // タイムアウト設定(15秒)
  pinMode(13,OUTPUT);
}

void loop() {
  if ( Serial.available() > 0 ) {
    String str = Serial.readStringUntil('\r');

    Serial.println();
    if ( str == "on") {
      digitalWrite(13,HIGH);
      Serial.println("> ok : LED13 turn on");
    }
    else if ( str=="off" ) {
      digitalWrite(13,LOW);
      Serial.println("> ok : LED13 turn off");
    }
    else {
      Serial.print("> error [");
      Serial.print(str);
      Serial.println("]");
    }
  }
}

それ以外のコマンドはエラーになります。Serial.setTimeout()は、Serial.readBytesUntil() および Serial.readBytes() のタイムアウトまでの時間(入力待ちの時間)をミリ秒単位で設定します。デフォルトは1000ms。

ターミナルの設定

ターミナルソフト(Tera Termとか)の設定はこんな感じで。

  • 受信:CR
  • 送信:CR
  • ローカルエコー:ON
入力例

「on」と打つとArduino上の13番ピンにつながるLEDが点灯し、「off」と打つと消灯します。それ以外はエラーになります。

on
> ok : LED13 turn on
off
> ok : LED13 turn off
asdfghjk
> error [asdfghjk]