prep measure state machine
This commit is contained in:
@@ -25,6 +25,16 @@ void initInputs(void)
|
|||||||
log_i("Init Inputs: OK");
|
log_i("Init Inputs: OK");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool getLevelIn(void)
|
||||||
|
{
|
||||||
|
return digitalRead(LEVEL_IN);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool getErrorIn(void)
|
||||||
|
{
|
||||||
|
return digitalRead(ERROR_IN);
|
||||||
|
}
|
||||||
|
|
||||||
void initOutputs(void)
|
void initOutputs(void)
|
||||||
{
|
{
|
||||||
pinMode(UC01, OUTPUT);
|
pinMode(UC01, OUTPUT);
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
void initBoard(void);
|
void initBoard(void);
|
||||||
void scanI2C(void);
|
|
||||||
|
bool getLevelIn(void);
|
||||||
|
bool getErrorIn(void);
|
||||||
|
|
||||||
#define HAS_DISPLAY
|
#define HAS_DISPLAY
|
||||||
#define HAS_SSD1322
|
#define HAS_SSD1322
|
||||||
|
|||||||
@@ -1,13 +1,55 @@
|
|||||||
#include "gain_control.h"
|
#include "gain_control.h"
|
||||||
|
|
||||||
|
c_gainControl modeNone(e_measureMode::mNone, 0, 0, 0, 0, 0, 0);
|
||||||
c_gainControl mode20mA(e_measureMode::mA20, 1, 1, 0, 0, 1, 1);
|
c_gainControl mode20mA(e_measureMode::mA20, 1, 1, 0, 0, 1, 1);
|
||||||
|
|
||||||
|
|
||||||
|
std::vector<c_gainControl> gainList;
|
||||||
|
|
||||||
|
e_measureMode lastGain = e_measureMode::mNone;
|
||||||
|
|
||||||
void initGainControl(void)
|
void initGainControl(void)
|
||||||
{
|
{
|
||||||
|
gainList.push_back(modeNone);
|
||||||
|
gainList.push_back(mode20mA);
|
||||||
}
|
}
|
||||||
|
|
||||||
void handleGainControl(void)
|
void handleGainControl(void)
|
||||||
{
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool setGain(e_measureMode mode)
|
||||||
|
{
|
||||||
|
bool found = false;
|
||||||
|
if(mode == lastGain)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto &&gain : gainList)
|
||||||
|
{
|
||||||
|
if (gain.getMode() == mode)
|
||||||
|
{
|
||||||
|
gain.activate();
|
||||||
|
found = true;
|
||||||
|
lastGain = mode;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!found)
|
||||||
|
{
|
||||||
|
log_e("measureMode %d not found", mode);
|
||||||
|
resetGain();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void resetGain(void)
|
||||||
|
{
|
||||||
|
log_d("reset gain control");
|
||||||
|
for (auto &&gain : gainList)
|
||||||
|
{
|
||||||
|
gain.deactivate();
|
||||||
|
}
|
||||||
|
setGain(mNone);
|
||||||
}
|
}
|
||||||
@@ -3,6 +3,7 @@
|
|||||||
#include "Arduino.h"
|
#include "Arduino.h"
|
||||||
#include "measure_mode.h"
|
#include "measure_mode.h"
|
||||||
#include "board.h"
|
#include "board.h"
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
#define UCCONTROLIO 6
|
#define UCCONTROLIO 6
|
||||||
|
|
||||||
@@ -12,6 +13,7 @@ class c_gainControl
|
|||||||
|
|
||||||
bool _uc[UCCONTROLIO];
|
bool _uc[UCCONTROLIO];
|
||||||
uint8_t _ucPin[UCCONTROLIO] = {UC01, UC02, UC03, UC04, UC05, UC06};
|
uint8_t _ucPin[UCCONTROLIO] = {UC01, UC02, UC03, UC04, UC05, UC06};
|
||||||
|
bool state = false;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
c_gainControl(e_measureMode mode, bool uc01, bool uc02, bool uc03, bool uc04, bool uc05, bool uc06) : _mode(mode)
|
c_gainControl(e_measureMode mode, bool uc01, bool uc02, bool uc03, bool uc04, bool uc05, bool uc06) : _mode(mode)
|
||||||
@@ -30,6 +32,12 @@ public:
|
|||||||
{
|
{
|
||||||
digitalWrite(_ucPin[i], _uc[i]);
|
digitalWrite(_ucPin[i], _uc[i]);
|
||||||
}
|
}
|
||||||
|
state = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void deactivate(void)
|
||||||
|
{
|
||||||
|
state = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
e_measureMode getMode(void)
|
e_measureMode getMode(void)
|
||||||
@@ -39,4 +47,7 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
void initGainControl(void);
|
void initGainControl(void);
|
||||||
void handleGainControl(void);
|
void handleGainControl(void);
|
||||||
|
|
||||||
|
void resetGain(void);
|
||||||
|
bool setGain(e_measureMode mode);
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ void initMeasure(void)
|
|||||||
log_i("init measure");
|
log_i("init measure");
|
||||||
initMeasureHall();
|
initMeasureHall();
|
||||||
initMeasureMode();
|
initMeasureMode();
|
||||||
|
initMeasureState();
|
||||||
|
log_i("init measure: OK");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -14,6 +16,7 @@ void handleMeasure(void)
|
|||||||
log_d("handle measure");
|
log_d("handle measure");
|
||||||
handleMeasureHall();
|
handleMeasureHall();
|
||||||
handleMeasureMode();
|
handleMeasureMode();
|
||||||
|
handleMeasureState();
|
||||||
}
|
}
|
||||||
|
|
||||||
double getMin(void)
|
double getMin(void)
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
#include "board.h"
|
#include "board.h"
|
||||||
#include "measure_hall.h"
|
#include "measure_hall.h"
|
||||||
#include "measure_mode.h"
|
#include "measure_mode.h"
|
||||||
|
#include "measure_state.h"
|
||||||
|
|
||||||
#define DACINTERVAL 10 //ms
|
#define DACINTERVAL 10 //ms
|
||||||
#define DACSTEP 8 //ticks
|
#define DACSTEP 8 //ticks
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ e_measureMode getMeasureMode(void)
|
|||||||
|
|
||||||
bool getErrorState(void)
|
bool getErrorState(void)
|
||||||
{
|
{
|
||||||
return measureError;
|
return getErrorIn();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool getOkState(void)
|
bool getOkState(void)
|
||||||
@@ -31,7 +31,6 @@ bool getOpenState(void)
|
|||||||
return measureOpen;
|
return measureOpen;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void initMeasureMode(void)
|
void initMeasureMode(void)
|
||||||
{
|
{
|
||||||
log_i("init measure mode");
|
log_i("init measure mode");
|
||||||
@@ -39,5 +38,5 @@ void initMeasureMode(void)
|
|||||||
|
|
||||||
void handleMeasureMode(void)
|
void handleMeasureMode(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "Arduino.h"
|
#include "Arduino.h"
|
||||||
|
#include "board.h"
|
||||||
|
|
||||||
|
|
||||||
enum e_measureMode
|
enum e_measureMode
|
||||||
{
|
{
|
||||||
@@ -13,6 +15,7 @@ enum e_measureMode
|
|||||||
mNone
|
mNone
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
e_measureMode getMeasureMode( void );
|
e_measureMode getMeasureMode( void );
|
||||||
void setMeasureMode(e_measureMode newMode);
|
void setMeasureMode(e_measureMode newMode);
|
||||||
bool getErrorState(void);
|
bool getErrorState(void);
|
||||||
|
|||||||
61
MilliOhmMeter_FW/src/measure_state.cpp
Normal file
61
MilliOhmMeter_FW/src/measure_state.cpp
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
#include "measure_state.h"
|
||||||
|
|
||||||
|
e_measureStates currentMeasureState = e_measureStates::stateInit;
|
||||||
|
e_measureStates lastMeasureState = e_measureStates::stateInit;
|
||||||
|
|
||||||
|
uint32_t lastMeasureTime = 0;
|
||||||
|
|
||||||
|
void setMeasureState(e_measureStates newState)
|
||||||
|
{
|
||||||
|
if (currentMeasureState != e_measureStates::stateError && currentMeasureState != e_measureStates::stateFatalError )
|
||||||
|
{
|
||||||
|
currentMeasureState = newState;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
log_e("system in error state, not changing states");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void initMeasureState(void)
|
||||||
|
{
|
||||||
|
currentMeasureState = e_measureStates::stateInit;
|
||||||
|
lastMeasureTime = millis();
|
||||||
|
}
|
||||||
|
|
||||||
|
void handleMeasureState(void)
|
||||||
|
{
|
||||||
|
uint32_t currentTime = millis();
|
||||||
|
bool newState = false;
|
||||||
|
if (currentTime - lastMeasureTime > MEASURESTATEINTERVAL)
|
||||||
|
{
|
||||||
|
if (currentMeasureState != lastMeasureState)
|
||||||
|
{
|
||||||
|
log_i("measureState: %s", s_measureState[currentMeasureState]);
|
||||||
|
newState = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (currentMeasureState)
|
||||||
|
{
|
||||||
|
case e_measureStates::stateInit:
|
||||||
|
{
|
||||||
|
setGain(mNone);
|
||||||
|
currentMeasureState = stateIdle;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case e_measureStates::stateError:
|
||||||
|
{
|
||||||
|
setGain(mNone);
|
||||||
|
if(!getErrorIn())
|
||||||
|
{
|
||||||
|
currentMeasureState = e_measureStates::stateIdle;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
lastMeasureTime = currentTime;
|
||||||
|
}
|
||||||
|
}
|
||||||
35
MilliOhmMeter_FW/src/measure_state.h
Normal file
35
MilliOhmMeter_FW/src/measure_state.h
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Arduino.h"
|
||||||
|
#include "gain_control.h"
|
||||||
|
#include "measure_mode.h"
|
||||||
|
|
||||||
|
#define MEASURESTATEINTERVAL 200
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
stateInit,
|
||||||
|
stateIdle,
|
||||||
|
stateConnected,
|
||||||
|
stateAllGood,
|
||||||
|
stateOpen,
|
||||||
|
stateError,
|
||||||
|
stateFatalError,
|
||||||
|
lastState
|
||||||
|
}e_measureStates;
|
||||||
|
|
||||||
|
String s_measureState[lastState+1] =
|
||||||
|
{
|
||||||
|
"init",
|
||||||
|
"idle",
|
||||||
|
"connected",
|
||||||
|
"allGood",
|
||||||
|
"Open",
|
||||||
|
"Error",
|
||||||
|
"FatalError",
|
||||||
|
"invalidstate"
|
||||||
|
};
|
||||||
|
|
||||||
|
void initMeasureState(void);
|
||||||
|
void handleMeasureState(void);
|
||||||
|
void setMeasureState(e_measureStates newState);
|
||||||
Reference in New Issue
Block a user