Library for receiving 2021NHK Bteam Controller

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

Revision:
0:9ea2a0d8b9d9
Child:
1:a8f5f13b0840
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/controller.h	Sat Oct 16 05:24:37 2021 +0000
@@ -0,0 +1,71 @@
+/**
+ *  @file   controller.h
+ *  @brief  2021Bcon受信用ライブラリ
+ *  @author 安澤瑠
+ *  @date   21/10/16
+ */
+#ifndef CONTROLLER_H
+#define CONTROLLER_H
+
+#define TIMEOUT_COUNT 5
+#define DATANUM 5 // ボタン(BusIn)が1 スティックが4 BController_TX側のFEPライブラリと連携していないとダメ
+
+#include "mbed.h"
+
+/**
+ *  @class con 
+ *  @brief class for receiving 2021Bcon data
+ *  @note  mbed-os 6 では使えません。  Not compatible with mbed-os 6
+ */
+class Bcon : public RawSerial {
+public :
+    /** constructor
+     *  @param tx   FEPと接続するSerialTX pin
+     *  @param rx   FEPと接続するSerialRX pin
+     *  @param addr 通信相手のアドレス
+     *  @param baud 通信速度(デフォルト115200)
+     */
+    Bcon(PinName tx, PinName rx, uint8_t addr_, int baud=115200);
+
+    /** Start receiving
+     */
+    void StartReceive();
+    
+    /** Check timeout
+     * @brief 0.1秒毎のループで受信のタイムアウトをチェック
+     */
+    void TimeoutLoop();
+
+    /** Interrupt input
+     */
+    void ReceiveBytes();
+
+    /** extract the message
+     */
+    void CheckData();
+
+    /** Write the received message
+     *  @param data 受信メッセージを格納する配列
+     */
+    void GetData(uint8_t *data);
+    
+    bool getButton(uint8_t n); //! BusInの計算をしてボタンの値を返す。
+    int16_t getStick(uint8_t n); //! スティックの値を返す。中心を0,範囲は-128 ~ 128とする。
+    
+    bool status; //! (TIMEOUT_COUNT * 0.1)秒間通信が来ていないと0
+
+private :
+    
+    Ticker timeoutTimer;
+
+    uint8_t addr;         //! 通信相手のアドレス
+    uint8_t buffer[256];  //! 全受信データを格納するリングバッファ配列
+    uint8_t retdata[128]; //! メッセージのみを格納する配列
+    uint8_t bufindex;     //! buffer の添え字変数
+    uint8_t retindex;     //! retdata の添え字変数
+    uint8_t timeout;      //! 0.1秒間通信が成功していないと1増える
+    uint8_t sum;
+    uint8_t stick[4];
+};
+
+#endif
\ No newline at end of file