From e6bb74064e360dfc2db3d28a0fda5663d55f7c90 Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Mon, 6 Jan 2025 09:29:34 +0100 Subject: [PATCH 1/2] init analog input w/o pullup --- src/MF_Analog/MFAnalog.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/MF_Analog/MFAnalog.cpp b/src/MF_Analog/MFAnalog.cpp index 72c34953..1c437461 100644 --- a/src/MF_Analog/MFAnalog.cpp +++ b/src/MF_Analog/MFAnalog.cpp @@ -27,7 +27,6 @@ void MFAnalog::attach(uint8_t pin, const char *name, uint8_t sensitivity) else if (_pin == 6) _pin = A7; #endif - pinMode(_pin, INPUT_PULLUP); // set pin to input. Could use OUTPUT for analog, but shows the intention :-) // Fill averaging buffers with initial reading for (uint8_t i = 0; i < ADC_MAX_AVERAGE; i++) { readBuffer(); From c5f8fe031165a67617976d71a579e5858e15242e Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Tue, 7 Jan 2025 05:44:13 +0100 Subject: [PATCH 2/2] new device type --- src/Config.cpp | 6 +++++- src/MF_Analog/Analog.cpp | 4 ++-- src/MF_Analog/Analog.h | 2 +- src/MF_Analog/MFAnalog.cpp | 6 +++++- src/MF_Analog/MFAnalog.h | 2 +- src/config.h | 3 ++- 6 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/Config.cpp b/src/Config.cpp index 03ba4f63..4b36c96b 100644 --- a/src/Config.cpp +++ b/src/Config.cpp @@ -514,10 +514,14 @@ void readConfigFromMemory(bool configFromFlash) #endif #if MF_ANALOG_SUPPORT == 1 + case kTypeAnalogInputDeprecated: case kTypeAnalogInput: params[0] = readUint(&addrMem, configFromFlash); // pin number params[1] = readUint(&addrMem, configFromFlash); // sensitivity - Analog::Add(params[0], &nameBuffer[pNameBuffer], params[1]); // MUST be before readName because readName returns the pointer for the NEXT Name + if (command == kTypeAnalogInputDeprecated) + Analog::Add(params[0], &nameBuffer[pNameBuffer], params[1], true); // MUST be before readName because readName returns the pointer for the NEXT Name + else + Analog::Add(params[0], &nameBuffer[pNameBuffer], params[1], false); // MUST be before readName because readName returns the pointer for the NEXT Name copy_success = readName(&addrMem, nameBuffer, &pNameBuffer, configFromFlash); // copy the NULL terminated name to to nameBuffer and set to next free memory location // copy_success = readEndCommand(&addrMem, ':'); // once the nameBuffer is not required anymore uncomment this line and delete the line before break; diff --git a/src/MF_Analog/Analog.cpp b/src/MF_Analog/Analog.cpp index f3d96e71..6e91fc12 100644 --- a/src/MF_Analog/Analog.cpp +++ b/src/MF_Analog/Analog.cpp @@ -34,13 +34,13 @@ namespace Analog return true; } - void Add(uint8_t pin, char const *name, uint8_t sensitivity) + void Add(uint8_t pin, char const *name, uint8_t sensitivity, bool deprecated) { if (analogRegistered == maxAnalogIn) return; analog[analogRegistered] = MFAnalog(); - analog[analogRegistered].attach(pin, name, sensitivity); + analog[analogRegistered].attach(pin, name, sensitivity, deprecated); MFAnalog::attachHandler(handlerOnAnalogChange); analogRegistered++; #ifdef DEBUG2CMDMESSENGER diff --git a/src/MF_Analog/Analog.h b/src/MF_Analog/Analog.h index 4c4b7099..32bd05ab 100644 --- a/src/MF_Analog/Analog.h +++ b/src/MF_Analog/Analog.h @@ -10,7 +10,7 @@ namespace Analog { bool setupArray(uint16_t count); - void Add(uint8_t pin, char const *name = "AnalogInput", uint8_t sensitivity = 3); + void Add(uint8_t pin, char const *name = "AnalogInput", uint8_t sensitivity = 3, bool deprecated = true); void Clear(); void read(); void readAverage(); diff --git a/src/MF_Analog/MFAnalog.cpp b/src/MF_Analog/MFAnalog.cpp index 1c437461..86f4af96 100644 --- a/src/MF_Analog/MFAnalog.cpp +++ b/src/MF_Analog/MFAnalog.cpp @@ -13,7 +13,7 @@ MFAnalog::MFAnalog() _initialized = false; } -void MFAnalog::attach(uint8_t pin, const char *name, uint8_t sensitivity) +void MFAnalog::attach(uint8_t pin, const char *name, uint8_t sensitivity, bool deprecated) { _sensitivity = sensitivity; _pin = pin; @@ -27,6 +27,10 @@ void MFAnalog::attach(uint8_t pin, const char *name, uint8_t sensitivity) else if (_pin == 6) _pin = A7; #endif + // enabling PullUp makes a nonlinear behaviour if pot is used + if (deprecated) + pinMode(_pin, INPUT_PULLUP); + // Fill averaging buffers with initial reading for (uint8_t i = 0; i < ADC_MAX_AVERAGE; i++) { readBuffer(); diff --git a/src/MF_Analog/MFAnalog.h b/src/MF_Analog/MFAnalog.h index 8945ca9e..00e01097 100644 --- a/src/MF_Analog/MFAnalog.h +++ b/src/MF_Analog/MFAnalog.h @@ -26,7 +26,7 @@ class MFAnalog public: MFAnalog(); static void attachHandler(analogEvent handler); - void attach(uint8_t pin, const char *name, uint8_t sensitivity); + void attach(uint8_t pin, const char *name, uint8_t sensitivity, bool deprecated); void update(); void retrigger(); void readBuffer(); diff --git a/src/config.h b/src/config.h index 269e9c10..7ef7dd71 100644 --- a/src/config.h +++ b/src/config.h @@ -18,13 +18,14 @@ enum { kTypeEncoder, // 8 kTypeStepperDeprecated2, // 9 (keep for backwards compatibility, stepper type with auto zero support if btnPin is > 0) kTypeOutputShifter, // 10 Shift register support (example: 74HC595, TLC592X) - kTypeAnalogInput, // 11 Analog Device with 1 pin + kTypeAnalogInputDeprecated,// 11 Analog Device with 1 pin kTypeInputShifter, // 12 Input shift register support (example: 74HC165) kTypeMuxDriver, // 13 Multiplexer selector support (generates select outputs) kTypeDigInMux, // 14 Digital input multiplexer support (example: 74HCT4067, 74HCT4051) kTypeStepper, // 15 new stepper type with settings for backlash and deactivate output kTypeLedSegmentMulti, // 16 new led segment with MAX7219 and TM1637 support kTypeCustomDevice, // 17 Custom Device + kTypeAnalogInput, // 18 Analog Device without PullUp enabled kTypeMax // if new device types are added, this MUST be before this one! };