diff --git a/code/espurna/config/device.h b/code/espurna/config/device.h index c6c0e51f..63dd0014 100644 --- a/code/espurna/config/device.h +++ b/code/espurna/config/device.h @@ -505,6 +505,11 @@ enum devices { #define NETBIOS_SUPPORT 1 #define SSDP_SUPPORT 1 + // Encoder support + #ifndef ENCODER_SUPPORT + #define ENCODER_SUPPORT 1 + #endif + #endif // ----------------------------------------------------------------------------- @@ -561,6 +566,10 @@ enum devices { #define RELAY_PROVIDER RELAY_PROVIDER_LIGHT #define LIGHT_PROVIDER LIGHT_PROVIDER_DIMMER + #ifndef ENCODER_SUPPORT + #define ENCODER_SUPPORT 1 + #endif + #elif ESPURNA_IMAGE == ESPURNA_MY92XX #define ESPURNA_IMAGE_NAME "MY92XX" @@ -569,6 +578,10 @@ enum devices { #define LIGHT_PROVIDER LIGHT_PROVIDER_MY92XX #define MY92XX_COMMAND MY92XX_COMMAND_DEFAULT + #ifndef ENCODER_SUPPORT + #define ENCODER_SUPPORT 1 + #endif + #elif ESPURNA_IMAGE == ESPURNA_EMON #define ESPURNA_IMAGE_NAME "EMON" diff --git a/code/espurna/encoder.ino b/code/espurna/encoder.ino index 1934efcb..7918de64 100644 --- a/code/espurna/encoder.ino +++ b/code/espurna/encoder.ino @@ -31,60 +31,37 @@ void _encoderConfigure() { } _encoders.clear(); - // Load encoders - #if (ENCODER1_PIN1 != GPIO_NONE) && (ENCODER1_PIN2 != GPIO_NONE) - { - _encoders.push_back({ - new Encoder(ENCODER1_PIN1, ENCODER1_PIN2), - ENCODER1_BUTTON_PIN, ENCODER1_BUTTON_LOGIC, ENCODER1_BUTTON_MODE, ENCODER1_MODE, - ENCODER1_CHANNEL1, ENCODER1_CHANNEL2 - }); - } - #endif - #if (ENCODER2_PIN1 != GPIO_NONE) && (ENCODER2_PIN2 != GPIO_NONE) - { - _encoders.push_back({ - new Encoder(ENCODER2_PIN1, ENCODER2_PIN2), - ENCODER2_BUTTON_PIN, ENCODER2_BUTTON_LOGIC, ENCODER2_BUTTON_MODE, ENCODER2_MODE, - ENCODER2_CHANNEL1, ENCODER2_CHANNEL2 - }); - } - #endif - #if (ENCODER3_PIN1 != GPIO_NONE) && (ENCODER3_PIN2 != GPIO_NONE) - { - _encoders.push_back({ - new Encoder(ENCODER3_PIN1, ENCODER3_PIN2), - ENCODER3_BUTTON_PIN, ENCODER3_BUTTON_LOGIC, ENCODER3_BUTTON_MODE, ENCODER3_MODE, - ENCODER3_CHANNEL1, ENCODER3_CHANNEL2 - }); - } - #endif - #if (ENCODER4_PIN1 != GPIO_NONE) && (ENCODER4_PIN2 != GPIO_NONE) - { - _encoders.push_back({ - new Encoder(ENCODER4_PIN1, ENCODER4_PIN2), - ENCODER4_BUTTON_PIN, ENCODER4_BUTTON_LOGIC, ENCODER4_BUTTON_MODE, ENCODER4_MODE, - ENCODER4_CHANNEL1, ENCODER4_CHANNEL2 - }); - } - #endif - #if (ENCODER5_PIN1 != GPIO_NONE) && (ENCODER5_PIN2 != GPIO_NONE) - { + unsigned char index = 0; + while (index < MAX_COMPONENTS) { + + unsigned char pin1 = getSetting("enc1stGPIO", index, GPIO_NONE).toInt(); + unsigned char pin2 = getSetting("enc2ndGPIO", index, GPIO_NONE).toInt(); + if (GPIO_NONE == pin1 || GPIO_NONE == pin2) break; + + unsigned char button_pin = getSetting("encBtnGPIO", index, GPIO_NONE).toInt(); + unsigned char button_logic = getSetting("encBtnLogic", index, GPIO_LOGIC_INVERSE).toInt(); + unsigned char button_mode = getSetting("encBtnMode", index, INPUT_PULLUP).toInt(); + unsigned char mode = getSetting("encMode", index, ENCODER_MODE_RATIO).toInt(); + unsigned char channel1 = getSetting("enc1stCh", index, 0).toInt(); + unsigned char channel2 = getSetting("enc2ndCh", index, 1).toInt(); + _encoders.push_back({ - new Encoder(ENCODER5_PIN1, ENCODER5_PIN2), - ENCODER5_BUTTON_PIN, ENCODER5_BUTTON_LOGIC, ENCODER5_BUTTON_MODE, ENCODER5_MODE, - ENCODER5_CHANNEL1, ENCODER5_CHANNEL2 + new Encoder(pin1, pin2), + button_pin, button_logic, button_mode, + mode, + channel1, channel2 }); - } - #endif - // Setup encoders - for (unsigned char i=0; i<_encoders.size(); i++) { - if (GPIO_NONE != _encoders[i].button_pin) { - pinMode(_encoders[i].button_pin, _encoders[i].button_mode); + if (GPIO_NONE != button_pin) { + pinMode(button_pin, button_mode); } + + ++index; + } + DEBUG_MSG_P(PSTR("[ENCODER] Encoders: %u\n"), _encoders.size()); + } void _encoderLoop() { @@ -149,8 +126,6 @@ void encoderSetup() { espurnaRegisterLoop(_encoderLoop); espurnaRegisterReload(_encoderConfigure); - DEBUG_MSG_P(PSTR("[ENCODER] Number of encoders: %u\n"), _encoders.size()); - } #endif // ENCODER_SUPPORT && (LIGHT_PROVIDER != LIGHT_PROVIDER_NONE)