读取红外滴速传感器时如何保证数据只读取一次(--->扩展到按键)
// 瞬时值 下降沿触发 上升沿触发 前一个值
unsigned char RedDripVal,RedDripDown,RedDripUp,RedDripOld;
void RedDrip_Proc()
{
RedDripVal = ReadReadDrip();
RedDripDown = RedDripVal & (RedDripVal ^ RedDripOld);
RedDripUp = ~RedDripVal & (RedDripVal ^ RedDripOld);
RedDripOld = RedDripVal;
switch(RedDripDown)
{
case 0:
break;
case 1:
break;
}
}
红外滴液传感器信号处理代码解析
1. 变量定义解析
unsigned char RedDripVal, // 当前传感器瞬时值(实时状态)
RedDripDown, // 下降沿触发标志(1表示检测到下降沿)
RedDripUp, // 上升沿触发标志(1表示检测到上升沿)
RedDripOld; // 前一次采样的历史值
2. 核心算法逻辑
信号变化检测(重点)
// 异或运算找出变化位(相同为0,不同为1)
uint8_t changed_bits = RedDripVal ^ RedDripOld;
// 下降沿检测:旧值为1且新值为0的位(修正后的正确逻辑)
RedDripDown = (~RedDripVal) & changed_bits;
// 上升沿检测:旧值为0且新值为1的位(修正后的正确逻辑)
RedDripUp = RedDripVal & changed_bits;
浙公网安备 33010602011771号