シリアル通信というとなんだか手順が複雑そうに感じますね、でもArduinoなら簡単に実装できるようになっています。使いこなそうと思えばそれなりに手間が掛かるかもしれないですが、シリアル通信を試してみる程度ならすぐに動かすことが出来ますので是非参考にしてみてください。
Arduino nanoで制作しましたが、UNOでも問題なく動くはずです。
Arduinoのシリアル通信
折角簡単にシリアル通信を試すのですからUARTなどのややこしいお話はここではしません。
ですので、どちらかというと「ちょっとシリアル通信試してみたいな」という方にはおススメかもしれません。
難しい事は考えずにとりあえず動かしてみるという感じで読み進めてください。
1バイト送って1バイト返すスケッチ
シリアル通信を試す一番簡単なスケッチかもしれません。
シリアルモニタから1文字送ると同じ文字をシリアルモニタに返すというだけのスケッチです。
面倒ならコピペしてアップロードしてください。
スケッチ
uint8_t c; // グローバル変数
void setup() {
// put your setup code here, to run once:
Serial.begin(9600); // シリアル通信を9600bpsで開始
Serial.println("serial start"); // PC側へ文字列を送信
}
void loop() {
// put your main code here, to run repeatedly:
if( Serial.available() ){ // 何か受信しているかチェック
c = Serial.read(); // 1文字取り出す
if(c != '\n' && c != '\r'){ // エスケープシーケンス以外ならPCへ送り返す
Serial.write(c); // PC側へ1文字送信
Serial.write('\n'); // 改行コードを送信
}
}
}
動作の確認
ツール>>シリアルモニタでシリアルモニタを起動します。
矢印部分のボーレートを9600bpsに変更します。
左側のエスケープシーケンスの項目は未変更でOKです。
既にスケッチがアップロード済ならArduino本体のリセットスイッチを押してリセットします。
「serial start」と出ていれば無事動いていますので、赤枠の中に適当な文字を入力してリターンキーを押すか、送信ボタンをクリックします。
送信した文字が下のウインドウに表示されていれば動作は正常です。
お気づきと思いますが数文字まとめて送信しても、1文字づつ改行されていると思います。シリアル通信では1バイト単位での送信となるため、まとめて送信してもArduino側では1バイトづつの処理となって毎回改行が入ってしまいます。
この辺りは作り方でまとめて処理することも可能ですが、お試しの域を超えてしまいそうなのでここでは紹介しません。
シリアル通信を使ってLEDの点灯を制御する
折角ですのでシリアル通信を使ってLEDの点灯制御をしてみましょう。
スケッチ
#define LEDpin 13 // LEDピンをマクロ定義
uint8_t c; // グローバル変数
void setup() {
// put your setup code here, to run once:
pinMode(LEDpin,OUTPUT); // LEDピンを出力設定
digitalWrite(LEDpin,LOW); // LEDオフ
Serial.begin(9600); // シリアル通信9600bpsで開始
Serial.println("SERIAL LED TEST"); // PCへ文字列送信
Serial.println("1 = ON : 0 = OFF"); // PCへ文字列送信
}
void loop() {
// put your main code here, to run repeatedly:
if( Serial.available() ){ // 受信データがあるかチェック
c = Serial.read(); // 1文字取り出し
if(c == '\n' || c == '\r') // エスケープシーケンスならスキップ
return;
switch(c){
case '0': // 0ならLEDオフ
digitalWrite(LEDpin, LOW);
Serial.print("LED OFF!\n");
break;
case '1': // 1ならLEDオン
digitalWrite(LEDpin, HIGH);
Serial.print("LED ON!\n");
break;
default:
Serial.print("no such command\n");
break;
}
}
}
動作の確認
難しい事はしていません。「0」を送信すればLEDがオフして「1」を送信すればオンになるという簡単なスケッチです。「0」と「1」以外の時は適当なメッセージを返すようにしてあります。
まとめ
いかがでしたか、シリアル通信を使うと動作中のArduinoにコマンドが送れて操作できるようになるので便利ではないでしょうか。
数値を扱うなら一工夫する必要があったりしますが、ちょっとしたプログラムのデバッグにも使えますし何より簡単な手順で使えるのでぜひ試してみてください。