#include "McuTaskImu.h" #include "McuJY60Drv.h" #include "McuTaskBlueTooth.h" #include "BeiDouHtyDrv.h" #include "ZthyToolDataTypeSwitch.h" #include "McuTaskFlash.h" float gAx; float gAy; float gAz; float gWx; float gWy; float gWz; float gRoll; float gPitch; float gYaw; uint32_t gAx32; uint32_t gAy32; uint32_t gAz32; uint32_t gWx32; uint32_t gWy32; uint32_t gWz32; uint32_t gRoll32; uint32_t gPitch32; uint32_t gYaw32; /* 蓝牙发送标志位 */ static int gMcuTaskImuBlueToothSendFlag = 0; static unsigned short gMcuTaskImuBlueToothSerial = 0; static unsigned char gMcuTaskImuBlueToothSendBuf[37] = {0}; /* 北斗发送标志位 */ static int gMcuTaskImuBeiDouSendFlag = 0; int McuTaskImuInit(void) { int rt; rt = McuDrvJy60Init(); if (rt < 0){ /* 初始化 */ return -1; } return 0; } /* IMU任务 */ int McuTaskImuTask(void) { if (gMcuTaskImuBlueToothSendFlag == 1 || gMcuTaskImuBeiDouSendFlag == 1) { /* 获取数据 */ McuDrvJy60GetData(&gAx, &gAy, &gAz, &gWx, &gWy, &gWz, &gRoll, &gPitch, &gYaw); // 可能会导致假死 if (gMcuTaskImuBlueToothSendFlag == 1) { gMcuTaskImuBlueToothSendBuf[0] = 1; ZthyToolFloatToUint32(gAx, &gAx32); ZthyToolFloatToUint32(gAy, &gAy32); ZthyToolFloatToUint32(gAz, &gAz32); ZthyToolFloatToUint32(gWx, &gWx32); ZthyToolFloatToUint32(gWy, &gWy32); ZthyToolFloatToUint32(gWz, &gWz32); ZthyToolFloatToUint32(gRoll, &gRoll32); ZthyToolFloatToUint32(gPitch, &gPitch32); ZthyToolFloatToUint32(gYaw, &gYaw32); gMcuTaskImuBlueToothSendBuf[1] = (uint8_t)((gAx32 & 0xff000000) >> 24); gMcuTaskImuBlueToothSendBuf[2] = (uint8_t)((gAx32 & 0x00ff0000) >> 16); gMcuTaskImuBlueToothSendBuf[3] = (uint8_t)((gAx32 & 0x0000ff00) >> 8); gMcuTaskImuBlueToothSendBuf[4] = (uint8_t)(gAx32 & 0x000000ff); gMcuTaskImuBlueToothSendBuf[5] = (uint8_t)((gAy32 & 0xff000000) >> 24); gMcuTaskImuBlueToothSendBuf[6] = (uint8_t)((gAy32 & 0x00ff0000) >> 16); gMcuTaskImuBlueToothSendBuf[7] = (uint8_t)((gAy32 & 0x0000ff00) >> 8); gMcuTaskImuBlueToothSendBuf[8] = (uint8_t)(gAy32 & 0x000000ff); gMcuTaskImuBlueToothSendBuf[9] = (uint8_t)((gAz32 & 0xff000000) >> 24); gMcuTaskImuBlueToothSendBuf[10] = (uint8_t)((gAz32 & 0x00ff0000) >> 16); gMcuTaskImuBlueToothSendBuf[11] = (uint8_t)((gAz32 & 0x0000ff00) >> 8); gMcuTaskImuBlueToothSendBuf[12] = (uint8_t)(gAz32 & 0x000000ff); gMcuTaskImuBlueToothSendBuf[13] = (uint8_t)((gWx32 & 0xff000000) >> 24); gMcuTaskImuBlueToothSendBuf[14] = (uint8_t)((gWx32 & 0x00ff0000) >> 16); gMcuTaskImuBlueToothSendBuf[15] = (uint8_t)((gWx32 & 0x0000ff00) >> 8); gMcuTaskImuBlueToothSendBuf[16] = (uint8_t)(gWx32 & 0x000000ff); gMcuTaskImuBlueToothSendBuf[17] = (uint8_t)((gWy32 & 0xff000000) >> 24); gMcuTaskImuBlueToothSendBuf[18] = (uint8_t)((gWy32 & 0x00ff0000) >> 16); gMcuTaskImuBlueToothSendBuf[19] = (uint8_t)((gWy32 & 0x0000ff00) >> 8); gMcuTaskImuBlueToothSendBuf[20] = (uint8_t)(gWy32 & 0x000000ff); gMcuTaskImuBlueToothSendBuf[21] = (uint8_t)((gWz32 & 0xff000000) >> 24); gMcuTaskImuBlueToothSendBuf[22] = (uint8_t)((gWz32 & 0x00ff0000) >> 16); gMcuTaskImuBlueToothSendBuf[23] = (uint8_t)((gWz32 & 0x0000ff00) >> 8); gMcuTaskImuBlueToothSendBuf[24] = (uint8_t)(gWz32 & 0x000000ff); gMcuTaskImuBlueToothSendBuf[25] = (uint8_t)((gRoll32 & 0xff000000) >> 24); gMcuTaskImuBlueToothSendBuf[26] = (uint8_t)((gRoll32 & 0x00ff0000) >> 16); gMcuTaskImuBlueToothSendBuf[27] = (uint8_t)((gRoll32 & 0x0000ff00) >> 8); gMcuTaskImuBlueToothSendBuf[28] = (uint8_t)(gRoll32 & 0x000000ff); gMcuTaskImuBlueToothSendBuf[29] = (uint8_t)((gPitch32 & 0xff000000) >> 24); gMcuTaskImuBlueToothSendBuf[30] = (uint8_t)((gPitch32 & 0x00ff0000) >> 16); gMcuTaskImuBlueToothSendBuf[31] = (uint8_t)((gPitch32 & 0x0000ff00) >> 8); gMcuTaskImuBlueToothSendBuf[32] = (uint8_t)(gPitch32 & 0x000000ff); gMcuTaskImuBlueToothSendBuf[33] = (uint8_t)((gYaw32 & 0xff000000) >> 24); gMcuTaskImuBlueToothSendBuf[34] = (uint8_t)((gYaw32 & 0x00ff0000) >> 16); gMcuTaskImuBlueToothSendBuf[35] = (uint8_t)((gYaw32 & 0x0000ff00) >> 8); gMcuTaskImuBlueToothSendBuf[36] = (uint8_t)(gYaw32 & 0x000000ff); TaskBlueToothSendMessage(MCU_TASK_IMU_SEND_MESSAGE_ID, &gMcuTaskImuBlueToothSerial, gMcuTaskImuBlueToothSendBuf, sizeof(gMcuTaskImuBlueToothSendBuf)); gMcuTaskImuBlueToothSerial++; gMcuTaskImuBlueToothSendFlag = 0; } if (gMcuTaskImuBeiDouSendFlag == 1) { gMcuTaskImuBeiDouSendFlag = 0; } /* 保存数据到Flash */ McuTaskFlashWriteImu(gAx, gAy, gAz, gWx, gWy, gWz, gRoll, gPitch, gYaw); } return 0; } /* 蓝牙请求数据 */ void McuTaskImuBlueToothAsk(void) { gMcuTaskImuBlueToothSendFlag = 1; } /* 北斗请求数据 */ void McuTaskImuBeiDouAsk(void) { gMcuTaskImuBeiDouSendFlag = 1; } /* 获取数据请求状态 */ int McuTaskImuAskStatus(void) { return ((gMcuTaskImuBlueToothSendFlag * 2) | gMcuTaskImuBeiDouSendFlag); }