シリアル通信(Serialクラス)
PCや他のマイコンと通信をするためのライブラリです。シリアル用のチャネルは合計8本使用可能で、1チャネルはUSB通信用、7チャネルはUART通信用です。
対応するチャネルとピン番号は以下の通りで、ピンマップでも確認できます。
Serial : USB通信
Serial1: 0(RX), 1(TX)
Serial2: 7(RX), 6(TX)
Serial3: 26(RX), 24(TX)
Serial4: 5(RX), 3(TX)
Serial5: 8(RX), 9(TX)
Serial6: 11(RX), 12(TX)
Serial7: 60(RX), 58(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: 出力するデータの長さ |
戻り値 | 出力したバイト数 |
概要 | シリアル通信ポートに文字列を出力します。 |
---|---|
文法 | 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: while(!Serial.available());// wait to press key Serial.read(); //dummy read } 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 }