From 8d5fb81219f9ea9ae8dca7b5eee8c9b6f7a8ae1d Mon Sep 17 00:00:00 2001 From: Vsevolod Merenkov Date: Mon, 30 Sep 2019 03:04:06 +0300 Subject: [PATCH] Fixed serial command for voltmeter constant, added EEPROM support for it #bugfix --- .../src/pP_config.cpp | 14 ++++++++ .../Pyr0_Piezo_Sensor_v2.x.x/src/pP_config.h | 5 +-- .../Pyr0_Piezo_Sensor_v2.x.x/src/pP_serial.h | 36 +++++++++---------- .../src/pP_volatile.h | 2 +- 4 files changed, 36 insertions(+), 21 deletions(-) diff --git a/firmware/AVR-Source/Pyr0_Piezo_Sensor_v2.x.x/src/pP_config.cpp b/firmware/AVR-Source/Pyr0_Piezo_Sensor_v2.x.x/src/pP_config.cpp index 47a5288..516788d 100644 --- a/firmware/AVR-Source/Pyr0_Piezo_Sensor_v2.x.x/src/pP_config.cpp +++ b/firmware/AVR-Source/Pyr0_Piezo_Sensor_v2.x.x/src/pP_config.cpp @@ -8,6 +8,8 @@ int LOOP_DUR = LOOP_DUR_DEFAULT; // duration of time between ADC checks and othe int TRG_DUR = TRG_DUR_DEFAULT; // duration of the Z-axis pulse sent, in ms int Hyst = HYST_DEFAULT; // Hysteresis value for ADC measurements int Debug = 0; +long voltMeterConstant = VM_CONST_DEFAULT; +uint8_t pP_i2c_address = 0xa0; void resetEEPROM() { resetConfig(); @@ -65,6 +67,17 @@ void restoreConfig() { } else { Hyst = temp; } + + long longTemp; + EEPROM.get(VM_CONST_DEFAULT, longTemp); + if (longTemp < 1000000L || longTemp > 1200000L) + { + resetEEPROM(); + } + else + { + voltMeterConstant = longTemp; + } } void resetConfig() { @@ -74,4 +87,5 @@ void resetConfig() { LOOP_DUR = LOOP_DUR_DEFAULT; TRG_DUR = TRG_DUR_DEFAULT; Hyst = HYST_DEFAULT; + voltMeterConstant = VM_CONST_DEFAULT; } \ No newline at end of file diff --git a/firmware/AVR-Source/Pyr0_Piezo_Sensor_v2.x.x/src/pP_config.h b/firmware/AVR-Source/Pyr0_Piezo_Sensor_v2.x.x/src/pP_config.h index 657cbf0..95fa6ba 100644 --- a/firmware/AVR-Source/Pyr0_Piezo_Sensor_v2.x.x/src/pP_config.h +++ b/firmware/AVR-Source/Pyr0_Piezo_Sensor_v2.x.x/src/pP_config.h @@ -48,14 +48,15 @@ #endif #define VM_CONST_ADDRESS 28 +#define VM_CONST_DEFAULT 1125300L #if !(defined(voltMeterConstant)) - extern long voltMeterConstant = 1125300L; // For fine tuning input voltage sense + extern long voltMeterConstant; // For fine tuning input voltage sense #endif #ifdef I2C_INPUT #define I2C_SLAVE_ADDRESS 24 #if !(defined(pP_i2c_address)) - extern byte pP_i2c_address = 0xa0; // I2C Bus Address + extern uint8_t pP_i2c_address; // I2C Bus Address #endif #endif diff --git a/firmware/AVR-Source/Pyr0_Piezo_Sensor_v2.x.x/src/pP_serial.h b/firmware/AVR-Source/Pyr0_Piezo_Sensor_v2.x.x/src/pP_serial.h index 5bff6c2..c584fdd 100644 --- a/firmware/AVR-Source/Pyr0_Piezo_Sensor_v2.x.x/src/pP_serial.h +++ b/firmware/AVR-Source/Pyr0_Piezo_Sensor_v2.x.x/src/pP_serial.h @@ -8,7 +8,7 @@ void parseData() { strcpy(serialMessageIn, strtokIndx); // copy it to serialMessageIn strtokIndx = strtok(NULL, " "); // this continues where the previous call left off - serialInt = atoi(strtokIndx); // convert this part to an integer + serialLong = atol(strtokIndx); // convert this part to an integer } /*------------------------------------------------*/ @@ -60,9 +60,9 @@ void identifyMarkers() { void updateGainFactor() { - if (serialInt >= 0) + if (serialLong >= 0) { - GAIN_FACTOR = serialInt; + GAIN_FACTOR = serialLong; adjustGain(); EEPROM.put(GAIN_FACTOR_ADDRESS, GAIN_FACTOR); } @@ -71,9 +71,9 @@ void updateGainFactor() /*------------------------------------------------*/ void updateVFol() { - if (serialInt >= 0) + if (serialLong >= 0) { - followerThrs = serialInt; + followerThrs = serialLong; adjustFollow(); EEPROM.put(FOLLOWER_THRESHOLD_ADDRESS, followerThrs); } @@ -81,9 +81,9 @@ void updateVFol() { /*------------------------------------------------*/ void updateVComp() { - if (serialInt >= 0) + if (serialLong >= 0) { - compThrs = serialInt; + compThrs = serialLong; adjustComp(); EEPROM.put(COMP_THRESHOLD_ADDRESS, compThrs); } @@ -93,36 +93,36 @@ void updateVComp() { void updateLoopDuration() { - if (serialInt >= 0) + if (serialLong >= 0) { - LOOP_DUR = serialInt; + LOOP_DUR = serialLong; EEPROM.put(LOOP_DUR_ADDRESS, LOOP_DUR); } } /*------------------------------------------------*/ void updateTrigDuration() { - if (serialInt >= 0) + if (serialLong >= 0) { - TRG_DUR = serialInt; + TRG_DUR = serialLong; EEPROM.put(TRG_DUR_ADDRESS, TRG_DUR); } } /*------------------------------------------------*/ void updateHysteresis() { - if (serialInt >= 0) + if (serialLong >= 0) { - Hyst = serialInt; + Hyst = serialLong; EEPROM.put(HYST_ADDRESS, Hyst); } } /*------------------------------------------------*/ void updateConstant() { - if (serialInt >= 0) + if (serialLong >= 0) { - voltMeterConstant = (long) serialInt; + voltMeterConstant = (long) serialLong; EEPROM.put(VM_CONST_ADDRESS, voltMeterConstant); } } @@ -130,9 +130,9 @@ void updateConstant() { /*------------------------------------------------*/ void updateDebug() { - if (serialInt > 0) { + if (serialLong > 0) { Debug = 1; - } else if (serialInt == 0) { + } else if (serialLong == 0) { Debug = 0; } } @@ -218,7 +218,7 @@ void updateParams() { updateVComp(); } else if (strcmp(serialMessageIn, "LOOP_D") == 0) { - updateTrigDuration(); + updateLoopDuration(); } else if (strcmp(serialMessageIn, "TRG_D") == 0) { updateTrigDuration(); diff --git a/firmware/AVR-Source/Pyr0_Piezo_Sensor_v2.x.x/src/pP_volatile.h b/firmware/AVR-Source/Pyr0_Piezo_Sensor_v2.x.x/src/pP_volatile.h index 1ed74a9..9d12576 100644 --- a/firmware/AVR-Source/Pyr0_Piezo_Sensor_v2.x.x/src/pP_volatile.h +++ b/firmware/AVR-Source/Pyr0_Piezo_Sensor_v2.x.x/src/pP_volatile.h @@ -33,7 +33,7 @@ char inputBuffer[buffSize]; byte bytesRecvd = 0; bool serialIncoming = false; char serialMessageIn[buffSize] = {0}; -int serialInt = 0; +long serialLong = 0; //#define LOW 0 //#define HIGH 1