如果解决获取数据抖动的问题

思路:应该设置死区

假设我们把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;
}
相关推荐
luckyiness(全网最全)6 小时前
STM32F407之超声波模块使用
stm32·单片机·嵌入式硬件
UpCmT8 小时前
Linux设备驱动中的异步通知与异步I/O学习s
linux·单片机·学习
马浩同学8 小时前
【ESP32】Arduino开发 | I2C控制器+I2C主从收发例程
c语言·单片机·嵌入式硬件·mcu
三石峰科技8 小时前
单通道串口服务器
运维·服务器·单片机
极海APM32 MCU8 小时前
均衡功能,保障安全丨基于极海 G32A1445 汽车通用 MCU 的 BMU 应用方案
单片机·安全·汽车
你好 贝弗利9 小时前
2.AFIO 外设:复用和重映射
stm32·单片机·嵌入式软件·afio
夜间看花11 小时前
17【Protues单片机仿真】基于51单片机的太阳能智能谷物翻晒机器人
单片机·机器人·51单片机
最后一个bug12 小时前
protobuff中的required有什么用?
服务器·c语言·开发语言·单片机·嵌入式硬件