Library for receiving 2021NHK Bteam Controller

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

Committer:
piroro4560
Date:
Sat Oct 16 13:41:01 2021 +0000
Revision:
1:a8f5f13b0840
Parent:
0:9ea2a0d8b9d9
Child:
2:e97f32749217
doxygen

Who changed what in which revision?

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