シリアル通信とシリアルモニターの利用
シリアル通信は Arduino ボードとコンピュータやその他のデバイスと通信するために使われます。
すべての Arduino ボードは少なくともひとつのシリアルポートを備えています。
Arduino の開発環境では、シリアル通信に利用するプログラミングインターフェイスとして Serial オブジェクトが利用できます。
これはシリアル通信のためのバッファやメソッドをまとめた、 HardwareSerial クラスのオブジェクトです。
シリアルモニター
Arduino 開発環境では、シリアルポートの入出力の確認を簡単に行うためのシリアルモニター (Serial Monitor) というツールが用意されています。
開発環境の Tool » Serial Monitor メニューから起動します。
シリアルモニターの画面は次のようになります。
ポートに書き込むには、文字を入力して Send ボタンを押します。
シリアルポートに文字を出力
さっそくシリアルポートに文字を出力して、それを表示してみましょう。
スケッチは次の通り。
void setup() { Serial.begin( 9600 ); } void loop() { if( Serial.available() ){ char c = Serial.read(); Serial.print( c ); Serial.print( " " ); Serial.println( c , HEX ); } }
setup() で Serial の begin メソッドでシリアル通信のボーレート (1秒間の転送ビット数) を設定。 loop() にて Serial の println メソッドでデータを印字。そのあと 10秒の delay します。
ちなみに print メソッドも印字しますが、println は CRLF を最後に出力します。
シリアルモニターを開いてから Arduino IDE から Arduino ボードにアップロードしましょう。
アップロード後、直ちにシリアルモニターに文字が出力されていることが確認できるはずです。
読み込みと出力
次の例ではシリアルポートから文字を1バイト毎に読み取り、それを可読な ASCII 文字としてシリアルポートに出力します。
スケッチは次の通りです。
void setup() { Serial.begin( 9600 ); } void loop() { if( Serial.available() ){ char c = Serial.read(); Serial.print( c ); Serial.print( " " ); Serial.println( c , HEX ); } }
これを実行すると、次のようになります。
シリアルモニターの入力フィールドに "Hello" と入力して、"Send" をクリック。
すると次のように出力されます。
Serial.available() メソッドはバッファにデータがあるときに読み込み可能なバイト数を返します。データがない場合は 0 を返します。 ブロックはしません。
Serial.read() メソッドはバッファの先頭のバイトを読み取り返します。読み取りできるデータがない場合は、ブロックせずに -1 を返します。
Serial.print() メソッド及び Serial.println() メソッドは第二引数に書式を受け取ります。2/8/10/16進数として出力するには BIN, OCT, DEC, HEX を それぞれ指定します。浮動小数点の値に対して、書式を整数を指定すると小数点の場所を指定できます。