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);
}
}
在这里找到了答案:
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]