如果解决获取数据抖动的问题
思路:应该设置死区
假设我们把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 2uint16_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;
}