シリアル通信(Serialクラス)

PCや他のマイコンと通信をするためのライブラリです。シリアル用のチャネルは合計8本使用可能で、1チャネルはUSB通信用、4チャネルはUART通信用です。 対応するチャネルとピン番号は以下の通りで、ピンマップでも確認できます。

Serial : USB通信
Serial1: 1(RX), 0(TX)
Serial2: 6(RX), 5(TX)
Serial3: 8(RX), 7(TX)
Serial4: 11(RX), 12(TX)

available

概要
シリアル通信ポートから何バイトのデータが読み取れるかを返す
文法
int Serial.available()
パラメータ
なし
戻り値
シリアルバッファにあるデータのバイト数。0の場合はデータなし

begin

概要
シリアル通信のボーレート、ポートの設定を行います。
文法
Serial.begin(unsigned long speed, config)
パラメータ
speed: ボーレート (約1,200~3,000,000Hz)
config(オプション): データ長、パリティ、ストップビットの設定。以下のいずれかから選択。
   SERIAL_5N1, SERIAL_6N1, SERIAL_7N1, SERIAL_8N1 (default)
   SERIAL_5N2, SERIAL_6N2, SERIAL_7N2, SERIAL_8N2
   SERIAL_5E1, SERIAL_6E1, SERIAL_7E1, SERIAL_8E1
   SERIAL_5E2, SERIAL_6E2, SERIAL_7E2, SERIAL_8E2
   SERIAL_5O1, SERIAL_6O1, SERIAL_7O1, SERIAL_8O1
   SERIAL_5O2, SERIAL_6O2, SERIAL_7O2, SERIAL_8O2
戻り値
なし
補足
設定するボーレートによって、誤差が発生します。
一般的なボーレートで4800, 9600, 19200, 38400, 57600, 115200, 230400(bps)までは誤差は比較的小さく、1バイト以下の通信は正常に行うことができます。
これ以上のボーレートを設定する場合、500000, 1000000, 1500000, 3000000(bps)を設定してください。

end

概要
シリアル通信ポートの停止
文法
Serial.end()
パラメータ
なし
戻り値
なし

read

概要
シリアル通信ポートの受信バッファから1バイトのデータが読み出します。
文法
int Serial.read()
パラメータ
なし
戻り値
データ。データなしの場合は-1が返る。

peek

概要
シリアル通信ポートの受信バッファにある先頭データを読み出します。バッファ中の読み込み位置は変更しないので、バッファを覗くだけ。CRLFの変換は行われません。
文法
int Serial.peek()
パラメータ
なし
戻り値
先頭データ。データなしの場合は-1が返る。

flush

概要
シリアル通信ポートの送信バッファが空になるまで待ちます。
文法
Serial.flush()
パラメータ
なし
戻り値
なし

write

概要
シリアル通信ポートに文字列やデータを出力する。
文法
Serial.write(const char* str)
Serial.write(const unsigned char* buf, int len)
パラメータ
str: 文字列
buf: 出力するデータのポインタ
len: 出力するデータの長さ
戻り値
出力したバイト数

print

概要
シリアル通信ポートに文字列を出力します。
文法
Serial.print(val)
Serial.print(val, format)
パラメータ
val: 出力したい値や文字列
format: 数値の場合はその基数(BIN:2進数、OCT:8進数、DEC:10進数、HEX:16進数)
戻り値
出力したバイト数

println

概要
シリアル通信ポートに文字列を改行付きで出力する。
文法
Serial.println(val)
Serial.println(val, format)
パラメータ
val: 出力したい値や文字列
format: 数値の場合はその基数(BIN:2進数、OCT:8進数、DEC:10進数、HEX:16進数)
戻り値
出力したバイト数

サンプルプログラム

フォーマットに応じて出力するサンプルです。


#include <Arduino.h>
/*
Uses a FOR loop for data and prints a number in various formats.
*/
int x = 0;    // variable
    
void setup() {
    Serial.begin(9600);      // open the serial port at 9600 bps:
}
    
void loop() {  
    // print labels 
    Serial.print("RAW");       // prints a label
    Serial.print("\t");              // prints a tab
    
    Serial.print("DEC");  
    Serial.print("\t");      
    
    Serial.print("HEX"); 
    Serial.print("\t");   
    
    Serial.print("OCT");
    Serial.print("\t");
    
    Serial.print("BIN");
    Serial.print("\t"); 
    
    for(x=0; x< 64; x++){    // only part of the ASCII chart, change to suit
    
    // print it out in many formats:
    Serial.print(x);       // print as an ASCII-encoded decimal - same as "DEC"
    Serial.print("\t");    // prints a tab
    
    Serial.print(x, DEC);  // print as an ASCII-encoded decimal
    Serial.print("\t");    // prints a tab
    
    Serial.print(x, HEX);  // print as an ASCII-encoded hexadecimal
    Serial.print("\t");    // prints a tab
    
    Serial.print(x, OCT);  // print as an ASCII-encoded octal
    Serial.print("\t");    // prints a tab
    
    Serial.println(x, BIN);  // print as an ASCII-encoded binary
    //                             then adds the carriage return with "println"
    delay(200);            // delay 200 milliseconds
    }
    Serial.println("");      // prints another carriage return
}