シリアル経由のデータやり取りは、1文字ずつしか送れないため、シリアルモニターにも1文字ずつしか出力できない。そのため、終端文字を一緒に送って、「ここから、ここまでのデータを送るよ」と伝える必要がある。
(例)1111.111 ← 「1111.111」を送りたい。データの切れ目として「 」(NULL終端文字)も一緒に送り、ここがデータの最後であることを伝える
■接続イメージ
BLE Nano(TX) -> (11番PIN)Arduino UNO
■送信データ(BLE Nano -> Arduino UNO)
1111.111
■そのまま出力した場合
シリアルモニターには以下のように1文字ずつ出力されてしまう
-----------------------------------------------------------------
1
1
1
1
.
1
1
1
-----------------------------------------------------------------
■データをためて一気に出力する場合のソース例(Arduino UNO側のソース)
#include
#define BLUETOOTH_TX 11
#define BLUETOOTH_RX 10
SoftwareSerial bluetooth(BLUETOOTH_TX,BLUETOOTH_RX);
char buffer; // BLUETOOTH_RXで受信する文字(1文字)
String value; // BLUETOOTH_RXで受信した文字をためる
char term_char = ' '; // 受信終了を判断する終端文字
void setup() {
Serial.begin(9600);
bluetooth.begin(9600);
}
void loop() {
if(bluetooth.available()) {
// 以下のソースだと1文字ずつシリアルに出力されてしまう
//char value = (char)bluetooth.read();
//Serial.println(value);
// 受信した文字列(1文字ずつ)を変数にためてから一気に出力させる
buffer = bluetooth.read();
value = value + buffer;
// 終端文字を受け取ったら出力して初期化
if(buffer == term_char) {
Serial.print(value);
value = " "; // 初期化
}
}
}
■(オマケ)BLE Nano側のソース
#include "mbed.h"
Serial pc(USBTX, USBRX);
int main() {
int counter = 1;
while(1) {
pc.printf("counter=%d ", counter);
counter++;
if(counter > 50)
counter = 1;
wait(1.0);
}
}