【发布时间】:2018-01-10 18:49:18
【问题描述】:
背景:
在阅读this arduino example 后,我正在使用状态机为格雷码旋转编码器编写驱动程序。我的设备是使用 .net 微框架用 c# 编码的。由于它不是一个实时嵌入式操作系统,因此我只能在中断期间捕获编码器两个引脚之一的状态。中断时,事件排队等待在高优先级线程中运行。产生中断的引脚状态作为参数传递给“ISR”,也就是NativeEventHandler 委托。在处理程序运行时读取第二个引脚的状态是不准确的,因为它是在实际事件排队之后的几毫秒。(我已经尝试过了)
在我的例子中,基本状态是引脚 A 和 B 都拉高(值 = 1)
所以,我只有 4 个可测量的状态,但实际状态是基于之前的状态。
- 引脚 A 高 1
- 引脚 B 高 1
- 引脚 A 低 0
- B 脚低 0
我在制作不会混淆的状态转换表时遇到问题。我正在尝试提出一些快速的逻辑或一些按位运算来完成此操作。
这是我想出的状态表(不是转换表):
Pin State Assigned Value State Name
PinB-High 4 CW Rot
PinA-High 3 CW3
PinB-Low 2 CW2
PinA-Low 1 CW1
Start 0 Start
PinB-Low 5 CCW1
PinA-Low 6 CCW2
PinB-High 7 CCW3
PinA-High 8 CCW Rot
如何仅在 4 个状态下获得正确的转换?
【问题讨论】:
标签: c# events bit-manipulation state-machine .net-micro-framework