我正在尝试采用下面的草图与我的 WeMos D1 mini 和众所周知的旋转编码器 KY-040 一起使用,但由于某种原因它不起作用,但相同的草图在 Arduino Uno 上运行良好(与不同的引脚分配)。
有人能告诉我草图有什么问题吗?
谢谢你!
代码:
全选const int PinA = 14; // Used for genera
ting interrupts using CLK signal
const int PinB = 12; // Used for reading DT signal
const int PinSW = 13; // Used for the push button switch
int lCnt = 0; // Keep track of last rotary value
volatile int vPos = 0; // Updated by the ISR (Interrupt Service Routine)
void isr_event () {
static unsigned long lIsrTmr = 0; // Last Interrupt time
unsigned long IsrTmr = millis(); // Interrupt time
// If interrupts come faster than 5ms, assume it's a bounce and ignore
if (IsrTmr - lIsrTmr > 5) {
if (digitalRead(PinB) == LOW)
{
vPos++ ; // Could be +5 or +10
}
else {
vPos-- ; // Could be -5 or -10
}
// Restrict value from 0 to +100
vPos = min(10, max(0, vPos));
// Keep track of when we were here last (no more than every 5ms)
lIsrTmr = IsrTmr;
}
}
void setup()
{
Serial.begin(9600);
// Rotary pulses are INPUTs
pinMode(PinA, INPUT);
pinMode(PinB, INPUT);
pinMode(PinSW, INPUT_PULLUP); // Switch is floating so use the in-built PULLUP so we don't need a resistor
attachInterrupt(digitalPinToInterrupt(PinA), isr_event, LOW); // Attach the routine to service the interrupts
Serial.println(F("Starting...")); // Ready to go!
}
void loop()
{
// Is someone pressing the rotary switch?
if ((!digitalRead(PinSW))) {
vPos = 0;
while (!digitalRead(PinSW))
delay(10);
}
// If the current rotary switch position has changed then update everything
if (vPos != lCnt) {
// Write out to serial monitor the value and direction
Serial.println(vPos);
// Keep track of this new value
lCnt = vPos ;
}
}