取消can调试数据发送

This commit is contained in:
2025-11-07 09:52:24 +08:00
parent 9a71ca1edb
commit 565c3f8918
9 changed files with 829 additions and 234 deletions

View File

@@ -625,9 +625,7 @@ static void diffProcess(void *signal_id)
float out_torque[4] = {0,0,0,0};
// 使用差速车辆动力学模型计算左右电机的期望速度
computeInverseKinematics(output_speed, output_yaw_rate, diff_data.max_speed, out_torque);
if( fabs(diff_data.left_front_motor_speed - diff_data.left_rear_motor_speed) >= diff_data.diff_dead_zone )//如果超过系数
{
diff_data.left_speed_diff = diff_data.left_front_motor_speed - diff_data.left_rear_motor_speed;

View File

@@ -432,36 +432,36 @@ void paramAppInit(void)
// 上电读取所有参数
memset(param_manager.arr, 0, sizeof(param_manager.arr));
accessEeprom(0, param_manager.arr, sizeof(param_manager.arr), READ_OPERATION);
// whl_bas 轮胎直径
// max_rpm 最大转速
// whl_dia 轴距
// max_acc 最大加速度
// spd_kp 速度P
// spd_ki 速度I
// spd_kd 速度D
// spd_il 速度积分限制
// spd_ol 速度PID输出限制
// crv_kp 转弯P
// crv_ki 转弯I
// crv_kd 转弯D
// crv_il 转弯积分限制
// crv_ol 转弯PID输出限制
// brk_on 刹车刹紧时间
// brk_off 刹车释放时间
// maxTorq 最大扭矩
// feedPwr 最大馈电功率
// dispPwr 最大放电功率
// VehMass 车重
// whl_bas 轮胎直径<单位m>
// max_rpm 最大转速<单位rpm/min>
// whl_dia 轴距<单位m>
// max_acc 最大加速度
// spd_kp 遥控速度P
// spd_ki 遥控速度I
// spd_kd 遥控速度D
// spd_il 遥控速度积分限制
// spd_ol 遥控速度PID输出限制
// crv_kp 遥控转弯P
// crv_ki 遥控转弯I
// crv_kd 遥控转弯D
// crv_il 遥控转弯积分限制
// crv_ol 遥控转弯PID输出限制
// brk_on 刹车刹紧时间 单位ms
// brk_off 刹车释放时间 单位ms
// maxTorq 最大扭矩 单位n*m
// feedPwr 最大馈电功率 单位w
// dispPwr 最大放电功率 单位w
// VehMass 车重 单位kg
// gRatio 减速比
// prCTime 预充电时间
// prCTime 预充电时间 单位s
// brk_pos 刹车位置
// pwr_sta 电源状态
// high_sw 高压开关状态
// stop_sw 急停开关状态
// lightSt 灯光状态
// pwr_btn 电源开关状态
// sleepTm 休眠时间
// wakeTm 唤醒时间
// sleepTm 休眠时间 单位min
// wakeTm 唤醒时间 单位min
// Ospd_kp 自主速度P
// Ospd_ki 自主速度I
// Ospd_kd 自主速度D
@@ -472,7 +472,7 @@ void paramAppInit(void)
// Ocrv_kd 自主转弯D
// Ocrv_il 自主转弯积分限制
// Ocrv_ol 自主转弯PID输出限制
// minTorq 输出扭矩死区
// minTorq 输出扭矩死区 单位n*m
// brk_rev 刹车方向
// mot_kp 同侧扭矩P参数
// mot_ki 同侧扭矩I参数

View File

@@ -120,6 +120,8 @@ static void powerOutput(void *signal_id)
un_inf_can_kgf_output2.bit_data.KGF11 = setPowerOn(); // 低压继电器
un_inf_can_kgf_output2.bit_data.KGF01 = setPowerOn(); // 计算机
un_inf_can_kgf_output2.bit_data.KGF02 = setPowerOn(); // 计算机
un_inf_can_kgf_output1.bit_data.KGF13 = setPowerOn(); // 计算机
un_inf_can_kgf_output1.bit_data.KGF14 = setPowerOn(); // 计算机
un_inf_can_kgf_output2.bit_data.KGF03 = setPowerOn(); // 遥控器
un_inf_can_kgf_output2.bit_data.KGF05 = setPowerOn(); // 网络交换机
un_inf_can_kgf_output2.bit_data.KGF06 = setPowerOn(); // 网络交换机
@@ -136,6 +138,8 @@ static void powerOutput(void *signal_id)
un_inf_can_kgf_output2.bit_data.KGF11 = setPowerOn(); // 低压继电器
un_inf_can_kgf_output2.bit_data.KGF01 = setPowerOn(); // 计算机
un_inf_can_kgf_output2.bit_data.KGF02 = setPowerOn(); // 计算机
un_inf_can_kgf_output1.bit_data.KGF13 = setPowerOn(); // 计算机
un_inf_can_kgf_output1.bit_data.KGF14 = setPowerOn(); // 计算机
un_inf_can_kgf_output2.bit_data.KGF03 = setPowerOn(); // 遥控器
un_inf_can_kgf_output2.bit_data.KGF05 = setPowerOn(); // 网络交换机
un_inf_can_kgf_output2.bit_data.KGF06 = setPowerOn(); // 网络交换机
@@ -153,6 +157,8 @@ static void powerOutput(void *signal_id)
un_inf_can_kgf_output2.bit_data.KGF11 = setPowerOff(); // 低压继电器
un_inf_can_kgf_output2.bit_data.KGF01 = setPowerOn(); // 计算机
un_inf_can_kgf_output2.bit_data.KGF02 = setPowerOn(); // 计算机
un_inf_can_kgf_output1.bit_data.KGF13 = setPowerOn(); // 计算机
un_inf_can_kgf_output1.bit_data.KGF14 = setPowerOn(); // 计算机
un_inf_can_kgf_output2.bit_data.KGF03 = setPowerOn(); // 遥控器
un_inf_can_kgf_output2.bit_data.KGF05 = setPowerOn(); // 网络交换机
un_inf_can_kgf_output2.bit_data.KGF06 = setPowerOn(); // 网络交换机
@@ -169,6 +175,8 @@ static void powerOutput(void *signal_id)
un_inf_can_kgf_output2.bit_data.KGF11 = setPowerOn(); // 低压继电器
un_inf_can_kgf_output2.bit_data.KGF01 = setPowerOn(); // 计算机
un_inf_can_kgf_output2.bit_data.KGF02 = setPowerOn(); // 计算机
un_inf_can_kgf_output1.bit_data.KGF13 = setPowerOn(); // 计算机
un_inf_can_kgf_output1.bit_data.KGF14 = setPowerOn(); // 计算机
un_inf_can_kgf_output2.bit_data.KGF03 = setPowerOn(); // 遥控器
un_inf_can_kgf_output2.bit_data.KGF05 = setPowerOn(); // 网络交换机
un_inf_can_kgf_output2.bit_data.KGF06 = setPowerOn(); // 网络交换机
@@ -185,6 +193,8 @@ static void powerOutput(void *signal_id)
un_inf_can_kgf_output2.bit_data.KGF11 = setPowerOn(); // 低压继电器
un_inf_can_kgf_output2.bit_data.KGF01 = setPowerOn(); // 计算机
un_inf_can_kgf_output2.bit_data.KGF02 = setPowerOn(); // 计算机
un_inf_can_kgf_output1.bit_data.KGF13 = setPowerOn(); // 计算机
un_inf_can_kgf_output1.bit_data.KGF14 = setPowerOn(); // 计算机
un_inf_can_kgf_output2.bit_data.KGF03 = setPowerOn(); // 遥控器
un_inf_can_kgf_output2.bit_data.KGF05 = setPowerOn(); // 网络交换机
un_inf_can_kgf_output2.bit_data.KGF06 = setPowerOn(); // 网络交换机
@@ -201,6 +211,8 @@ static void powerOutput(void *signal_id)
un_inf_can_kgf_output2.bit_data.KGF11 = setPowerOff(); // 低压继电器
un_inf_can_kgf_output2.bit_data.KGF01 = setPowerOn(); // 计算机
un_inf_can_kgf_output2.bit_data.KGF02 = setPowerOn(); // 计算机
un_inf_can_kgf_output1.bit_data.KGF13 = setPowerOn(); // 计算机
un_inf_can_kgf_output1.bit_data.KGF14 = setPowerOn(); // 计算机
un_inf_can_kgf_output2.bit_data.KGF03 = setPowerOn(); // 遥控器
un_inf_can_kgf_output2.bit_data.KGF05 = setPowerOn(); // 网络交换机
un_inf_can_kgf_output2.bit_data.KGF06 = setPowerOn(); // 网络交换机

View File

@@ -11,7 +11,6 @@
// 声明 temp_data 变量
TempSystem temp_data;
static void handleTemperatureAlarm(int16_t current_temp, float alarm_temp,
float critical_temp, float threshold_temp,
TempState *state)
@@ -89,23 +88,6 @@ static void tempOutput(void *signal_id)
// 电机1风扇 左前
switch (temp_data.state[0])
{
case TEMP_NORMAL:
un_inf_can_kgf_output1.bit_data.KGF01 = setFanOff();//电机控制器风扇
un_inf_can_kgf_output1.bit_data.pwm_01 = 0;
break;
case TEMP_WARNING:
un_inf_can_kgf_output1.bit_data.KGF01 = setFanOn();//电机控制器风扇
un_inf_can_kgf_output1.bit_data.pwm_01 = 5;
break;
case TEMP_CRITICAL:
un_inf_can_kgf_output1.bit_data.KGF01 = setFanOn();//电机控制器风扇
un_inf_can_kgf_output1.bit_data.pwm_01 = 0;
break;
}
// 电机2风扇 右前
switch (temp_data.state[1])
{
case TEMP_NORMAL:
un_inf_can_kgf_output1.bit_data.KGF02 = setFanOff();//电机控制器风扇
@@ -119,28 +101,28 @@ static void tempOutput(void *signal_id)
un_inf_can_kgf_output1.bit_data.KGF02 = setFanOn();//电机控制器风扇
un_inf_can_kgf_output1.bit_data.pwm_02 = 0;
break;
}
// 电机2风扇 右前
switch (temp_data.state[1])
{
case TEMP_NORMAL:
un_inf_can_kgf_output1.bit_data.KGF01 = setFanOff();//电机控制器风扇
un_inf_can_kgf_output1.bit_data.pwm_01 = 0;
break;
case TEMP_WARNING:
un_inf_can_kgf_output1.bit_data.KGF01 = setFanOn();//电机控制器风扇
un_inf_can_kgf_output1.bit_data.pwm_01 = 5;
break;
case TEMP_CRITICAL:
un_inf_can_kgf_output1.bit_data.KGF01 = setFanOn();//电机控制器风扇
un_inf_can_kgf_output1.bit_data.pwm_01 = 0;
break;
}
// 电机3风扇 左后
switch (temp_data.state[2])
{
case TEMP_NORMAL:
un_inf_can_kgf_output2.bit_data.KGF07 = setFanOff();//电机控制器风扇
un_inf_can_kgf_output2.bit_data.pwm_07 = 0;
break;
case TEMP_WARNING:
un_inf_can_kgf_output2.bit_data.KGF07 = setFanOn();//电机控制器风扇
un_inf_can_kgf_output2.bit_data.pwm_07 = 5;
break;
case TEMP_CRITICAL:
un_inf_can_kgf_output2.bit_data.KGF07 = setFanOn();//电机控制器风扇
un_inf_can_kgf_output2.bit_data.pwm_07 = 0;
break;
}
// 电机4风扇 右后
switch (temp_data.state[3])
{
case TEMP_NORMAL:
un_inf_can_kgf_output2.bit_data.KGF08 = setFanOff();//电机控制器风扇
@@ -149,11 +131,28 @@ static void tempOutput(void *signal_id)
case TEMP_WARNING:
un_inf_can_kgf_output2.bit_data.KGF08 = setFanOn();//电机控制器风扇
un_inf_can_kgf_output2.bit_data.pwm_08 = 5;
break;
case TEMP_CRITICAL:
break;
case TEMP_CRITICAL:
un_inf_can_kgf_output2.bit_data.KGF08 = setFanOn();//电机控制器风扇
un_inf_can_kgf_output2.bit_data.pwm_08 = 0;
break;
}
// 电机4风扇 右后
switch (temp_data.state[3])
{
case TEMP_NORMAL:
un_inf_can_kgf_output2.bit_data.KGF07 = setFanOff();//电机控制器风扇
un_inf_can_kgf_output2.bit_data.pwm_07 = 0;
break;
case TEMP_WARNING:
un_inf_can_kgf_output2.bit_data.KGF07 = setFanOn();//电机控制器风扇
un_inf_can_kgf_output2.bit_data.pwm_07 = 5;
break;
case TEMP_CRITICAL:
un_inf_can_kgf_output2.bit_data.KGF07 = setFanOn();//电机控制器风扇
un_inf_can_kgf_output2.bit_data.pwm_07 = 0;
break;
}
// // 电机3风扇
@@ -174,26 +173,33 @@ static void tempOutput(void *signal_id)
// }
publishMessage(&un_inf_can_kgf_output1, 1);
publishMessage(&un_inf_can_kgf_output2, 1);
}
// 温度状态处理函数
static void tempProcess(void *signal_id)
{
(void)signal_id;
int16_t max_temp[4] = {0,0};
int16_t max_temp[4] = {0,0,0,0};
// 调用按钮处理函数
max_temp[0] = temp_data.current_temp[0];
max_temp[1] = temp_data.current_temp[1];
// printf("motor1 temp: %d, motor2 temp: %d\n", max_temp[0], max_temp[1]);
max_temp[2] = temp_data.current_temp[2];
max_temp[3] = temp_data.current_temp[3];
// printf("motor1 temp: %d, motor2 temp: %d\n", max_temp[0], max_temp[1]);
handleTemperatureAlarm(max_temp[0], MOTOR_WARNING_TEMP, MOTOR_CRITICAL_TEMP, MOTOR_THRESHOLD_TEMP, &temp_data.state[0]);
handleTemperatureAlarm(max_temp[1], MOTOR_WARNING_TEMP, MOTOR_CRITICAL_TEMP, MOTOR_THRESHOLD_TEMP, &temp_data.state[1]);
handleTemperatureAlarm(max_temp[2], MOTOR_WARNING_TEMP, MOTOR_CRITICAL_TEMP, MOTOR_THRESHOLD_TEMP, &temp_data.state[2]);
handleTemperatureAlarm(max_temp[3], MOTOR_WARNING_TEMP, MOTOR_CRITICAL_TEMP, MOTOR_THRESHOLD_TEMP, &temp_data.state[3]);
// if (max_temp[0] >= 60) // 假设60度为危险温度
@@ -252,7 +258,7 @@ static void tempInput(void *signal_id)
else if(signal_id == &un_motor_temp4)
{
temp_data.current_temp[3] = ( (int16_t)(un_motor_temp4.bit_data.controller_temp) - 40);
}
}
else{}
}

