mirror of
https://github.com/openharmony/device_bearpi_bearpi_hm_nano.git
synced 2026-07-01 22:14:04 -04:00
@@ -37,6 +37,9 @@
|
||||
#define MPU6050_RA_USER_CTRL 0x6A
|
||||
#define MPU6050_RA_PWR_MGMT_1 0x6B
|
||||
#define MPU6050_RA_WHO_AM_I 0x75
|
||||
#define SENSOR_DATA_WIDTH_8_BIT 8 // 8 bit
|
||||
#define ACCEL_DATA_LEN 6
|
||||
#define TEMP_DATA_LEN 2
|
||||
|
||||
typedef enum
|
||||
{
|
||||
@@ -44,6 +47,25 @@ typedef enum
|
||||
ON
|
||||
} E53SC2Status;
|
||||
|
||||
enum AccelAxisNum {
|
||||
ACCEL_X_AXIS = 0,
|
||||
ACCEL_Y_AXIS = 1,
|
||||
ACCEL_Z_AXIS = 2,
|
||||
ACCEL_AXIS_NUM = 3,
|
||||
};
|
||||
enum AccelAxisPart {
|
||||
ACCEL_X_AXIS_LSB = 0,
|
||||
ACCEL_X_AXIS_MSB = 1,
|
||||
ACCEL_Y_AXIS_LSB = 2,
|
||||
ACCEL_Y_AXIS_MSB = 3,
|
||||
ACCEL_Z_AXIS_LSB = 4,
|
||||
ACCEL_Z_AXIS_MSB = 5,
|
||||
ACCEL_AXIS_BUTT,
|
||||
};
|
||||
enum TempPart {
|
||||
TEMP_LSB = 0,
|
||||
TEMP_MSB = 1,
|
||||
};
|
||||
/* E53_SC2传感器数据类型定义 ------------------------------------------------------------*/
|
||||
typedef struct
|
||||
{
|
||||
@@ -51,7 +73,6 @@ typedef struct
|
||||
short Accel[3];
|
||||
} E53SC2Data;
|
||||
|
||||
|
||||
int E53SC2Init(void);
|
||||
int E53SC2ReadData(E53SC2Data *ReadData);
|
||||
void LedD1StatusSet(E53SC2Status status);
|
||||
|
||||
@@ -30,6 +30,12 @@
|
||||
#define WIFI_IOT_IO_FUNC_GPIO_8_GPIO 0
|
||||
#define WIFI_IOT_IO_FUNC_GPIO_7_GPIO 0
|
||||
#define WIFI_IOT_I2C_IDX_1 1
|
||||
#define WIFI_IOT_IO_NAME_GPIO_7 7
|
||||
#define WIFI_IOT_IO_NAME_GPIO_8 8
|
||||
#define WIFI_IOT_IO_NAME_GPIO_0 0
|
||||
#define WIFI_IOT_IO_NAME_GPIO_1 1
|
||||
#define RESET_DELAY_US 20000
|
||||
#define READ_DATA_DELAY_US 50000
|
||||
|
||||
/***************************************************************
|
||||
* 函数名称: E53SC2IoInit
|
||||
@@ -39,18 +45,18 @@
|
||||
***************************************************************/
|
||||
static void E53SC2IoInit(void)
|
||||
{
|
||||
IoTGpioInit(8);
|
||||
IoTGpioSetFunc(8, WIFI_IOT_IO_FUNC_GPIO_8_GPIO);
|
||||
IoTGpioSetDir(8, IOT_GPIO_DIR_OUT); //设置GPIO_8为输出模式
|
||||
IoTGpioInit(WIFI_IOT_IO_NAME_GPIO_8);
|
||||
IoTGpioSetFunc(WIFI_IOT_IO_NAME_GPIO_8, WIFI_IOT_IO_FUNC_GPIO_8_GPIO);
|
||||
IoTGpioSetDir(WIFI_IOT_IO_NAME_GPIO_8, IOT_GPIO_DIR_OUT); // 设置GPIO_8为输出模式
|
||||
|
||||
IoTGpioInit(7);
|
||||
IoTGpioSetFunc(7, WIFI_IOT_IO_FUNC_GPIO_7_GPIO);
|
||||
IoTGpioSetDir(7, IOT_GPIO_DIR_OUT); //设置GPIO_7为输出模式
|
||||
IoTGpioInit(WIFI_IOT_IO_NAME_GPIO_7);
|
||||
IoTGpioSetFunc(WIFI_IOT_IO_NAME_GPIO_7, WIFI_IOT_IO_FUNC_GPIO_7_GPIO);
|
||||
IoTGpioSetDir(WIFI_IOT_IO_NAME_GPIO_7, IOT_GPIO_DIR_OUT); // 设置GPIO_7为输出模式
|
||||
|
||||
IoTGpioInit(0);
|
||||
IoTGpioSetFunc(0, WIFI_IOT_IO_FUNC_GPIO_0_I2C1_SDA); // GPIO_0复用为I2C1_SDA
|
||||
IoTGpioInit(1);
|
||||
IoTGpioSetFunc(1, WIFI_IOT_IO_FUNC_GPIO_1_I2C1_SCL); // GPIO_1复用为I2C1_SCL
|
||||
IoTGpioInit(WIFI_IOT_IO_NAME_GPIO_0);
|
||||
IoTGpioSetFunc(WIFI_IOT_IO_NAME_GPIO_0, WIFI_IOT_IO_FUNC_GPIO_0_I2C1_SDA); // GPIO_0复用为I2C1_SDA
|
||||
IoTGpioInit(WIFI_IOT_IO_NAME_GPIO_1);
|
||||
IoTGpioSetFunc(WIFI_IOT_IO_NAME_GPIO_1, WIFI_IOT_IO_FUNC_GPIO_1_I2C1_SCL); // GPIO_1复用为I2C1_SCL
|
||||
IoTI2cInit(WIFI_IOT_I2C_IDX_1, 400000); /* baudrate: 400kbps */
|
||||
}
|
||||
/***************************************************************
|
||||
@@ -157,14 +163,14 @@ static int MPU6050ReadData(uint8_t reg_add, unsigned char* read, uint8_t num)
|
||||
static int MPU6050ReadAcc(short* accData)
|
||||
{
|
||||
int ret;
|
||||
uint8_t buf[6];
|
||||
ret = MPU6050ReadData(MPU6050_ACC_OUT, buf, 6);
|
||||
uint8_t buf[ACCEL_DATA_LEN];
|
||||
ret = MPU6050ReadData(MPU6050_ACC_OUT, buf, ACCEL_DATA_LEN);
|
||||
if (ret != 0) {
|
||||
return -1;
|
||||
}
|
||||
accData[0] = (buf[0] << 8) | buf[1];
|
||||
accData[1] = (buf[2] << 8) | buf[3];
|
||||
accData[2] = (buf[4] << 8) | buf[5];
|
||||
accData[ACCEL_X_AXIS] = (buf[ACCEL_X_AXIS_LSB] << SENSOR_DATA_WIDTH_8_BIT) | buf[ACCEL_X_AXIS_MSB];
|
||||
accData[ACCEL_Y_AXIS] = (buf[ACCEL_Y_AXIS_LSB] << SENSOR_DATA_WIDTH_8_BIT) | buf[ACCEL_Y_AXIS_MSB];
|
||||
accData[ACCEL_Z_AXIS] = (buf[ACCEL_Z_AXIS_LSB] << SENSOR_DATA_WIDTH_8_BIT) | buf[ACCEL_Z_AXIS_MSB];
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -177,14 +183,14 @@ static int MPU6050ReadAcc(short* accData)
|
||||
static int MPU6050ReadGyro(short* gyroData)
|
||||
{
|
||||
int ret;
|
||||
uint8_t buf[6];
|
||||
ret = MPU6050ReadData(MPU6050_GYRO_OUT, buf, 6);
|
||||
uint8_t buf[ACCEL_DATA_LEN];
|
||||
ret = MPU6050ReadData(MPU6050_GYRO_OUT, buf, ACCEL_DATA_LEN);
|
||||
if (ret != 0) {
|
||||
return -1;
|
||||
}
|
||||
gyroData[0] = (buf[0] << 8) | buf[1];
|
||||
gyroData[1] = (buf[2] << 8) | buf[3];
|
||||
gyroData[2] = (buf[4] << 8) | buf[5];
|
||||
gyroData[ACCEL_X_AXIS] = (buf[ACCEL_X_AXIS_LSB] << SENSOR_DATA_WIDTH_8_BIT) | buf[ACCEL_X_AXIS_MSB];
|
||||
gyroData[ACCEL_Y_AXIS] = (buf[ACCEL_Y_AXIS_LSB] << SENSOR_DATA_WIDTH_8_BIT) | buf[ACCEL_Y_AXIS_MSB];
|
||||
gyroData[ACCEL_Z_AXIS] = (buf[ACCEL_Z_AXIS_LSB] << SENSOR_DATA_WIDTH_8_BIT) | buf[ACCEL_Z_AXIS_MSB];
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -197,12 +203,12 @@ static int MPU6050ReadGyro(short* gyroData)
|
||||
static int MPU6050ReadTemp(short* tempData)
|
||||
{
|
||||
int ret;
|
||||
uint8_t buf[2];
|
||||
ret = MPU6050ReadData(MPU6050_RA_TEMP_OUT_H, buf, 2); //读取温度值
|
||||
uint8_t buf[TEMP_DATA_LEN];
|
||||
ret = MPU6050ReadData(MPU6050_RA_TEMP_OUT_H, buf, TEMP_DATA_LEN); // 读取温度值
|
||||
if (ret != 0) {
|
||||
return -1;
|
||||
}
|
||||
*tempData = (buf[0] << 8) | buf[1];
|
||||
*tempData = (buf[TEMP_LSB] << SENSOR_DATA_WIDTH_8_BIT) | buf[TEMP_MSB];
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -216,14 +222,15 @@ static int MPU6050ReturnTemp(short* Temperature)
|
||||
{
|
||||
int ret;
|
||||
short temp3;
|
||||
uint8_t buf[2];
|
||||
uint8_t buf[TEMP_DATA_LEN];
|
||||
|
||||
ret = MPU6050ReadData(MPU6050_RA_TEMP_OUT_H, buf, 2); //读取温度值
|
||||
ret = MPU6050ReadData(MPU6050_RA_TEMP_OUT_H, buf, TEMP_DATA_LEN); // 读取温度值
|
||||
if (ret != 0) {
|
||||
return -1;
|
||||
}
|
||||
temp3 = (buf[0] << 8) | buf[1];
|
||||
temp3 = (buf[TEMP_LSB] << SENSOR_DATA_WIDTH_8_BIT) | buf[TEMP_MSB];
|
||||
*Temperature = (((double)(temp3 + 13200)) / 280) - 13;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/***************************************************************
|
||||
@@ -232,20 +239,20 @@ static int MPU6050ReturnTemp(short* Temperature)
|
||||
* 返 回 值: 无
|
||||
* 说 明: 无
|
||||
**************************************************************/
|
||||
void FreeFallInterrupt(void) //自由落体中断
|
||||
void FreeFallInterrupt(void) // 自由落体中断
|
||||
{
|
||||
MPU6050WriteReg(MPU6050_RA_FF_THR, 0x01); //自由落体阈值
|
||||
MPU6050WriteReg(MPU6050_RA_FF_DUR, 0x01); //自由落体检测时间20ms 单位1ms 寄存器0X20
|
||||
MPU6050WriteReg(MPU6050_RA_FF_THR, 0x01); // 自由落体阈值
|
||||
MPU6050WriteReg(MPU6050_RA_FF_DUR, 0x01); // 自由落体检测时间20ms 单位1ms 寄存器0X20
|
||||
}
|
||||
void MotionInterrupt(void) //运动中断
|
||||
void MotionInterrupt(void) // 运动中断
|
||||
{
|
||||
MPU6050WriteReg(MPU6050_RA_MOT_THR, 0x03); //运动阈值
|
||||
MPU6050WriteReg(MPU6050_RA_MOT_DUR, 0x14); //检测时间20ms 单位1ms 寄存器0X20
|
||||
MPU6050WriteReg(MPU6050_RA_MOT_THR, 0x03); // 运动阈值
|
||||
MPU6050WriteReg(MPU6050_RA_MOT_DUR, 0x14); // 检测时间20ms 单位1ms 寄存器0X20
|
||||
}
|
||||
void ZeroMotionInterrupt(void) //静止中断
|
||||
void ZeroMotionInterrupt(void) // 静止中断
|
||||
{
|
||||
MPU6050WriteReg(MPU6050_RA_ZRMOT_THR, 0x20); //静止阈值
|
||||
MPU6050WriteReg(MPU6050_RA_ZRMOT_DUR, 0x20); //静止检测时间20ms 单位1ms 寄存器0X20
|
||||
MPU6050WriteReg(MPU6050_RA_ZRMOT_THR, 0x20); // 静止阈值
|
||||
MPU6050WriteReg(MPU6050_RA_ZRMOT_DUR, 0x20); // 静止检测时间20ms 单位1ms 寄存器0X20
|
||||
}
|
||||
|
||||
/***************************************************************
|
||||
@@ -256,26 +263,19 @@ void ZeroMotionInterrupt(void) //静止中断
|
||||
***************************************************************/
|
||||
void MPU6050Init(void)
|
||||
{
|
||||
int i = 0, j = 0;
|
||||
//在初始化之前要延时一段时间,若没有延时,则断电后再上电数据可能会出错
|
||||
for (i = 0; i < 1000; i++) {
|
||||
for (j = 0; j < 1000; j++) {
|
||||
;
|
||||
}
|
||||
}
|
||||
MPU6050WriteReg(MPU6050_RA_PWR_MGMT_1, 0X80); //复位MPU6050
|
||||
usleep(20000);
|
||||
MPU6050WriteReg(MPU6050_RA_PWR_MGMT_1, 0X00); //唤醒MPU6050
|
||||
MPU6050WriteReg(MPU6050_RA_INT_ENABLE, 0X00); //关闭所有中断
|
||||
MPU6050WriteReg(MPU6050_RA_PWR_MGMT_1, 0X80); // 复位MPU6050
|
||||
usleep(RESET_DELAY_US);
|
||||
MPU6050WriteReg(MPU6050_RA_PWR_MGMT_1, 0X00); // 唤醒MPU6050
|
||||
MPU6050WriteReg(MPU6050_RA_INT_ENABLE, 0X00); // 关闭所有中断
|
||||
MPU6050WriteReg(MPU6050_RA_USER_CTRL, 0X00); // I2C主模式关闭
|
||||
MPU6050WriteReg(MPU6050_RA_FIFO_EN, 0X00); //关闭FIFO
|
||||
MPU6050WriteReg(MPU6050_RA_FIFO_EN, 0X00); // 关闭FIFO
|
||||
MPU6050WriteReg(MPU6050_RA_INT_PIN_CFG,
|
||||
0X80); //中断的逻辑电平模式,设置为0,中断信号为高电;设置为1,中断信号为低电平时。
|
||||
MotionInterrupt(); //运动中断
|
||||
MPU6050WriteReg(MPU6050_RA_CONFIG, 0x04); //配置外部引脚采样和DLPF数字低通滤波器
|
||||
MPU6050WriteReg(MPU6050_RA_ACCEL_CONFIG, 0x1C); //加速度传感器量程和高通滤波器配置
|
||||
0X80); // 中断的逻辑电平模式,设置为0,中断信号为高电;设置为1,中断信号为低电平时。
|
||||
MotionInterrupt(); // 运动中断
|
||||
MPU6050WriteReg(MPU6050_RA_CONFIG, 0x04); // 配置外部引脚采样和DLPF数字低通滤波器
|
||||
MPU6050WriteReg(MPU6050_RA_ACCEL_CONFIG, 0x1C); // 加速度传感器量程和高通滤波器配置
|
||||
MPU6050WriteReg(MPU6050_RA_INT_PIN_CFG, 0X1C); // INT引脚低电平平时
|
||||
MPU6050WriteReg(MPU6050_RA_INT_ENABLE, 0x40); //中断使能寄存器
|
||||
MPU6050WriteReg(MPU6050_RA_INT_ENABLE, 0x40); // 中断使能寄存器
|
||||
}
|
||||
|
||||
/***************************************************************
|
||||
@@ -287,7 +287,7 @@ void MPU6050Init(void)
|
||||
int MPU6050ReadID(void)
|
||||
{
|
||||
unsigned char Re = 0;
|
||||
MPU6050ReadData(MPU6050_RA_WHO_AM_I, &Re, 1); //读器件地址
|
||||
MPU6050ReadData(MPU6050_RA_WHO_AM_I, &Re, 1); // 读器件地址
|
||||
if (Re != 0x68) {
|
||||
printf("MPU6050 dectected error!\r\n");
|
||||
return -1;
|
||||
@@ -337,10 +337,10 @@ int E53SC2ReadData(E53SC2Data* ReadData)
|
||||
return -1;
|
||||
}
|
||||
ReadData->Temperature = Temp;
|
||||
ReadData->Accel[0] = Accel[0];
|
||||
ReadData->Accel[1] = Accel[1];
|
||||
ReadData->Accel[2] = Accel[2];
|
||||
usleep(50000);
|
||||
ReadData->Accel[ACCEL_X_AXIS] = Accel[ACCEL_X_AXIS];
|
||||
ReadData->Accel[ACCEL_Y_AXIS] = Accel[ACCEL_Y_AXIS];
|
||||
ReadData->Accel[ACCEL_Z_AXIS] = Accel[ACCEL_Z_AXIS];
|
||||
usleep(READ_DATA_DELAY_US);
|
||||
return 0;
|
||||
}
|
||||
/***************************************************************
|
||||
@@ -354,10 +354,10 @@ int E53SC2ReadData(E53SC2Data* ReadData)
|
||||
void LedD1StatusSet(E53SC2Status status)
|
||||
{
|
||||
if (status == ON) {
|
||||
IoTGpioSetOutputVal(7, 1); //设置GPIO_7输出高电平点亮灯
|
||||
IoTGpioSetOutputVal(7, 1); // 设置GPIO_7输出高电平点亮灯
|
||||
}
|
||||
if (status == OFF) {
|
||||
IoTGpioSetOutputVal(7, 0); //设置GPIO_7输出低电平关闭灯
|
||||
IoTGpioSetOutputVal(7, 0); // 设置GPIO_7输出低电平关闭灯
|
||||
}
|
||||
}
|
||||
|
||||
@@ -372,10 +372,10 @@ void LedD1StatusSet(E53SC2Status status)
|
||||
void LedD2StatusSet(E53SC2Status status)
|
||||
{
|
||||
if (status == ON) {
|
||||
IoTGpioSetOutputVal(8, 1); //设置GPIO_8输出高电平点亮灯
|
||||
IoTGpioSetOutputVal(8, 1); // 设置GPIO_8输出高电平点亮灯
|
||||
}
|
||||
|
||||
if (status == OFF) {
|
||||
IoTGpioSetOutputVal(8, 0); //设置GPIO_8输出低电平关闭灯
|
||||
IoTGpioSetOutputVal(8, 0); // 设置GPIO_8输出低电平关闭灯
|
||||
}
|
||||
}
|
||||
|
||||
@@ -165,7 +165,7 @@ static void IotMainTaskEntry(void)
|
||||
attr.cb_mem = NULL;
|
||||
attr.cb_size = 0U;
|
||||
attr.stack_mem = NULL;
|
||||
attr.stack_size = CLOUD_TASK_STACK_SIZES;
|
||||
attr.stack_size = CLOUD_TASK_STACK_SIZE;
|
||||
attr.priority = CLOUD_TASK_PRIO;
|
||||
|
||||
if (osThreadNew((osThreadFunc_t)CloudMainTaskEntry, NULL, &attr) == NULL) {
|
||||
|
||||
@@ -185,7 +185,7 @@ static void deal_cmd_msg(cmd_t* cmd)
|
||||
if (obj_cmdname == NULL) {
|
||||
cJSON_Delete(obj_root);
|
||||
}
|
||||
if (strcmp(cJSON_GetStringValue(obj_cmdname), "Track_Control_Beep" == 0)) {
|
||||
if (strcmp(cJSON_GetStringValue(obj_cmdname), "Track_Control_Beep") == 0) {
|
||||
obj_paras = cJSON_GetObjectItem(obj_root, "paras");
|
||||
if (obj_paras == NULL) {
|
||||
cJSON_Delete(obj_root);
|
||||
@@ -195,7 +195,7 @@ static void deal_cmd_msg(cmd_t* cmd)
|
||||
cJSON_Delete(obj_root);
|
||||
}
|
||||
///< operate the Beep here
|
||||
if (strcmp(cJSON_GetStringValue(obj_para), "ON" == 0)) {
|
||||
if (strcmp(cJSON_GetStringValue(obj_para), "ON") == 0) {
|
||||
g_app_cb.beep = 1;
|
||||
BeepStatusSet(ON);
|
||||
printf("Beep On!\r\n");
|
||||
|
||||
@@ -177,7 +177,7 @@ static void deal_cmd_msg(cmd_t* cmd)
|
||||
if (obj_cmdname == NULL) {
|
||||
cJSON_Delete(obj_root);
|
||||
}
|
||||
if (strcmp(cJSON_GetStringValue(obj_cmdname), "Light_Control_Led" == 0)) {
|
||||
if (strcmp(cJSON_GetStringValue(obj_cmdname), "Light_Control_Led") == 0) {
|
||||
obj_paras = cJSON_GetObjectItem(obj_root, "paras");
|
||||
if (obj_paras == NULL) {
|
||||
cJSON_Delete(obj_root);
|
||||
|
||||
@@ -37,6 +37,9 @@
|
||||
#define MPU6050_RA_USER_CTRL 0x6A
|
||||
#define MPU6050_RA_PWR_MGMT_1 0x6B
|
||||
#define MPU6050_RA_WHO_AM_I 0x75
|
||||
#define SENSOR_DATA_WIDTH_8_BIT 8 // 8 bit
|
||||
#define SENSOR_DATA_WIDTH_8_BIT 8 // 8 bit
|
||||
#define SENSOR_DATA_WIDTH_8_BIT 8 // 8 bit
|
||||
|
||||
typedef enum
|
||||
{
|
||||
@@ -44,6 +47,25 @@ typedef enum
|
||||
ON
|
||||
} E53SC2Status;
|
||||
|
||||
enum AccelAxisNum {
|
||||
ACCEL_X_AXIS = 0,
|
||||
ACCEL_Y_AXIS = 1,
|
||||
ACCEL_Z_AXIS = 2,
|
||||
ACCEL_AXIS_NUM = 3,
|
||||
};
|
||||
enum AccelAxisPart {
|
||||
ACCEL_X_AXIS_LSB = 0,
|
||||
ACCEL_X_AXIS_MSB = 1,
|
||||
ACCEL_Y_AXIS_LSB = 2,
|
||||
ACCEL_Y_AXIS_MSB = 3,
|
||||
ACCEL_Z_AXIS_LSB = 4,
|
||||
ACCEL_Z_AXIS_MSB = 5,
|
||||
ACCEL_AXIS_BUTT,
|
||||
};
|
||||
enum TempPart {
|
||||
TEMP_LSB = 0,
|
||||
TEMP_MSB = 1,
|
||||
};
|
||||
/* E53_SC2传感器数据类型定义 ------------------------------------------------------------*/
|
||||
typedef struct
|
||||
{
|
||||
@@ -51,7 +73,6 @@ typedef struct
|
||||
short Accel[3];
|
||||
} E53SC2Data;
|
||||
|
||||
|
||||
int E53SC2Init(void);
|
||||
int E53SC2ReadData(E53SC2Data *ReadData);
|
||||
void LedD1StatusSet(E53SC2Status status);
|
||||
|
||||
@@ -52,13 +52,6 @@
|
||||
#define TASK_DELAY 3
|
||||
#define FLIP_THRESHOLD 100
|
||||
|
||||
enum AccelAxisNum {
|
||||
ACCEL_X_AXIS = 0,
|
||||
ACCEL_Y_AXIS = 1,
|
||||
ACCEL_Z_AXIS = 2,
|
||||
ACCEL_AXIS_NUM = 3,
|
||||
};
|
||||
|
||||
typedef enum {
|
||||
en_msg_cmd = 0,
|
||||
en_msg_report,
|
||||
|
||||
@@ -30,6 +30,12 @@
|
||||
#define WIFI_IOT_IO_FUNC_GPIO_8_GPIO 0
|
||||
#define WIFI_IOT_IO_FUNC_GPIO_7_GPIO 0
|
||||
#define WIFI_IOT_I2C_IDX_1 1
|
||||
#define WIFI_IOT_IO_NAME_GPIO_7 7
|
||||
#define WIFI_IOT_IO_NAME_GPIO_8 8
|
||||
#define WIFI_IOT_IO_NAME_GPIO_0 0
|
||||
#define WIFI_IOT_IO_NAME_GPIO_1 1
|
||||
#define RESET_DELAY_US 20000
|
||||
#define READ_DATA_DELAY_US 50000
|
||||
|
||||
/***************************************************************
|
||||
* 函数名称: E53SC2IoInit
|
||||
@@ -39,18 +45,18 @@
|
||||
***************************************************************/
|
||||
static void E53SC2IoInit(void)
|
||||
{
|
||||
IoTGpioInit(8);
|
||||
IoTGpioSetFunc(8, WIFI_IOT_IO_FUNC_GPIO_8_GPIO);
|
||||
IoTGpioSetDir(8, IOT_GPIO_DIR_OUT); //设置GPIO_8为输出模式
|
||||
IoTGpioInit(WIFI_IOT_IO_NAME_GPIO_8);
|
||||
IoTGpioSetFunc(WIFI_IOT_IO_NAME_GPIO_8, WIFI_IOT_IO_FUNC_GPIO_8_GPIO);
|
||||
IoTGpioSetDir(WIFI_IOT_IO_NAME_GPIO_8, IOT_GPIO_DIR_OUT); // 设置GPIO_8为输出模式
|
||||
|
||||
IoTGpioInit(7);
|
||||
IoTGpioSetFunc(7, WIFI_IOT_IO_FUNC_GPIO_7_GPIO);
|
||||
IoTGpioSetDir(7, IOT_GPIO_DIR_OUT); //设置GPIO_7为输出模式
|
||||
IoTGpioInit(WIFI_IOT_IO_NAME_GPIO_7);
|
||||
IoTGpioSetFunc(WIFI_IOT_IO_NAME_GPIO_7, WIFI_IOT_IO_FUNC_GPIO_7_GPIO);
|
||||
IoTGpioSetDir(WIFI_IOT_IO_NAME_GPIO_7, IOT_GPIO_DIR_OUT); // 设置GPIO_7为输出模式
|
||||
|
||||
IoTGpioInit(0);
|
||||
IoTGpioSetFunc(0, WIFI_IOT_IO_FUNC_GPIO_0_I2C1_SDA); // GPIO_0复用为I2C1_SDA
|
||||
IoTGpioInit(1);
|
||||
IoTGpioSetFunc(1, WIFI_IOT_IO_FUNC_GPIO_1_I2C1_SCL); // GPIO_1复用为I2C1_SCL
|
||||
IoTGpioInit(WIFI_IOT_IO_NAME_GPIO_0);
|
||||
IoTGpioSetFunc(WIFI_IOT_IO_NAME_GPIO_0, WIFI_IOT_IO_FUNC_GPIO_0_I2C1_SDA); // GPIO_0复用为I2C1_SDA
|
||||
IoTGpioInit(WIFI_IOT_IO_NAME_GPIO_1);
|
||||
IoTGpioSetFunc(WIFI_IOT_IO_NAME_GPIO_1, WIFI_IOT_IO_FUNC_GPIO_1_I2C1_SCL); // GPIO_1复用为I2C1_SCL
|
||||
IoTI2cInit(WIFI_IOT_I2C_IDX_1, 400000); /* baudrate: 400kbps */
|
||||
}
|
||||
/***************************************************************
|
||||
@@ -157,14 +163,14 @@ static int MPU6050ReadData(uint8_t reg_add, unsigned char* read, uint8_t num)
|
||||
static int MPU6050ReadAcc(short* accData)
|
||||
{
|
||||
int ret;
|
||||
uint8_t buf[6];
|
||||
ret = MPU6050ReadData(MPU6050_ACC_OUT, buf, 6);
|
||||
uint8_t buf[ACCEL_DATA_LEN];
|
||||
ret = MPU6050ReadData(MPU6050_ACC_OUT, buf, ACCEL_DATA_LEN);
|
||||
if (ret != 0) {
|
||||
return -1;
|
||||
}
|
||||
accData[0] = (buf[0] << 8) | buf[1];
|
||||
accData[1] = (buf[2] << 8) | buf[3];
|
||||
accData[2] = (buf[4] << 8) | buf[5];
|
||||
accData[ACCEL_X_AXIS] = (buf[ACCEL_X_AXIS_LSB] << SENSOR_DATA_WIDTH_8_BIT) | buf[ACCEL_X_AXIS_MSB];
|
||||
accData[ACCEL_Y_AXIS] = (buf[ACCEL_Y_AXIS_LSB] << SENSOR_DATA_WIDTH_8_BIT) | buf[ACCEL_Y_AXIS_MSB];
|
||||
accData[ACCEL_Z_AXIS] = (buf[ACCEL_Z_AXIS_LSB] << SENSOR_DATA_WIDTH_8_BIT) | buf[ACCEL_Z_AXIS_MSB];
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -177,14 +183,14 @@ static int MPU6050ReadAcc(short* accData)
|
||||
static int MPU6050ReadGyro(short* gyroData)
|
||||
{
|
||||
int ret;
|
||||
uint8_t buf[6];
|
||||
ret = MPU6050ReadData(MPU6050_GYRO_OUT, buf, 6);
|
||||
uint8_t buf[ACCEL_DATA_LEN];
|
||||
ret = MPU6050ReadData(MPU6050_GYRO_OUT, buf, ACCEL_DATA_LEN);
|
||||
if (ret != 0) {
|
||||
return -1;
|
||||
}
|
||||
gyroData[0] = (buf[0] << 8) | buf[1];
|
||||
gyroData[1] = (buf[2] << 8) | buf[3];
|
||||
gyroData[2] = (buf[4] << 8) | buf[5];
|
||||
gyroData[ACCEL_X_AXIS] = (buf[ACCEL_X_AXIS_LSB] << SENSOR_DATA_WIDTH_8_BIT) | buf[ACCEL_X_AXIS_MSB];
|
||||
gyroData[ACCEL_Y_AXIS] = (buf[ACCEL_Y_AXIS_LSB] << SENSOR_DATA_WIDTH_8_BIT) | buf[ACCEL_Y_AXIS_MSB];
|
||||
gyroData[ACCEL_Z_AXIS] = (buf[ACCEL_Z_AXIS_LSB] << SENSOR_DATA_WIDTH_8_BIT) | buf[ACCEL_Z_AXIS_MSB];
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -197,12 +203,12 @@ static int MPU6050ReadGyro(short* gyroData)
|
||||
static int MPU6050ReadTemp(short* tempData)
|
||||
{
|
||||
int ret;
|
||||
uint8_t buf[2];
|
||||
ret = MPU6050ReadData(MPU6050_RA_TEMP_OUT_H, buf, 2); //读取温度值
|
||||
uint8_t buf[TEMP_DATA_LEN];
|
||||
ret = MPU6050ReadData(MPU6050_RA_TEMP_OUT_H, buf, TEMP_DATA_LEN); // 读取温度值
|
||||
if (ret != 0) {
|
||||
return -1;
|
||||
}
|
||||
*tempData = (buf[0] << 8) | buf[1];
|
||||
*tempData = (buf[TEMP_LSB] << SENSOR_DATA_WIDTH_8_BIT) | buf[TEMP_MSB];
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -216,14 +222,15 @@ static int MPU6050ReturnTemp(short* Temperature)
|
||||
{
|
||||
int ret;
|
||||
short temp3;
|
||||
uint8_t buf[2];
|
||||
uint8_t buf[TEMP_DATA_LEN];
|
||||
|
||||
ret = MPU6050ReadData(MPU6050_RA_TEMP_OUT_H, buf, 2); //读取温度值
|
||||
ret = MPU6050ReadData(MPU6050_RA_TEMP_OUT_H, buf, TEMP_DATA_LEN); // 读取温度值
|
||||
if (ret != 0) {
|
||||
return -1;
|
||||
}
|
||||
temp3 = (buf[0] << 8) | buf[1];
|
||||
temp3 = (buf[TEMP_LSB] << SENSOR_DATA_WIDTH_8_BIT) | buf[TEMP_MSB];
|
||||
*Temperature = (((double)(temp3 + 13200)) / 280) - 13;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/***************************************************************
|
||||
@@ -232,20 +239,20 @@ static int MPU6050ReturnTemp(short* Temperature)
|
||||
* 返 回 值: 无
|
||||
* 说 明: 无
|
||||
**************************************************************/
|
||||
void FreeFallInterrupt(void) //自由落体中断
|
||||
void FreeFallInterrupt(void) // 自由落体中断
|
||||
{
|
||||
MPU6050WriteReg(MPU6050_RA_FF_THR, 0x01); //自由落体阈值
|
||||
MPU6050WriteReg(MPU6050_RA_FF_DUR, 0x01); //自由落体检测时间20ms 单位1ms 寄存器0X20
|
||||
MPU6050WriteReg(MPU6050_RA_FF_THR, 0x01); // 自由落体阈值
|
||||
MPU6050WriteReg(MPU6050_RA_FF_DUR, 0x01); // 自由落体检测时间20ms 单位1ms 寄存器0X20
|
||||
}
|
||||
void MotionInterrupt(void) //运动中断
|
||||
void MotionInterrupt(void) // 运动中断
|
||||
{
|
||||
MPU6050WriteReg(MPU6050_RA_MOT_THR, 0x03); //运动阈值
|
||||
MPU6050WriteReg(MPU6050_RA_MOT_DUR, 0x14); //检测时间20ms 单位1ms 寄存器0X20
|
||||
MPU6050WriteReg(MPU6050_RA_MOT_THR, 0x03); // 运动阈值
|
||||
MPU6050WriteReg(MPU6050_RA_MOT_DUR, 0x14); // 检测时间20ms 单位1ms 寄存器0X20
|
||||
}
|
||||
void ZeroMotionInterrupt(void) //静止中断
|
||||
void ZeroMotionInterrupt(void) // 静止中断
|
||||
{
|
||||
MPU6050WriteReg(MPU6050_RA_ZRMOT_THR, 0x20); //静止阈值
|
||||
MPU6050WriteReg(MPU6050_RA_ZRMOT_DUR, 0x20); //静止检测时间20ms 单位1ms 寄存器0X20
|
||||
MPU6050WriteReg(MPU6050_RA_ZRMOT_THR, 0x20); // 静止阈值
|
||||
MPU6050WriteReg(MPU6050_RA_ZRMOT_DUR, 0x20); // 静止检测时间20ms 单位1ms 寄存器0X20
|
||||
}
|
||||
|
||||
/***************************************************************
|
||||
@@ -256,26 +263,19 @@ void ZeroMotionInterrupt(void) //静止中断
|
||||
***************************************************************/
|
||||
void MPU6050Init(void)
|
||||
{
|
||||
int i = 0, j = 0;
|
||||
//在初始化之前要延时一段时间,若没有延时,则断电后再上电数据可能会出错
|
||||
for (i = 0; i < 1000; i++) {
|
||||
for (j = 0; j < 1000; j++) {
|
||||
;
|
||||
}
|
||||
}
|
||||
MPU6050WriteReg(MPU6050_RA_PWR_MGMT_1, 0X80); //复位MPU6050
|
||||
usleep(20000);
|
||||
MPU6050WriteReg(MPU6050_RA_PWR_MGMT_1, 0X00); //唤醒MPU6050
|
||||
MPU6050WriteReg(MPU6050_RA_INT_ENABLE, 0X00); //关闭所有中断
|
||||
MPU6050WriteReg(MPU6050_RA_PWR_MGMT_1, 0X80); // 复位MPU6050
|
||||
usleep(RESET_DELAY_US);
|
||||
MPU6050WriteReg(MPU6050_RA_PWR_MGMT_1, 0X00); // 唤醒MPU6050
|
||||
MPU6050WriteReg(MPU6050_RA_INT_ENABLE, 0X00); // 关闭所有中断
|
||||
MPU6050WriteReg(MPU6050_RA_USER_CTRL, 0X00); // I2C主模式关闭
|
||||
MPU6050WriteReg(MPU6050_RA_FIFO_EN, 0X00); //关闭FIFO
|
||||
MPU6050WriteReg(MPU6050_RA_FIFO_EN, 0X00); // 关闭FIFO
|
||||
MPU6050WriteReg(MPU6050_RA_INT_PIN_CFG,
|
||||
0X80); //中断的逻辑电平模式,设置为0,中断信号为高电;设置为1,中断信号为低电平时。
|
||||
MotionInterrupt(); //运动中断
|
||||
MPU6050WriteReg(MPU6050_RA_CONFIG, 0x04); //配置外部引脚采样和DLPF数字低通滤波器
|
||||
MPU6050WriteReg(MPU6050_RA_ACCEL_CONFIG, 0x1C); //加速度传感器量程和高通滤波器配置
|
||||
0X80); // 中断的逻辑电平模式,设置为0,中断信号为高电;设置为1,中断信号为低电平时。
|
||||
MotionInterrupt(); // 运动中断
|
||||
MPU6050WriteReg(MPU6050_RA_CONFIG, 0x04); // 配置外部引脚采样和DLPF数字低通滤波器
|
||||
MPU6050WriteReg(MPU6050_RA_ACCEL_CONFIG, 0x1C); // 加速度传感器量程和高通滤波器配置
|
||||
MPU6050WriteReg(MPU6050_RA_INT_PIN_CFG, 0X1C); // INT引脚低电平平时
|
||||
MPU6050WriteReg(MPU6050_RA_INT_ENABLE, 0x40); //中断使能寄存器
|
||||
MPU6050WriteReg(MPU6050_RA_INT_ENABLE, 0x40); // 中断使能寄存器
|
||||
}
|
||||
|
||||
/***************************************************************
|
||||
@@ -287,7 +287,7 @@ void MPU6050Init(void)
|
||||
int MPU6050ReadID(void)
|
||||
{
|
||||
unsigned char Re = 0;
|
||||
MPU6050ReadData(MPU6050_RA_WHO_AM_I, &Re, 1); //读器件地址
|
||||
MPU6050ReadData(MPU6050_RA_WHO_AM_I, &Re, 1); // 读器件地址
|
||||
if (Re != 0x68) {
|
||||
printf("MPU6050 dectected error!\r\n");
|
||||
return -1;
|
||||
@@ -337,10 +337,10 @@ int E53SC2ReadData(E53SC2Data* ReadData)
|
||||
return -1;
|
||||
}
|
||||
ReadData->Temperature = Temp;
|
||||
ReadData->Accel[0] = Accel[0];
|
||||
ReadData->Accel[1] = Accel[1];
|
||||
ReadData->Accel[2] = Accel[2];
|
||||
usleep(50000);
|
||||
ReadData->Accel[ACCEL_X_AXIS] = Accel[ACCEL_X_AXIS];
|
||||
ReadData->Accel[ACCEL_Y_AXIS] = Accel[ACCEL_Y_AXIS];
|
||||
ReadData->Accel[ACCEL_Z_AXIS] = Accel[ACCEL_Z_AXIS];
|
||||
usleep(READ_DATA_DELAY_US);
|
||||
return 0;
|
||||
}
|
||||
/***************************************************************
|
||||
@@ -354,10 +354,10 @@ int E53SC2ReadData(E53SC2Data* ReadData)
|
||||
void LedD1StatusSet(E53SC2Status status)
|
||||
{
|
||||
if (status == ON) {
|
||||
IoTGpioSetOutputVal(7, 1); //设置GPIO_7输出高电平点亮灯
|
||||
IoTGpioSetOutputVal(7, 1); // 设置GPIO_7输出高电平点亮灯
|
||||
}
|
||||
if (status == OFF) {
|
||||
IoTGpioSetOutputVal(7, 0); //设置GPIO_7输出低电平关闭灯
|
||||
IoTGpioSetOutputVal(7, 0); // 设置GPIO_7输出低电平关闭灯
|
||||
}
|
||||
}
|
||||
|
||||
@@ -372,10 +372,10 @@ void LedD1StatusSet(E53SC2Status status)
|
||||
void LedD2StatusSet(E53SC2Status status)
|
||||
{
|
||||
if (status == ON) {
|
||||
IoTGpioSetOutputVal(8, 1); //设置GPIO_8输出高电平点亮灯
|
||||
IoTGpioSetOutputVal(8, 1); // 设置GPIO_8输出高电平点亮灯
|
||||
}
|
||||
|
||||
if (status == OFF) {
|
||||
IoTGpioSetOutputVal(8, 0); //设置GPIO_8输出低电平关闭灯
|
||||
IoTGpioSetOutputVal(8, 0); // 设置GPIO_8输出低电平关闭灯
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user