Library for receiving 2021NHK Bteam Controller

Dependents:   2021NHK_Bcon_RX 2021NHK_B_syudo 2021NHK_B_main 2022kouroboBv2 ... more

Committer:
piroro4560
Date:
Sat Oct 16 05:24:37 2021 +0000
Revision:
0:9ea2a0d8b9d9
Child:
1:a8f5f13b0840
Test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
piroro4560 0:9ea2a0d8b9d9 1 /**
piroro4560 0:9ea2a0d8b9d9 2 * @file controller.h
piroro4560 0:9ea2a0d8b9d9 3 * @brief 2021Bcon受信用ライブラリ
piroro4560 0:9ea2a0d8b9d9 4 * @author 安澤瑠
piroro4560 0:9ea2a0d8b9d9 5 * @date 21/10/16
piroro4560 0:9ea2a0d8b9d9 6 */
piroro4560 0:9ea2a0d8b9d9 7 #ifndef CONTROLLER_H
piroro4560 0:9ea2a0d8b9d9 8 #define CONTROLLER_H
piroro4560 0:9ea2a0d8b9d9 9
piroro4560 0:9ea2a0d8b9d9 10 #define TIMEOUT_COUNT 5
piroro4560 0:9ea2a0d8b9d9 11 #define DATANUM 5 // ボタン(BusIn)が1 スティックが4 BController_TX側のFEPライブラリと連携していないとダメ
piroro4560 0:9ea2a0d8b9d9 12
piroro4560 0:9ea2a0d8b9d9 13 #include "mbed.h"
piroro4560 0:9ea2a0d8b9d9 14
piroro4560 0:9ea2a0d8b9d9 15 /**
piroro4560 0:9ea2a0d8b9d9 16 * @class con
piroro4560 0:9ea2a0d8b9d9 17 * @brief class for receiving 2021Bcon data
piroro4560 0:9ea2a0d8b9d9 18 * @note mbed-os 6 では使えません。 Not compatible with mbed-os 6
piroro4560 0:9ea2a0d8b9d9 19 */
piroro4560 0:9ea2a0d8b9d9 20 class Bcon : public RawSerial {
piroro4560 0:9ea2a0d8b9d9 21 public :
piroro4560 0:9ea2a0d8b9d9 22 /** constructor
piroro4560 0:9ea2a0d8b9d9 23 * @param tx FEPと接続するSerialTX pin
piroro4560 0:9ea2a0d8b9d9 24 * @param rx FEPと接続するSerialRX pin
piroro4560 0:9ea2a0d8b9d9 25 * @param addr 通信相手のアドレス
piroro4560 0:9ea2a0d8b9d9 26 * @param baud 通信速度(デフォルト115200)
piroro4560 0:9ea2a0d8b9d9 27 */
piroro4560 0:9ea2a0d8b9d9 28 Bcon(PinName tx, PinName rx, uint8_t addr_, int baud=115200);
piroro4560 0:9ea2a0d8b9d9 29
piroro4560 0:9ea2a0d8b9d9 30 /** Start receiving
piroro4560 0:9ea2a0d8b9d9 31 */
piroro4560 0:9ea2a0d8b9d9 32 void StartReceive();
piroro4560 0:9ea2a0d8b9d9 33
piroro4560 0:9ea2a0d8b9d9 34 /** Check timeout
piroro4560 0:9ea2a0d8b9d9 35 * @brief 0.1秒毎のループで受信のタイムアウトをチェック
piroro4560 0:9ea2a0d8b9d9 36 */
piroro4560 0:9ea2a0d8b9d9 37 void TimeoutLoop();
piroro4560 0:9ea2a0d8b9d9 38
piroro4560 0:9ea2a0d8b9d9 39 /** Interrupt input
piroro4560 0:9ea2a0d8b9d9 40 */
piroro4560 0:9ea2a0d8b9d9 41 void ReceiveBytes();
piroro4560 0:9ea2a0d8b9d9 42
piroro4560 0:9ea2a0d8b9d9 43 /** extract the message
piroro4560 0:9ea2a0d8b9d9 44 */
piroro4560 0:9ea2a0d8b9d9 45 void CheckData();
piroro4560 0:9ea2a0d8b9d9 46
piroro4560 0:9ea2a0d8b9d9 47 /** Write the received message
piroro4560 0:9ea2a0d8b9d9 48 * @param data 受信メッセージを格納する配列
piroro4560 0:9ea2a0d8b9d9 49 */
piroro4560 0:9ea2a0d8b9d9 50 void GetData(uint8_t *data);
piroro4560 0:9ea2a0d8b9d9 51
piroro4560 0:9ea2a0d8b9d9 52 bool getButton(uint8_t n); //! BusInの計算をしてボタンの値を返す。
piroro4560 0:9ea2a0d8b9d9 53 int16_t getStick(uint8_t n); //! スティックの値を返す。中心を0,範囲は-128 ~ 128とする。
piroro4560 0:9ea2a0d8b9d9 54
piroro4560 0:9ea2a0d8b9d9 55 bool status; //! (TIMEOUT_COUNT * 0.1)秒間通信が来ていないと0
piroro4560 0:9ea2a0d8b9d9 56
piroro4560 0:9ea2a0d8b9d9 57 private :
piroro4560 0:9ea2a0d8b9d9 58
piroro4560 0:9ea2a0d8b9d9 59 Ticker timeoutTimer;
piroro4560 0:9ea2a0d8b9d9 60
piroro4560 0:9ea2a0d8b9d9 61 uint8_t addr; //! 通信相手のアドレス
piroro4560 0:9ea2a0d8b9d9 62 uint8_t buffer[256]; //! 全受信データを格納するリングバッファ配列
piroro4560 0:9ea2a0d8b9d9 63 uint8_t retdata[128]; //! メッセージのみを格納する配列
piroro4560 0:9ea2a0d8b9d9 64 uint8_t bufindex; //! buffer の添え字変数
piroro4560 0:9ea2a0d8b9d9 65 uint8_t retindex; //! retdata の添え字変数
piroro4560 0:9ea2a0d8b9d9 66 uint8_t timeout; //! 0.1秒間通信が成功していないと1増える
piroro4560 0:9ea2a0d8b9d9 67 uint8_t sum;
piroro4560 0:9ea2a0d8b9d9 68 uint8_t stick[4];
piroro4560 0:9ea2a0d8b9d9 69 };
piroro4560 0:9ea2a0d8b9d9 70
piroro4560 0:9ea2a0d8b9d9 71 #endif