编码器续

昨天把编码器接在了模拟信号口上并且胡乱设置了一个1000的阈值去测试,也算是成功了。
今天接到数字信号上面用high和low值去学习编码器计数的操作。

上代码:

/* Read Quadrature Encoder
* Connect Encoder to Pins encoder0PinA, encoder0PinB, and +5V.
*
* Sketch by max wolf / www.meso.net
* v. 0.1 - very basic functions - mw 20061220
*
*/


int val;
int encoder0PinA = 3;
int encoder0PinB = 4;
int encoder0Pos = 0;
int encoder0PinALast = LOW;
int n = LOW;

void setup() {
pinMode (encoder0PinA,INPUT); //channel A 插在DIGITAL 3
pinMode (encoder0PinB,INPUT); //channel B 插在DIGITAL 4
Serial.begin (9600); //debuging输出
}

void loop() {
n = digitalRead(encoder0PinA); //先读取A电位
if ((encoder0PinALast == LOW) && (n == HIGH)) { //如果A之前是低电位,现在是高电位
if (digitalRead(encoder0PinB) == LOW) { //那么如果B现在低点位
encoder0Pos--; //计数减,反转
} else { //或者如果B现在是高电位
encoder0Pos++; //计数加,正转
}
Serial.print (encoder0Pos);
Serial.print ("/");
}
encoder0PinALast = n; //记录本周期A电位,用于下一周期比较
}

这段代码也没什么不好理解的,相比昨天的接线,只需要把encoder接到analog 0/1 的两根针移到digital 3/4上面就行。 逻辑就是记录A频道的电位,并和上一周期A频道的电位进行比较,如果有差别则说明已经发生位移。在证明已经位移的情况下再读取B频道的电位,得出位移的方向是正还是负。这个逻辑可以参考AB频道的脉冲图谱。
AB频道脉冲

加载评论框需要翻墙