From d621bea6da2f5acd950bd0572d6089520ee0cd09 Mon Sep 17 00:00:00 2001 From: Vanessa Brown Date: Wed, 17 Sep 2025 01:51:44 -0400 Subject: [PATCH] Add Mode 1/2 option for LPS28DFW sensor with SD card persistence --- Firmware/OpenLog_Artemis/autoDetect.ino | 2 +- Firmware/OpenLog_Artemis/menuAttachedDevices.ino | 11 +++++++++++ Firmware/OpenLog_Artemis/nvm.ino | 3 +++ Firmware/OpenLog_Artemis/settings.h | 1 + 4 files changed, 16 insertions(+), 1 deletion(-) diff --git a/Firmware/OpenLog_Artemis/autoDetect.ino b/Firmware/OpenLog_Artemis/autoDetect.ino index 1531008..02859f6 100644 --- a/Firmware/OpenLog_Artemis/autoDetect.ino +++ b/Firmware/OpenLog_Artemis/autoDetect.ino @@ -440,7 +440,7 @@ bool beginQwiicDevices() temp->online = tempDevice->begin(temp->address, qwiic) == LPS28DFW_OK; lps28dfw_md_t modeConfig = { - .fs = LPS28DFW_1260hPa, // Full scale range + .fs = (nodeSetting->mode == 2) ? LPS28DFW_4000hPa : LPS28DFW_1260hPa, // Full scale range .odr = LPS28DFW_ONE_SHOT, // Output data rate .avg = LPS28DFW_4_AVG, // Average filter .lpf = LPS28DFW_LPF_DISABLE // Low-pass filter diff --git a/Firmware/OpenLog_Artemis/menuAttachedDevices.ino b/Firmware/OpenLog_Artemis/menuAttachedDevices.ino index 6214bbd..083e2f9 100644 --- a/Firmware/OpenLog_Artemis/menuAttachedDevices.ino +++ b/Firmware/OpenLog_Artemis/menuAttachedDevices.ino @@ -873,6 +873,10 @@ void menuConfigure_LPS28DFW(void *configPtr) SerialPrint(F("3) Log Temperature: ")); if (sensorSetting->logTemperature == true) SerialPrintln(F("Enabled")); else SerialPrintln(F("Disabled")); + + SerialPrint(F("4) Toggle Pressure Range: ")); + if (sensorSetting->mode == 1) SerialPrintln(F("Mode 1 (260 - 1260 hPa)")); + else SerialPrintln(F("Mode 2 (260 - 4000 hPa)")); } SerialPrintln(F("x) Exit")); @@ -886,6 +890,13 @@ void menuConfigure_LPS28DFW(void *configPtr) sensorSetting->logPressure ^= 1; else if (incoming == '3') sensorSetting->logTemperature ^= 1; + else if (incoming == '4') // <-- NEW: Mode toggle + { + if (sensorSetting->mode == 1) + sensorSetting->mode = 2; + else + sensorSetting->mode = 1; + } else if (incoming == 'x') break; else if (incoming == STATUS_GETBYTE_TIMEOUT) diff --git a/Firmware/OpenLog_Artemis/nvm.ino b/Firmware/OpenLog_Artemis/nvm.ino index 9b353a2..0871d0d 100644 --- a/Firmware/OpenLog_Artemis/nvm.ino +++ b/Firmware/OpenLog_Artemis/nvm.ino @@ -622,6 +622,7 @@ void recordDeviceSettingsToFile() settingsFile.println((String)base + "log=" + nodeSetting->log); settingsFile.println((String)base + "logPressure=" + nodeSetting->logPressure); settingsFile.println((String)base + "logTemperature=" + nodeSetting->logTemperature); + settingsFile.println((String)base + "mode=" + nodeSetting->mode); } break; case DEVICE_PHT_BME280: @@ -1206,6 +1207,8 @@ bool parseDeviceLine(char* str) { nodeSetting->logPressure = d; else if (strcmp(deviceSettingName, "logTemperature") == 0) nodeSetting->logTemperature = d; + else if (strcmp(deviceSettingName, "mode") == 0) + nodeSetting->mode = d; else SerialPrintf2("Unknown device setting: %s\r\n", deviceSettingName); } diff --git a/Firmware/OpenLog_Artemis/settings.h b/Firmware/OpenLog_Artemis/settings.h index 3bc67a0..720a5af 100644 --- a/Firmware/OpenLog_Artemis/settings.h +++ b/Firmware/OpenLog_Artemis/settings.h @@ -101,6 +101,7 @@ struct struct_LPS28DFW { bool log = true; bool logPressure = true; bool logTemperature = true; + uint8_t mode = 1; //Allow selection of pressure mode 1 (260-1060 hPa) or mode 2 (260-4000 hPa) unsigned long powerOnDelayMillis = minimumQwiicPowerOnDelay; // Wait for at least this many millis before communicating with this device. Increase if required! };