a

Dependencies:   mbed

Committer:
Tom0108
Date:
Fri Oct 11 07:29:15 2019 +0000
Revision:
20:3f68738c4019
Parent:
0:761a63c6d020
Gyro reset measures

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Tom0108 0:761a63c6d020 1 #ifndef INCLUDED_I2C_h_
Tom0108 0:761a63c6d020 2 #define INCLUDED_I2C_h_
Tom0108 0:761a63c6d020 3
Tom0108 0:761a63c6d020 4 #include "mbed.h"
Tom0108 0:761a63c6d020 5 /* マクロ定義 ----------------------------------------------------------------*/
Tom0108 0:761a63c6d020 6
Tom0108 0:761a63c6d020 7 /**
Tom0108 0:761a63c6d020 8 @brief MDデータ構造内のモーターに出力するPWM値をセットする
Tom0108 0:761a63c6d020 9 @param __MD_DATA__: MDデータ構造
Tom0108 0:761a63c6d020 10 @param __NUMBER__: MDデータ構造の番号
Tom0108 0:761a63c6d020 11 @param __PWMVAL__: セットするPWMの値
Tom0108 0:761a63c6d020 12 @retval None
Tom0108 0:761a63c6d020 13 */
Tom0108 0:761a63c6d020 14 #define MD_SET_PWM(__MD_DATA__, __NUMBER__, __PWMVAL__) \
Tom0108 0:761a63c6d020 15 (((__MD_DATA__) + (__NUMBER__))->PWMVal = (__PWMVAL__))
Tom0108 0:761a63c6d020 16
Tom0108 0:761a63c6d020 17 /**
Tom0108 0:761a63c6d020 18 @brief MD用データ構造内のモーターの動作状態をセットする
Tom0108 0:761a63c6d020 19 @param __MD_DATA__: MDデータ構造
Tom0108 0:761a63c6d020 20 @param __NUMBER__: MDデータ構造の番号
Tom0108 0:761a63c6d020 21 @param __STATUS__: 動作させたいモーターの状態
Tom0108 0:761a63c6d020 22 @arg MD_BRAKE ブレーキ
Tom0108 0:761a63c6d020 23 @arg MD_FORWARD 正転
Tom0108 0:761a63c6d020 24 @arg MD_REVERSE 逆転
Tom0108 0:761a63c6d020 25 @retval None
Tom0108 0:761a63c6d020 26 */
Tom0108 0:761a63c6d020 27 #define MD_SET_DRIVE(__MD_DATA__, __NUMBER__, __STATUS__) \
Tom0108 0:761a63c6d020 28 (((__MD_DATA__) + (__NUMBER__))->DriveStatus = (__STATUS__))
Tom0108 0:761a63c6d020 29
Tom0108 0:761a63c6d020 30 /**
Tom0108 0:761a63c6d020 31 @brief MD用にMDデータ構造にセットされたPWM値を取得する
Tom0108 0:761a63c6d020 32 @param __MD_DATA__: MDデータ構造
Tom0108 0:761a63c6d020 33 @param __NUMBER__: MDデータ構造の番号
Tom0108 0:761a63c6d020 34 @retval PWM値
Tom0108 0:761a63c6d020 35 */
Tom0108 0:761a63c6d020 36 #define MD_GET_PWM(__MD_DATA__, __NUMBER__) \
Tom0108 0:761a63c6d020 37 (((__MD_DATA__) + (__NUMBER__))->PWMVal)
Tom0108 0:761a63c6d020 38
Tom0108 0:761a63c6d020 39 /**
Tom0108 0:761a63c6d020 40 @brief MD用にMDデータ構造にセットされたモーターの動作状態を取得する
Tom0108 0:761a63c6d020 41 @param __MD_DATA__: MDデータ構造
Tom0108 0:761a63c6d020 42 @param __NUMBER__: MDデータ構造の番号
Tom0108 0:761a63c6d020 43 @retval モーターの動作状態
Tom0108 0:761a63c6d020 44 */
Tom0108 0:761a63c6d020 45 #define MD_GET_DRIVE(__MD_DATA__, __NUMBER__) \
Tom0108 0:761a63c6d020 46 (((__MD_DATA__) + (__NUMBER__))->DriveStatus)
Tom0108 0:761a63c6d020 47
Tom0108 0:761a63c6d020 48
Tom0108 0:761a63c6d020 49
Tom0108 0:761a63c6d020 50 #define GET_IN(__IN_I2C_Data__,__NUM__) (__IN_I2C_Data__+(__NUM__)) -> in_data
Tom0108 0:761a63c6d020 51 #define GET_ADC(__ADC_I2C_Data__,__NUM__) (__ADC_I2C_Data__+(__NUM__)) ->adc_data
Tom0108 0:761a63c6d020 52 #define GET_ENC(__ENC_I2C_Data__,__NUM__) (__ENC_I2C_Data__ + (__NUM__))->enc_data
Tom0108 0:761a63c6d020 53
Tom0108 0:761a63c6d020 54
Tom0108 0:761a63c6d020 55 typedef struct {
Tom0108 0:761a63c6d020 56 uint8_t DevAddress; /* 通信相手デバイスのアドレス */
Tom0108 0:761a63c6d020 57 uint8_t Number; /* PICから出力出来る2つのMDの出力先指定(0or1) */
Tom0108 0:761a63c6d020 58 uint8_t PWMVal; /* モーターに出力するPWM値(0~100) */
Tom0108 0:761a63c6d020 59 uint8_t DriveStatus; /* モーターの動作状態MD_DriveStatus_TypeDefを代入 */
Tom0108 0:761a63c6d020 60 char pData[2]; /* PICに送信するデータ用領域 */
Tom0108 0:761a63c6d020 61 } MD_I2C_Data_TypeDef;
Tom0108 0:761a63c6d020 62
Tom0108 0:761a63c6d020 63 typedef struct {
Tom0108 0:761a63c6d020 64 uint8_t DevAddress;
Tom0108 0:761a63c6d020 65 uint8_t Number;
Tom0108 0:761a63c6d020 66 bool out_data;
Tom0108 0:761a63c6d020 67 } OUT_I2C_Data_TypeDef;
Tom0108 0:761a63c6d020 68
Tom0108 0:761a63c6d020 69 typedef struct {
Tom0108 0:761a63c6d020 70 uint8_t DevAddress;
Tom0108 0:761a63c6d020 71 uint8_t Number;
Tom0108 0:761a63c6d020 72 bool in_data;
Tom0108 0:761a63c6d020 73 } IN_I2C_Data_TypeDef;
Tom0108 0:761a63c6d020 74
Tom0108 0:761a63c6d020 75 typedef struct {
Tom0108 0:761a63c6d020 76 uint8_t DevAddress;
Tom0108 0:761a63c6d020 77 uint8_t Number;
Tom0108 0:761a63c6d020 78 uint16_t adc_data;
Tom0108 0:761a63c6d020 79 } ADC_I2C_Data_TypeDef;
Tom0108 0:761a63c6d020 80
Tom0108 0:761a63c6d020 81 typedef struct {
Tom0108 0:761a63c6d020 82 uint8_t DevAddress;
Tom0108 0:761a63c6d020 83 int32_t enc_data;
Tom0108 0:761a63c6d020 84 } ENC_I2C_Data_TypeDef;
Tom0108 0:761a63c6d020 85
Tom0108 0:761a63c6d020 86 typedef struct {
Tom0108 0:761a63c6d020 87 uint8_t DevAddress;
Tom0108 0:761a63c6d020 88 uint8_t Number;
Tom0108 0:761a63c6d020 89 uint16_t pulse;
Tom0108 0:761a63c6d020 90 } SERVO_I2C_Data_TypeDef;
Tom0108 0:761a63c6d020 91
Tom0108 0:761a63c6d020 92 typedef enum {
Tom0108 0:761a63c6d020 93 MD_BRAKE = 0x00U,
Tom0108 0:761a63c6d020 94 MD_FORWARD = 0x01U,
Tom0108 0:761a63c6d020 95 MD_REVERSE = 0x02U
Tom0108 0:761a63c6d020 96 } MD_DriveStatus_TypeDef;
Tom0108 0:761a63c6d020 97
Tom0108 0:761a63c6d020 98 class Y_I2C
Tom0108 0:761a63c6d020 99 {
Tom0108 0:761a63c6d020 100 private:
Tom0108 0:761a63c6d020 101 I2C i2c;
Tom0108 0:761a63c6d020 102
Tom0108 0:761a63c6d020 103 public:
Tom0108 0:761a63c6d020 104 Y_I2C(PinName sda, PinName scl);
Tom0108 0:761a63c6d020 105 void Out_Set(OUT_I2C_Data_TypeDef *OUT_I2C_Data, uint8_t num, uint8_t value);
Tom0108 0:761a63c6d020 106 void Out(OUT_I2C_Data_TypeDef *OUT_I2C_Data, uint8_t MAX);
Tom0108 0:761a63c6d020 107 void Servo_Set(SERVO_I2C_Data_TypeDef *SERVO_I2C_Data, uint8_t num, uint16_t pulse);
Tom0108 0:761a63c6d020 108 void Servo(SERVO_I2C_Data_TypeDef *SERVO_I2C_Data, uint8_t MAX);
Tom0108 0:761a63c6d020 109 void In(IN_I2C_Data_TypeDef *IN_I2C_Data, uint8_t num);
Tom0108 0:761a63c6d020 110 void Adc(ADC_I2C_Data_TypeDef *ADC_I2C_Data, uint8_t num);
Tom0108 0:761a63c6d020 111 void Enc(ENC_I2C_Data_TypeDef *ENC_I2C_Data, uint8_t num);
Tom0108 0:761a63c6d020 112 void MD_I2C(MD_I2C_Data_TypeDef *MD_I2C_Data, uint8_t num);
Tom0108 0:761a63c6d020 113 void MD_I2C_Empty(MD_I2C_Data_TypeDef *MD_I2C_Data, uint8_t num);
Tom0108 0:761a63c6d020 114 };
Tom0108 0:761a63c6d020 115
Tom0108 0:761a63c6d020 116 #endif