esp32编码器程序

int lastEncoded = 0; // 上一个编码器的状态

int lastEncoded1 = 0; // 上一个编码器的状态

// 读取编码器的状态并更新位置

void readEncoder() {

  int MSB = digitalRead(PinA); // 当前编码器A的状态

  int LSB = digitalRead(PinB); // 当前编码器B的状态

  // 通过比较A和B信号的变化来判断旋转的方向

  int encoded = (MSB << 1) | LSB;  // 将A和B的状态组合成一个二进制值

  int sum = (lastEncoded << 2) | encoded; // 将前一个状态和当前状态组合

  // 判断旋转方向

  if (sum == 0b1101 || sum == 0b0110 || sum == 0b1011 || sum == 0b0100) {

    encoderPos++; // 顺时针旋转

    lastEncoded1 = 1; // 上一个编码器的状态

    Serial.println(encoderPos);

    Serial.println("顺时针旋转");

  } else if (sum == 0b1110 || sum == 0b0001 || sum == 0b1000 || sum == 0b0111) {

    encoderPos--; // 逆时针旋转

     lastEncoded1 = 2; // 上一个编码器的状态

    Serial.println(encoderPos);

    Serial.println("逆时针旋转");

  }

  lastEncoded = encoded; // 更新上一个编码器状态

}

放中断执行

attachInterrupt(digitalPinToInterrupt(PinA), readEncoder, CHANGE);

  attachInterrupt(digitalPinToInterrupt(PinB), readEncoder, CHANGE);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值