a

Dependencies:   mbed

YKNCT_I2C_lib/YKNCT_I2C.h

Committer:
Tom0108
Date:
2019-10-11
Revision:
20:3f68738c4019
Parent:
0:761a63c6d020

File content as of revision 20:3f68738c4019:

#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