View File

@@ -1,83 +1,83 @@
#include "app_config.h"
#include "app_dependence.h"
#include "interface.h"
#include "app_frm_monitor.h"
#include "app_frm_signal.h"
#include "app_frm_timer.h"
#include "sdrv_vic.h"
#include "app_ultrasonic.h"
// 定时器结构体
Timer ultrasonic_timer;
Timer ultrasonic_timer1;
uint16_t fornt_distance = 0;//mm
// 定时器信号处理函数
void ultrasonicTimer1Process(void *signal_id)
{
(void)signal_id; // 标记变量为已使用,避免编译器警告
printf("fornt distance = %d\n",fornt_distance);
timerStart(&ultrasonic_timer1, 1000,1);
}
// 定时器信号处理函数
void ultrasonicTimerProcess(void *signal_id)
{
(void)signal_id; // 标记变量为已使用,避免编译器警告
un_ultrasonic_output1.bit_data.node = ULTRASONIC_FRONT_NODE;
un_ultrasonic_output1.bit_data.function_code = ULTRASONIC_READ;
un_ultrasonic_output1.bit_data.register_address = REALTIME_DISTANCE_REG;
un_ultrasonic_output1.bit_data.data = 0x100;
publishMessage(&un_ultrasonic_output1, 1);
timerStart(&ultrasonic_timer, 200,1);
}
void ultrasonicInput(void *signal_id)
{
if(signal_id == &un_ultrasonic_input1)
{
fornt_distance = SWAP_ENDIAN_16(un_ultrasonic_input1.bit_data.data);//高低字节交换
}
}
// APP模块的初始化
void ultrasonicAppInit(void)
{
// 初始化定时器
timerInit(&ultrasonic_timer);
timerInit(&ultrasonic_timer1);
// 订阅定时器信号
subscribe(&ultrasonic_timer, ultrasonicTimerProcess);
subscribe(&ultrasonic_timer1, ultrasonicTimer1Process);
subscribe(&un_ultrasonic_input1, ultrasonicInput);
printf("ultrasonicAPP: initial OK %d\n",getCurrentTime());
timerStart(&ultrasonic_timer, 200,1);
timerStart(&ultrasonic_timer1, 1000,1);
}
#include "app_config.h"
#include "app_dependence.h"
#include "interface.h"
#include "app_frm_monitor.h"
#include "app_frm_signal.h"
#include "app_frm_timer.h"
#include "sdrv_vic.h"
#include "app_ultrasonic.h"
// 定时器结构体
Timer ultrasonic_timer;
Timer ultrasonic_timer1;
uint16_t fornt_distance = 0;//mm
// 定时器信号处理函数
void ultrasonicTimer1Process(void *signal_id)
{
(void)signal_id; // 标记变量为已使用,避免编译器警告
printf("fornt distance = %d\n",fornt_distance);
timerStart(&ultrasonic_timer1, 1000,1);
}
// 定时器信号处理函数
void ultrasonicTimerProcess(void *signal_id)
{
(void)signal_id; // 标记变量为已使用,避免编译器警告
un_ultrasonic_output1.bit_data.node = ULTRASONIC_FRONT_NODE;
un_ultrasonic_output1.bit_data.function_code = ULTRASONIC_READ;
un_ultrasonic_output1.bit_data.register_address = REALTIME_DISTANCE_REG;
un_ultrasonic_output1.bit_data.data = 0x100;
publishMessage(&un_ultrasonic_output1, 1);
timerStart(&ultrasonic_timer, 200,1);
}
void ultrasonicInput(void *signal_id)
{
if(signal_id == &un_ultrasonic_input1)
{
fornt_distance = SWAP_ENDIAN_16(un_ultrasonic_input1.bit_data.data);//高低字节交换
}
}
// APP模块的初始化
void ultrasonicAppInit(void)
{
// 初始化定时器
timerInit(&ultrasonic_timer);
timerInit(&ultrasonic_timer1);
// 订阅定时器信号
subscribe(&ultrasonic_timer, ultrasonicTimerProcess);
subscribe(&ultrasonic_timer1, ultrasonicTimer1Process);
subscribe(&un_ultrasonic_input1, ultrasonicInput);
printf("ultrasonicAPP: initial OK %d\n",getCurrentTime());
timerStart(&ultrasonic_timer, 200,1);
timerStart(&ultrasonic_timer1, 1000,1);
}

