skyrusher 发表于 2021-1-17 14:16:44

OCROBOT ALPHA 8F328P-U 使用编码器不能正常工作

近日使用了一个常见的EC11五脚带开关旋转编码器,并从网上找到一个测试用例,经测试:能在Arduino Nano上正常工作,而在OCROBOT ALPHA 8F328P-U上只有开关正常工作,左右旋转旋钮无反应。代码如下,期待提供指导:

#include "Rotary.h"

// Enconder PINs
#define ENCODER_PIN_A 10
#define ENCODER_PIN_B 11
#define ENCODER_PUSH_BUTTON 12

volatile int encoderCount = 0;

// Devices class declarations
Rotary encoder = Rotary(ENCODER_PIN_A, ENCODER_PIN_B);

void setup()
{
// Encoder pins
pinMode(ENCODER_PUSH_BUTTON, INPUT_PULLUP);

// Encoder interrupt
attachInterrupt(digitalPinToInterrupt(ENCODER_PIN_A),rotaryEncoder, CHANGE);
attachInterrupt(digitalPinToInterrupt(ENCODER_PIN_B),rotaryEncoder, CHANGE);

Serial.begin(9600);
}

/**
* Reads encoder via interrupt
* Use Rotary.h andRotary.cpp implementation to process encoder via interrupt
*/
void rotaryEncoder()
{ // rotary encoder events
uint8_t encoderStatus = encoder.process();
if (encoderStatus)
    encoderCount = (encoderStatus == DIR_CW) ? 1 : -1;
}


void loop()
{
// Check if the encoder has moved.

if (encoderCount == 1)
{
            Serial.print("->\n") ;
            encoderCount = 0;
}         
if (encoderCount == -1)
{
            Serial.print("<-\n") ;
    encoderCount = 0;
}
if (digitalRead(ENCODER_PUSH_BUTTON) ==LOW)
{
            Serial.print("O\n") ;
         digitalWrite(ENCODER_PUSH_BUTTON,HIGH);
}

   }

skyrusher 发表于 2021-1-17 19:43:10

在这里找到了答案:
http://www.taichi-maker.com/homepage/reference-index/arduino-code-reference/attachinterrupt/
Arduino Uno, Nano, Mini支持中断的引脚2, 3,我自己修改到其他PIN了。

进一步作自己,把这个所谓“改进版”库示例照着改成中断方式,同时把LGT8F328P主频置为2MHZ,发现反应比较迟钝,要快速旋动编码器才有输出:
https://github.com/CarlosSiles67/Rotary
页: [1]
查看完整版本: OCROBOT ALPHA 8F328P-U 使用编码器不能正常工作