BLE Nano -> Arduino連携時のデータ送信

シリアル経由のデータやり取りは、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);
    }
}