思路:应该设置死区
假设我们把0~100映射到0~20,那么每个单位就会对应5,我们可以把2作为死区。
即0~2映射为0,3~4即可映射为0也可映射为1,根据上一个状态来判断,这样就不会出现显示端0和1跳来跳去的情况。
代码:
typedef unsigned int uint16_t;
#define MAP_STEP_LENGTH 5
#define MAP_DEAD_AREA 2
uint16_t GetStableData(void inputData)
{
static uint16_t lastData = 0;
uint16_t temp;
uint16_t remain;
temp = inputData/MAP_STEP_LENGTH;
remain = inputData - temp;
if(remain >= (MAP_STEP_LENGTH - MAP_DEAD_AREA))
{
if(lastData >= temp+1)
{
lastData = temp+1;
}
else
{
lastData = temp;
}
}
else
{
lastData = temp;
}
return lastData;
}