シリアル通信は1対1の通信で、Arduinoどうし、Arduinoと入出力装置、ArduinoとPCの通信に用いられる。通信は対等に行なわれ、3本の線(Rx(受信), Tx(送信), GND)で接続される。一方のRxと他方のTxを、また、GNDどうしをつなぐ。Arduinoのシリアル通信には、0番ピンをRx, 1番ピンをTxとするハードウェアシリアルと、任意のデジタルピンをRx, Txにできるソフトウェアシリアルとがある。
#include <SoftwareSerial.h>次の文で、ソフトウェアシリアル通信の名前とRx, Txのピン番号を指定する。
SoftwaerSerial mySerial( Rx, Tx );ハードウェアシリアル通信だけを行なう場合には、上記は不要。
ハードウェアシリアル、ソフトウェアシリアルともにsetup()の中で、通信速度の設定を行なう。 ハードウェアシリアルならば、
Serial.begin( rate );
ソフトウェアシリアルならば、
mySerial.begin( rate );
を実行する。rateの部分には通信速度(bit/秒)を指定する。 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, 115200 の値が指定可能である。通信を行なう両者でこの値を合わせること。 SERIAL_5N1
addressは8から119まで(16進数で0x08から0x77まで)の整数である。I2Cで通信を行なうほかの装置と重複しないように設定する。
byte data; String string; byte buffer[]; Wire.beginTransmission( address ); Wire.write( data ); Wire.write( string ); Wire.write( buffer, length ); Wire.endTransmission();Wire.write()の()内には、byte型の数、文字列、または、byte型の配列とデータの個数を書くことができる。
Wire.onReceive( received );ただし、receivedは次に書く受信処理のための関数の名前。
void received( int length ){ while( Wire.availabel() ){ byte c = Wire.read(); } ... }
Wire.requestFrom( address, length ); while( Wire.available() ){ byte c = Wire.read(); }
Wire.onRequest( requested );ただし、requestedは次に書く受信処理のための関数の名前。
byte data; String string; byte buffer[]; void requested( ){ Wire.write( data ); Wire.write( string ); Wire.write( buffer, length ); }