rotary encoder bugfixes
- do not call pinMode on pin = -1 ([E][esp32-hal-gpio.c:102] __pinMode(): Invalid pin selected) - support encoder without "C" pin, i.e. no pushbutton function
This commit is contained in:
@@ -99,6 +99,12 @@ public:
|
|||||||
{
|
{
|
||||||
DEBUG_PRINTLN(F("Usermod Rotary Encoder init."));
|
DEBUG_PRINTLN(F("Usermod Rotary Encoder init."));
|
||||||
PinManagerPinType pins[3] = { { pinA, false }, { pinB, false }, { pinC, false } };
|
PinManagerPinType pins[3] = { { pinA, false }, { pinB, false }, { pinC, false } };
|
||||||
|
if ((pinA < 0) || (pinB < 0)) { //WLEDMM catch error: [ 1839][E][esp32-hal-gpio.c:102] __pinMode(): Invalid pin selected
|
||||||
|
enabled = false;
|
||||||
|
DEBUG_PRINTLN(F("Invalid GPIO pins for Usermod Rotary Encoder.")); //WLEDMM add debug info
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!pinManager.allocateMultiplePins(pins, 3, PinOwner::UM_RotaryEncoderUI)) {
|
if (!pinManager.allocateMultiplePins(pins, 3, PinOwner::UM_RotaryEncoderUI)) {
|
||||||
// BUG: configuring this usermod with conflicting pins
|
// BUG: configuring this usermod with conflicting pins
|
||||||
// will cause it to de-allocate pins it does not own
|
// will cause it to de-allocate pins it does not own
|
||||||
@@ -116,8 +122,7 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
pinMode(pinA, USERMOD_ROTARY_ENCODER_GPIO);
|
pinMode(pinA, USERMOD_ROTARY_ENCODER_GPIO);
|
||||||
pinMode(pinB, USERMOD_ROTARY_ENCODER_GPIO);
|
pinMode(pinB, USERMOD_ROTARY_ENCODER_GPIO);
|
||||||
pinMode(pinC, USERMOD_ROTARY_ENCODER_GPIO);
|
if (pinC >= 0) pinMode(pinC, USERMOD_ROTARY_ENCODER_GPIO); // WLEDMM catch error
|
||||||
|
|
||||||
currentTime = millis();
|
currentTime = millis();
|
||||||
loopTime = currentTime;
|
loopTime = currentTime;
|
||||||
|
|
||||||
@@ -136,6 +141,7 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
initDone = true;
|
initDone = true;
|
||||||
|
USER_PRINTLN(F("Rotary encoder setup completed.")); // WLEDMM inform user
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -267,6 +267,11 @@ public:
|
|||||||
{
|
{
|
||||||
DEBUG_PRINTLN(F("Usermod Rotary Encoder init."));
|
DEBUG_PRINTLN(F("Usermod Rotary Encoder init."));
|
||||||
PinManagerPinType pins[3] = { { pinA, false }, { pinB, false }, { pinC, false } };
|
PinManagerPinType pins[3] = { { pinA, false }, { pinB, false }, { pinC, false } };
|
||||||
|
if ((pinA < 0) || (pinB < 0)) { //WLEDMM catch error: [ 1839][E][esp32-hal-gpio.c:102] __pinMode(): Invalid pin selected
|
||||||
|
enabled = false;
|
||||||
|
DEBUG_PRINTLN(F("Invalid GPIO pins for Usermod Rotary Encoder (ALT).")); //WLEDMM add debug info
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (!pinManager.allocateMultiplePins(pins, 3, PinOwner::UM_RotaryEncoderUI)) {
|
if (!pinManager.allocateMultiplePins(pins, 3, PinOwner::UM_RotaryEncoderUI)) {
|
||||||
// BUG: configuring this usermod with conflicting pins
|
// BUG: configuring this usermod with conflicting pins
|
||||||
// will cause it to de-allocate pins it does not own
|
// will cause it to de-allocate pins it does not own
|
||||||
@@ -284,7 +289,7 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
pinMode(pinA, USERMOD_ROTARY_ENCODER_GPIO);
|
pinMode(pinA, USERMOD_ROTARY_ENCODER_GPIO);
|
||||||
pinMode(pinB, USERMOD_ROTARY_ENCODER_GPIO);
|
pinMode(pinB, USERMOD_ROTARY_ENCODER_GPIO);
|
||||||
pinMode(pinC, USERMOD_ROTARY_ENCODER_GPIO);
|
if (pinC >= 0) pinMode(pinC, USERMOD_ROTARY_ENCODER_GPIO); // WLEDMM catch error
|
||||||
|
|
||||||
loopTime = millis();
|
loopTime = millis();
|
||||||
|
|
||||||
@@ -305,6 +310,7 @@ public:
|
|||||||
Enc_A = digitalRead(pinA); // Read encoder pins
|
Enc_A = digitalRead(pinA); // Read encoder pins
|
||||||
Enc_B = digitalRead(pinB);
|
Enc_B = digitalRead(pinB);
|
||||||
Enc_A_prev = Enc_A;
|
Enc_A_prev = Enc_A;
|
||||||
|
USER_PRINTLN(F("Rotary encoder (ALT) setup completed.")); // WLEDMM inform user
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -349,7 +355,8 @@ public:
|
|||||||
{
|
{
|
||||||
loopTime = currentTime; // Updates loopTime
|
loopTime = currentTime; // Updates loopTime
|
||||||
|
|
||||||
bool buttonPressed = !digitalRead(pinC); //0=pressed, 1=released
|
bool buttonPressed = false;
|
||||||
|
if (pinC > 0) buttonPressed = !digitalRead(pinC); //0=pressed, 1=released
|
||||||
if (buttonPressed) {
|
if (buttonPressed) {
|
||||||
if (!buttonPressedBefore) buttonPressedTime = currentTime;
|
if (!buttonPressedBefore) buttonPressedTime = currentTime;
|
||||||
buttonPressedBefore = true;
|
buttonPressedBefore = true;
|
||||||
|
|||||||
Reference in New Issue
Block a user