![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
a
Diff: YKNCT_I2C_lib/YKNCT_I2C.h
- Revision:
- 0:761a63c6d020
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/YKNCT_I2C_lib/YKNCT_I2C.h Thu Aug 22 09:26:20 2019 +0000 @@ -0,0 +1,116 @@ +#ifndef INCLUDED_I2C_h_ +#define INCLUDED_I2C_h_ + +#include "mbed.h" +/* マクロ定義 ----------------------------------------------------------------*/ + +/** + @brief MDデータ構造内のモーターに出力するPWM値をセットする + @param __MD_DATA__: MDデータ構造 + @param __NUMBER__: MDデータ構造の番号 + @param __PWMVAL__: セットするPWMの値 + @retval None +*/ +#define MD_SET_PWM(__MD_DATA__, __NUMBER__, __PWMVAL__) \ + (((__MD_DATA__) + (__NUMBER__))->PWMVal = (__PWMVAL__)) + +/** + @brief MD用データ構造内のモーターの動作状態をセットする + @param __MD_DATA__: MDデータ構造 + @param __NUMBER__: MDデータ構造の番号 + @param __STATUS__: 動作させたいモーターの状態 + @arg MD_BRAKE ブレーキ + @arg MD_FORWARD 正転 + @arg MD_REVERSE 逆転 + @retval None +*/ +#define MD_SET_DRIVE(__MD_DATA__, __NUMBER__, __STATUS__) \ + (((__MD_DATA__) + (__NUMBER__))->DriveStatus = (__STATUS__)) + +/** + @brief MD用にMDデータ構造にセットされたPWM値を取得する + @param __MD_DATA__: MDデータ構造 + @param __NUMBER__: MDデータ構造の番号 + @retval PWM値 +*/ +#define MD_GET_PWM(__MD_DATA__, __NUMBER__) \ + (((__MD_DATA__) + (__NUMBER__))->PWMVal) + +/** + @brief MD用にMDデータ構造にセットされたモーターの動作状態を取得する + @param __MD_DATA__: MDデータ構造 + @param __NUMBER__: MDデータ構造の番号 + @retval モーターの動作状態 +*/ +#define MD_GET_DRIVE(__MD_DATA__, __NUMBER__) \ + (((__MD_DATA__) + (__NUMBER__))->DriveStatus) + + + +#define GET_IN(__IN_I2C_Data__,__NUM__) (__IN_I2C_Data__+(__NUM__)) -> in_data +#define GET_ADC(__ADC_I2C_Data__,__NUM__) (__ADC_I2C_Data__+(__NUM__)) ->adc_data +#define GET_ENC(__ENC_I2C_Data__,__NUM__) (__ENC_I2C_Data__ + (__NUM__))->enc_data + + +typedef struct { + uint8_t DevAddress; /* 通信相手デバイスのアドレス */ + uint8_t Number; /* PICから出力出来る2つのMDの出力先指定(0or1) */ + uint8_t PWMVal; /* モーターに出力するPWM値(0~100) */ + uint8_t DriveStatus; /* モーターの動作状態MD_DriveStatus_TypeDefを代入 */ + char pData[2]; /* PICに送信するデータ用領域 */ +} MD_I2C_Data_TypeDef; + +typedef struct { + uint8_t DevAddress; + uint8_t Number; + bool out_data; +} OUT_I2C_Data_TypeDef; + +typedef struct { + uint8_t DevAddress; + uint8_t Number; + bool in_data; +} IN_I2C_Data_TypeDef; + +typedef struct { + uint8_t DevAddress; + uint8_t Number; + uint16_t adc_data; +} ADC_I2C_Data_TypeDef; + +typedef struct { + uint8_t DevAddress; + int32_t enc_data; +} ENC_I2C_Data_TypeDef; + +typedef struct { + uint8_t DevAddress; + uint8_t Number; + uint16_t pulse; +} SERVO_I2C_Data_TypeDef; + +typedef enum { + MD_BRAKE = 0x00U, + MD_FORWARD = 0x01U, + MD_REVERSE = 0x02U +} MD_DriveStatus_TypeDef; + +class Y_I2C +{ +private: + I2C i2c; + +public: + Y_I2C(PinName sda, PinName scl); + void Out_Set(OUT_I2C_Data_TypeDef *OUT_I2C_Data, uint8_t num, uint8_t value); + void Out(OUT_I2C_Data_TypeDef *OUT_I2C_Data, uint8_t MAX); + void Servo_Set(SERVO_I2C_Data_TypeDef *SERVO_I2C_Data, uint8_t num, uint16_t pulse); + void Servo(SERVO_I2C_Data_TypeDef *SERVO_I2C_Data, uint8_t MAX); + void In(IN_I2C_Data_TypeDef *IN_I2C_Data, uint8_t num); + void Adc(ADC_I2C_Data_TypeDef *ADC_I2C_Data, uint8_t num); + void Enc(ENC_I2C_Data_TypeDef *ENC_I2C_Data, uint8_t num); + void MD_I2C(MD_I2C_Data_TypeDef *MD_I2C_Data, uint8_t num); + void MD_I2C_Empty(MD_I2C_Data_TypeDef *MD_I2C_Data, uint8_t num); +}; + +#endif \ No newline at end of file