aaa
Dependencies: mbed BNO055_fusion Adafruit_GFX ros_lib_kinetic
Diff: myCan.h
- Revision:
- 8:80708bacb5b5
- Parent:
- 7:b240464868e8
diff -r b240464868e8 -r 80708bacb5b5 myCan.h --- a/myCan.h Tue Dec 18 22:06:34 2018 +0000 +++ b/myCan.h Thu Dec 20 20:54:35 2018 +0000 @@ -12,30 +12,38 @@ typedef uint16_t FIXED_NUM_16; typedef union{ - char array[8]; + char array[6]; struct{ uint8_t frameName; - uint8_t id; FIXED_NUM_16 x; FIXED_NUM_16 y; + uint8_t use_can_ack; }data; }can_odom_xy_t; -//pose initializeとフレームを共用にするためcourt_colorを入れた -//通常のデータ送信では使わない typedef union{ -// char array[8]; - uint8_t array[8]; + char array[6]; struct{ uint8_t frameName; - uint8_t id; uint8_t angle[4]; - uint8_t court_color; + uint8_t use_can_ack; }data; }can_odom_angle_t; +typedef union{ + char array[3]; + + struct{ + uint8_t frameName; + uint8_t court_color : 1; + uint8_t enable_oled : 1; + uint8_t unuse : 6; + uint8_t use_can_ack; + }data; +}can_odom_config_t; + #define NORMAL_TYPE (0x00) #define PING_TYPE (0x01) #define ACK_TYPE (0x02) @@ -43,7 +51,7 @@ #define ID_MAIN (0x00) #define ID_ODOM (0x01) -#define FIXED_NUM_INT_MAX 0x0f +#define FIXED_NUM_INT_MAX (0x0f) #define CAN_FILTER_SID_MASK (0x07ff) #define CAN_FILTER_TYP_MASK (0x0007) #define CAN_FILTER_SND_MASK (0x0078) @@ -53,7 +61,8 @@ #define ODOM_DATA_ANGLE (0xa1) #define ODOM_SET_INITIAL_XY (0xa2) #define ODOM_SET_INITIAL_ANGLE (0xa3) -#define ODOM_RESET (0xa4) +#define ODOM_SET_CONFIG (0xa4) +#define ODOM_RESET (0xa5) /* CAN_GLOBAL DEFINE END */ class My_Can : public Odom_Abstract, CAN @@ -63,11 +72,14 @@ FunctionPointer led_toggle_; Timer timer_; + + bool enable_send_odom_; public: My_Can(Odom *odom) : Odom_Abstract(odom), CAN(PB_8, PB_9, 1000000){ filter(CreateSid(0, ID_MAIN, ID_ODOM), CAN_FILTER_SND_MASK | CAN_FILTER_DST_MASK, CANStandard); timer_.start(); + enable_send_odom_ = false; } void initialize_amcl_attach(My_Ros *object, void (My_Ros::*member)(void)){ @@ -91,6 +103,7 @@ private: void check_initial_frame(uint8_t *data); + void send_odom(); FIXED_NUM_16 EncodeFixedNumber(float fn){ uint16_t sign_part = 0;