自分用通信ライブラリ RS485で先頭識別子を使用した通信をするときに使う.

Dependencies:   BufferedSerial

Dependents:   FourOmniMecha

BufferdSerialを使用している.Arduinoライクに通信したいから

2020/3/6 GetBusSerial()にて先頭識別子付きの通信ができる.

2020/11/16 GetBusSerial()は廃止(使えるけれども).getBusSerialとかgetTimedBusSerialとかに変えた

Committer:
ttrist
Date:
Tue Mar 17 11:40:31 2020 +0000
Revision:
2:6895c7ec9db1
Parent:
1:62db8d68f92e
Child:
4:3b347fa779b7
delete SendBusSerial

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ttrist 0:418bb20836bd 1 #include "BusSerial.h"
ttrist 0:418bb20836bd 2
ttrist 0:418bb20836bd 3 BusSerial::BusSerial(PinName tx, PinName rx,Timer *timer):BufferedSerial(tx,rx)
ttrist 0:418bb20836bd 4 {
ttrist 0:418bb20836bd 5 _timer = timer;
ttrist 0:418bb20836bd 6 _timer -> start();
ttrist 0:418bb20836bd 7 }
ttrist 0:418bb20836bd 8
ttrist 0:418bb20836bd 9 void BusSerial::GetBusSerial(uint8_t *Argument_Array, int myHead_ID, int RecieveData_sizeof, int BusSerialTimeout)
ttrist 0:418bb20836bd 10 {
ttrist 0:418bb20836bd 11 long BusSerialTimeout_start_t = _timer->read_ms(); //タイマーセット
ttrist 0:418bb20836bd 12 for (int i = 0; i < RecieveData_sizeof; i++) *(Argument_Array + i) = 0; //データ初期化
ttrist 0:418bb20836bd 13
ttrist 0:418bb20836bd 14 //*** データ受信 ちゃんとなるまでループ(timeoutあり)***
ttrist 0:418bb20836bd 15 while (*Argument_Array != myHead_ID) {
ttrist 0:418bb20836bd 16 //*** 1byte読み込み ***
ttrist 0:418bb20836bd 17 if (readable() > 0) *Argument_Array = getc();
ttrist 0:418bb20836bd 18
ttrist 0:418bb20836bd 19 if (*Argument_Array == myHead_ID ) {
ttrist 0:418bb20836bd 20 int old_i = 0;
ttrist 0:418bb20836bd 21 //*** データ格納エリア ***
ttrist 0:418bb20836bd 22 for (int i = 1; i < RecieveData_sizeof; i++) {
ttrist 0:418bb20836bd 23 //格納中のtimeout処理用時間設定
ttrist 0:418bb20836bd 24 if (old_i != i) {
ttrist 0:418bb20836bd 25 old_i = i;
ttrist 0:418bb20836bd 26 BusSerialTimeout_start_t = _timer->read_ms(); //データ格納timeout用
ttrist 0:418bb20836bd 27 }
ttrist 0:418bb20836bd 28
ttrist 0:418bb20836bd 29 //***データ格納部***
ttrist 0:418bb20836bd 30 if (readable() > 0) {
ttrist 0:418bb20836bd 31 *(Argument_Array + i) = getc();
ttrist 0:418bb20836bd 32 } else {
ttrist 0:418bb20836bd 33 if (_timer->read_ms() - BusSerialTimeout_start_t > BusSerialTimeout) break;
ttrist 0:418bb20836bd 34 i--;
ttrist 0:418bb20836bd 35 }
ttrist 0:418bb20836bd 36 }
ttrist 0:418bb20836bd 37 }
ttrist 0:418bb20836bd 38 if (_timer->read_ms() - BusSerialTimeout_start_t > BusSerialTimeout) break;//timeout
ttrist 0:418bb20836bd 39 }
ttrist 2:6895c7ec9db1 40 }