複数の文字をシリアル通信で受信する方法を紹介します。
結論:下記スケッチを使え!
//参考サイト:http://ch.nicovideo.jp/yugata/blomaga/ar1177727
void setup() {
Serial.begin(115200);
}
void loop() {
if (Serial.available() > 0)
{
str = Serial.readStringUntil(';'); //「;」を検出したら終了
Serial.println(str);
str = "";
//ここは、シリアル受信したときに実行する
}
//ここは、何もシリアル受信していないときに実行する
}
よく、いろいろなサイトで紹介されているのは、次のスケッチです。
//参考サイト:http://denshi.blog.jp/arduino/serial
void setup(){
// シリアルポートを9600 bps[ビット/秒]で初期化
Serial.begin(9600);
}
void loop(){
int input;
// シリアルポートより1文字読み込む
input = Serial.read();
if(input != -1 ){
// 受け取った文字を送信
Serial.write(input);
Serial.write("\n");
}
}
しかし、このスケッチには欠点があります。
それは…
シリアル受信に使う「Serial.read();」は、受信データの1バイトのみを返すコマンドです。(→参考サイト)
よって、複数の文字を受信する際は、「void loop()」を何回も繰り返して1バイトずつ読み取る必要があるのです。
そのため、void loop()内に書かれたスケッチも同時に実行されてしまいます。
はじめに記載したスケッチでは、「str = Serial.readStringUntil(‘;’);」の部分で、終了コマンド(ここでは「;」)を検出するまで待機するので、それより下は受信後に実行されます。
(そのため、シリアル送信側は「[送りたい文字列]+[終了コマンド]」の形で送る必要があります。)
コメントを残す