micro_climate/tools/arr_tool.c

72 lines
1.5 KiB
C

#include "arr_tool.h"
//void arr_move_front(uint16_t arr[],uint32_t length)
//{
//
// uint16_t temp = arr[0],i;
// for (i = 0; i < length; i++)
// {
// arr[i] = arr[i + 1];
// }
// arr[length-1]=temp;
//}
uint16_t find_max_val_position(uint16_t* max_val,uint16_t* arr,uint16_t len)
{
uint16_t i;
uint16_t max_p=0;
*max_val = 0;
for (i = 0 ; i<len ; i++)
{
if(arr[i] > *max_val)
{
*max_val = arr[i];
max_p = i;
}
}
return max_p;
}
uint16_t find_echo_position(uint16_t max_val,uint16_t max_val_position,uint16_t* arr,uint16_t len)
{
uint16_t i=0;
uint32_t max_val_zero;
max_val_zero = max_val - 2048 ;
//uint16_t echo_position = 0;
// 最大值的0.1倍
uint16_t max_val_zero_0R1 = (max_val_zero*8/100)+2048;
// 最大值的0.3倍
uint16_t max_val_zero_0R3 = (max_val_zero*40/100)+2048;
if(max_val_position>200)
{
i = max_val_position-200;
}else
{
i = 0;
}
for(; i < max_val_position;i++)
{
// 判断是否是顶点
//if( arr[i-2]<arr[i-1] && arr[i-1] <= arr[i] && arr[i]>=arr[i+1] && arr[i+1]>arr[i+2])
//
if( arr[i-1] < arr[i] && arr[i]> arr[i+1])
{
// 减去偏置电压
//temp_val_zero = arr[i]-2048;
// 判断顶点是否在 10%-%30之间。
if(arr[i] >= max_val_zero_0R1 && arr[i] <= max_val_zero_0R3 )
{
// 如果找到 函数推出
return i;
}
}
}
// 如果没有找到 返回0;
return 0;
}