View File

@@ -1,75 +1,75 @@
#ifndef ULTRASONIC_H
#define ULTRASONIC_H
#ifdef __cplusplus
extern "C" {
#endif
#define ULTRASONIC_FRONT_NODE 0x1
#define ULTRASONIC_BACK_NODE 0x2
#define ULTRASONIC_ID_1 0x520 + ULTRASONIC_FRONT_NODE
#define ULTRASONIC_ID_2 0x520 + ULTRASONIC_BACK_NODE
#define ULTRASONIC_READ 0x03
#define ULTRASONIC_WRITE 0x06
#define SOFTWARE_VERSION_REG 0x0000 // ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B1BE><><CAAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ), <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: uint16_t
#define PROCESSED_DISTANCE_REG 0x0100 /*
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ(mm), <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: uint16_t
* <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E3B7A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><>Ӧʱ<D3A6>䣺190-750ms(<28><><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD><CCB6><EFBFBD>)
*/
#define REALTIME_DISTANCE_REG 0x0101 /*
* ʵʱ<CAB5><CAB1><EFBFBD>β<EFBFBD><CEB2><EFBFBD>ֵ(mm), <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: uint16_t
* <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>󴥷<EFBFBD><F3B4A5B7><EFBFBD><EFBFBD>β<EFBFBD><CEB2><EFBFBD>
* <20><>Ӧʱ<D3A6>䣺15-140ms(<28><><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD><CCB6><EFBFBD>)
*/
#define TEMPERATURE_REG 0x0102 /*
* <20>¶ȴ<C2B6><C8B4><EFBFBD><EFBFBD><EFBFBD>ֵ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: int16_t
* <20><>λ<EFBFBD><CEBB>0.1<EFBFBD><EFBFBD>ʼֵ<CABC><D6B5>/10), <20>ֱ<EFBFBD><D6B1>ʣ<EFBFBD>0.5<EFBFBD><EFBFBD>
* <20><>Ӧʱ<D3A6>䣺15-140ms(<28><><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD><CCB6><EFBFBD>)
*/
#define ECHO_TIME_REG 0x010A /*
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD>ʱ<EFBFBD><CAB1>ԭʼֵ(<28><>s), <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: uint16_t
* <20><><EFBFBD><EFBFBD>㣺ֵ/5.75 = <20><><EFBFBD>׾<EFBFBD><D7BE><EFBFBD>
* <20><>Ӧʱ<D3A6>䣺15-140ms(<28><><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD><CCB6><EFBFBD>)
*/
#define SWAP_ENDIAN_16(x) ((((x) & 0xFF) << 8) | (((x) >> 8) & 0xFF))
#define SWAP_ENDIAN_32(x) (((x) << 24) | (((x) & 0xFF00) << 8) | (((x) >> 8) & 0xFF00) | ((x) >> 24))
void ultrasonicAppInit(void);
#ifdef __cplusplus
}
#endif
#endif // ULTRASONIC_H
#ifndef ULTRASONIC_H
#define ULTRASONIC_H
#ifdef __cplusplus
extern "C" {
#endif
#define ULTRASONIC_FRONT_NODE 0x1
#define ULTRASONIC_BACK_NODE 0x2
#define ULTRASONIC_ID_1 0x520 + ULTRASONIC_FRONT_NODE
#define ULTRASONIC_ID_2 0x520 + ULTRASONIC_BACK_NODE
#define ULTRASONIC_READ 0x03
#define ULTRASONIC_WRITE 0x06
#define SOFTWARE_VERSION_REG 0x0000 // ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B1BE><><CAAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ), <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: uint16_t
#define PROCESSED_DISTANCE_REG 0x0100 /*
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ(mm), <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: uint16_t
* <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E3B7A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><>Ӧʱ<D3A6>䣺190-750ms(<28><><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD><CCB6><EFBFBD>)
*/
#define REALTIME_DISTANCE_REG 0x0101 /*
* ʵʱ<CAB5><CAB1><EFBFBD>β<EFBFBD><CEB2><EFBFBD>ֵ(mm), <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: uint16_t
* <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>󴥷<EFBFBD><F3B4A5B7><EFBFBD><EFBFBD>β<EFBFBD><CEB2><EFBFBD>
* <20><>Ӧʱ<D3A6>䣺15-140ms(<28><><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD><CCB6><EFBFBD>)
*/
#define TEMPERATURE_REG 0x0102 /*
* <20>¶ȴ<C2B6><C8B4><EFBFBD><EFBFBD><EFBFBD>ֵ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: int16_t
* <20><>λ<EFBFBD><CEBB>0.1<EFBFBD><EFBFBD>ʼֵ<CABC><D6B5>/10), <20>ֱ<EFBFBD><D6B1>ʣ<EFBFBD>0.5<EFBFBD><EFBFBD>
* <20><>Ӧʱ<D3A6>䣺15-140ms(<28><><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD><CCB6><EFBFBD>)
*/
#define ECHO_TIME_REG 0x010A /*
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD>ʱ<EFBFBD><CAB1>ԭʼֵ(<28><>s), <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: uint16_t
* <20><><EFBFBD><EFBFBD>㣺ֵ/5.75 = <20><><EFBFBD>׾<EFBFBD><D7BE><EFBFBD>
* <20><>Ӧʱ<D3A6>䣺15-140ms(<28><><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD><CCB6><EFBFBD>)
*/
#define SWAP_ENDIAN_16(x) ((((x) & 0xFF) << 8) | (((x) >> 8) & 0xFF))
#define SWAP_ENDIAN_32(x) (((x) << 24) | (((x) & 0xFF00) << 8) | (((x) >> 8) & 0xFF00) | ((x) >> 24))
void ultrasonicAppInit(void);
#ifdef __cplusplus
}
#endif
#endif // ULTRASONIC_H