add setupscreen - non working

This commit is contained in:
2022-03-31 13:53:54 +02:00
parent 9fb6338ca8
commit e9582a6dbf
17 changed files with 256 additions and 160 deletions

View File

@@ -18,4 +18,4 @@ lib_deps =
adafruit/Adafruit ADS1X15@^2.2.0 adafruit/Adafruit ADS1X15@^2.2.0
#olikraus/U8g2@^2.32.12 #olikraus/U8g2@^2.32.12
build_flags = build_flags =
-DCORE_DEBUG_LEVEL=4 -DCORE_DEBUG_LEVEL=3

View File

@@ -1,129 +1,33 @@
#include "display.h" #include "display.h"
c_onScreenButton ma20("20m", mA20, LocBottom, BUTTON1); e_displayState CurrentScreen;
c_onScreenButton ma200("200m", mA200, LocBottom, BUTTON2);
c_onScreenButton ma1000("1A", mA1000, LocBottom, BUTTON3);
c_onScreenButton mauto("Auto", mAuto, LocBottom, BUTTON4);
c_onScreenButton bsetup("Conf", 5, LocBottom, BUTTON5);
c_onScreenButton errorState("ER", 6, LocRight, &getErrorState);
c_onScreenButton okState("OK", 7, LocRight, &getOkState);
c_onScreenButton openState("Open", 8, LocRight, &getOpenState);
c_onScreenButton wifiState("Wifi", 9, LocRight, &getWifiState);
std::vector<c_onScreenButton> MainScreen;
e_displayState CurrentGuiState;
void initDisplayGui(void)
{
log_i("Init GUI: ");
uint16_t screenwidth = getDisplay()->getDisplayWidth();
uint16_t buttonwidth = ((screenwidth / mLast) - CONTROLLOFFSET * 2 +1 );
uint16_t currentWidth = 0;
uint16_t ypos = getDisplay()->getDisplayHeight() - 1 - CONTROLSLINE_H + 2;
log_i("buttons: screenW=%d, buttonW=%d, ypos=%d", screenwidth, buttonwidth, ypos);
//setup bottom buttons
ma20.begin(currentWidth, ypos, buttonwidth, CONTROLSLINE_H + 6, CONTROLRADIUS);
ma200.begin(currentWidth += (buttonwidth - 1), ypos, buttonwidth, CONTROLSLINE_H + CONTROLRADIUS, CONTROLRADIUS);
ma1000.begin(currentWidth += (buttonwidth - 1), ypos, buttonwidth, CONTROLSLINE_H + CONTROLRADIUS, CONTROLRADIUS);
mauto.begin(currentWidth += (buttonwidth - 1), ypos, buttonwidth, CONTROLSLINE_H + CONTROLRADIUS, CONTROLRADIUS);
bsetup.begin(currentWidth += (buttonwidth - 1), ypos, buttonwidth, CONTROLSLINE_H + CONTROLRADIUS, CONTROLRADIUS);
//setup right side indicators
uint16_t currentYpos = 0;
uint16_t IndicatorXpos = screenwidth - INDICATORWIDTH;
log_i("indicators: indicW=%d, indicH=%d ypos,%d", INDICATORWIDTH, INDICATORHEIGHT,IndicatorXpos);
errorState.begin(IndicatorXpos, currentYpos, INDICATORWIDTH, INDICATORHEIGHT, INDICATORRADIUS);
okState.begin(IndicatorXpos, currentYpos += (INDICATORHEIGHT - 1), INDICATORWIDTH, INDICATORHEIGHT, INDICATORRADIUS);
openState.begin(IndicatorXpos, currentYpos += (INDICATORHEIGHT - 1), INDICATORWIDTH, INDICATORHEIGHT, INDICATORRADIUS);
wifiState.begin(IndicatorXpos, currentYpos += (INDICATORHEIGHT - 1), INDICATORWIDTH, INDICATORHEIGHT, INDICATORRADIUS);
//fill vector
log_i("Store");
MainScreen.push_back(ma20);
MainScreen.push_back(ma200);
MainScreen.push_back(ma1000);
MainScreen.push_back(mauto);
MainScreen.push_back(bsetup);
MainScreen.push_back(errorState);
MainScreen.push_back(okState);
MainScreen.push_back(openState);
MainScreen.push_back(wifiState);
for (auto &&button : MainScreen)
{
button.setVisible(true);
}
CurrentGuiState = mainscreen;
log_i("OK");
}
void drawMainSceenButtons()
{
//draw controlstrip indicators
for (auto &&thismode : MainScreen)
{
thismode.setState((thismode.getIndex() == (uint8_t)getMeasureMode()));
thismode.drawButton();
}
}
void drawMainscreenValues()
{
if (getDisplay() == NULL)
{
return;
}
drawDashedHLine(0, 12, 220);
drawDashedVLine(40, 12, 33);
getDisplay()->setFont(FONT8);
getDisplay()->drawStr(5, 8, "Fs:100Hz LP");
getDisplay()->setFont(FONT24);
getDisplay()->setCursor(60, 45);
getDisplay()->printf("%4.2f", getValue());
uint16_t stringwidth = getDisplay()->getStrWidth(drawValue("", getValue(), "").c_str());
getDisplay()->setFont(u8g2_font_8x13_t_symbols);
getDisplay()->drawUTF8(60 + stringwidth + 3, 43, "mΩ");
//drawProgressBar(0, 40, 127, 5, getBar());
}
void handleDisplayButtons(void)
{
for (auto &&i : MainScreen)
{
i.handle();
}
}
void drawMainScreen()
{
drawMainSceenButtons();
drawMainscreenValues();
}
void handleDisplayGui(void) void handleDisplayGui(void)
{ {
clearDisplay(); clearDisplay();
switch (CurrentGuiState) switch (CurrentScreen)
{ {
case mainscreen: case mainscreen:
{ {
drawMainScreen(); e_displayState nextScreen = ScreenMainHandle();
if(nextScreen != CurrentScreen)
{
setDisplayState(nextScreen);
}
ScreenMainDrawValues();
ScreenMainDrawButtons();
} }
break; break;
case setupscreen: case setupscreen:
{ {
e_displayState nextScreen = ScreenSetupHandle();
if(nextScreen != CurrentScreen)
{
setDisplayState(nextScreen);
}
ScreenSetupDrawButtons();
} }
break; break;
} }
@@ -131,19 +35,18 @@ void handleDisplayGui(void)
void setDisplayState(e_displayState newstate) void setDisplayState(e_displayState newstate)
{ {
CurrentGuiState = newstate; CurrentScreen = newstate;
} }
void initDisplay(void) void initDisplay(void)
{ {
initDisplayHall(); initDisplayHall();
initDisplayGui(); initDisplayMain();
} }
void handleDisplay(void) void handleDisplay(void)
{ {
handleDisplayButtons();
handleDisplayGui(); handleDisplayGui();
handleDisplayHall(); handleDisplayHall();
} }

View File

@@ -1,18 +1,15 @@
#pragma once #pragma once
#include "Arduino.h" #include "Arduino.h"
#include "display_types.h"
#include "display_buttons.h" #include "display_buttons.h"
#include "display_hall.h" #include "display_hall.h"
#include "display_draw.h" #include "display_draw.h"
#include "screen_main.h"
#include "screen_setup.h"
#include "measure.h" #include "measure.h"
#include "measure_mode.h" #include "measure_mode.h"
typedef enum
{
mainscreen,
setupscreen
} e_displayState;
void initDisplay(void); void initDisplay(void);
void handleDisplay(void); void handleDisplay(void);

View File

@@ -22,7 +22,7 @@ void c_onScreenButton::begin(uint16_t xpos, uint16_t ypos, uint16_t width, uint1
log_d(":Calc_pos (pos=right, x=%d, y=%d, w=%d, h=%d, xT=%d, yT=%d)", _xpos, _ypos, _width, _height, _xTpos, _yTpos); log_d(":Calc_pos (pos=right, x=%d, y=%d, w=%d, h=%d, xT=%d, yT=%d)", _xpos, _ypos, _width, _height, _xTpos, _yTpos);
} }
if (_physButton.getPin() != -1) if (_physButton.isValid())
{ {
log_d("init pyhsButton(%d)", _index); log_d("init pyhsButton(%d)", _index);
_physButton.begin(); _physButton.begin();
@@ -45,9 +45,9 @@ void c_onScreenButton::drawButton()
getDisplay()->drawBox(_xpos, _ypos, _width, _height); getDisplay()->drawBox(_xpos, _ypos, _width, _height);
getDisplay()->setDrawColor(1); getDisplay()->setDrawColor(1);
uint16_t yTpos_pressed = !_pressed ? _yTpos : (_yTpos + 1); uint16_t yTpos_pressed = !getState() ? _yTpos : (_yTpos + 1);
if (getState()) if (getDisplayState())
{ {
getDisplay()->drawRBox(_xpos, _ypos, _width, _height, _radius); getDisplay()->drawRBox(_xpos, _ypos, _width, _height, _radius);
getDisplay()->setDrawColor(0); getDisplay()->setDrawColor(0);
@@ -75,8 +75,13 @@ void c_onScreenButton::handle()
setMeasureMode(_mode); setMeasureMode(_mode);
} }
} }
_state = _pressed;
log_d("read_button(%d) = %d", _physButton.getPin(), _pressed);
} }
else if (_stateFn != NULL)
{
_state = _stateFn();
}
log_i("item(%s)=%d",_name.c_str(), _state);
} }

View File

@@ -33,6 +33,7 @@ class c_onScreenButton
bool (*const _stateFn)(); bool (*const _stateFn)();
c_button _physButton; c_button _physButton;
uint16_t _xpos; uint16_t _xpos;
uint16_t _ypos; uint16_t _ypos;
uint16_t _xTpos; uint16_t _xTpos;
@@ -45,9 +46,13 @@ class c_onScreenButton
e_buttonLoc _location; e_buttonLoc _location;
bool _state; bool _state;
bool _displayState;
bool _pressed; bool _pressed;
bool _visible; bool _visible;
void setState(bool state) { _state = state; }
public: public:
c_onScreenButton(String name, e_measureMode mode, e_buttonLoc location, uint8_t pin) : _name(name), c_onScreenButton(String name, e_measureMode mode, e_buttonLoc location, uint8_t pin) : _name(name),
_index((uint8_t)mode), _index((uint8_t)mode),
@@ -59,6 +64,7 @@ public:
_visible = false; _visible = false;
_pressed = false; _pressed = false;
_state = false; _state = false;
_displayState = false;
_mode = mode; _mode = mode;
_location = location; _location = location;
} }
@@ -73,6 +79,7 @@ public:
_visible = false; _visible = false;
_pressed = false; _pressed = false;
_state = false; _state = false;
_displayState = false;
_mode = e_measureMode::mNone; _mode = e_measureMode::mNone;
_location = location; _location = location;
} }
@@ -94,17 +101,10 @@ public:
void drawButton(); void drawButton();
void begin(uint16_t xpos, uint16_t ypos, uint16_t width, uint16_t height, uint16_t radius); void begin(uint16_t xpos, uint16_t ypos, uint16_t width, uint16_t height, uint16_t radius);
void setState(bool state) { _state = state; } void setDisplayState(bool newState) { _displayState = newState; }
bool getState(void) bool getState(void) { return _state; }
{ bool getDisplayState(void) { return _displayState; }
if (_stateFn != NULL) void handle(void);
{
// log_if("%s: call stateFn\n",_name.c_str());
return _stateFn();
}
return _state;
}
void handle();
void setVisible(bool state) { _visible = state; } void setVisible(bool state) { _visible = state; }
bool getVisible(void) { return _visible; } bool getVisible(void) { return _visible; }
uint8_t getIndex(void) { return _index; } uint8_t getIndex(void) { return _index; }

View File

@@ -0,0 +1,9 @@
#pragma once
#include "Arduino.h"
typedef enum
{
mainscreen,
setupscreen
} e_displayState;

View File

@@ -1,23 +1,23 @@
#include "gain_control.h" #include "gain_control.h"
/* mode UC1 2 3 4 5 6
c_gainControl modeNone(e_measureMode::mNone, 0, 0, 0, 0, 0, 0); gain 0,5 1 5 50 - -
c_gainControl mode20mA(e_measureMode::mA20, 1, 1, 0, 0, 1, 1); Source - - - - 2 10 *100mA ( none = 20mA )*/
c_gainControl mode200mA(e_measureMode::mA200, 1, 1, 0, 0, 1, 1); c_gainControl mode20mA(e_measureMode::mA20, 0, 0, 0, 1, 0, 0);
c_gainControl mode1000mA(e_measureMode::mA1000, 1, 1, 0, 0, 1, 1); c_gainControl mode200mA(e_measureMode::mA200, 0, 0, 1, 0, 1, 0);
c_gainControl mode1000mA(e_measureMode::mA1000, 0, 1, 0, 0, 0, 1); //warning not automatic
//UC02 > G=1 (met JP5naar 1000mA); UC03 > G=5(met JP7 naar 200mA); UC04 > G=50 (@20mA); UC05 > 1000mA; UC06 > 200mA. Current: niets gekozen = 20mA. //UC02 > G=1 (met JP5naar 1000mA); UC03 > G=5(met JP7 naar 200mA); UC04 > G=50 (@20mA); UC05 > 1000mA; UC06 > 200mA. Current: niets gekozen = 20mA.
std::vector<c_gainControl> gainList; std::vector<c_gainControl> gainList;
e_measureMode lastGain = e_measureMode::mNone; e_measureMode lastGain = e_measureMode::mA20;
void initGainControl(void) void initGainControl(void)
{ {
gainList.push_back(modeNone);
gainList.push_back(mode20mA); gainList.push_back(mode20mA);
gainList.push_back(mode200mA);
gainList.push_back(mode1000mA);
} }
void handleGainControl(void) void handleGainControl(void)
@@ -57,5 +57,5 @@ void resetGain(void)
{ {
gain.deactivate(); gain.deactivate();
} }
setGain(mNone); setGain(mA20);
} }

View File

@@ -23,5 +23,5 @@ void loop()
handleMeasure(); handleMeasure();
handleGainControl(); handleGainControl();
handleDisplay(); handleDisplay();
log_i("T=%4.2fms\n", (double)(micros() - looptime)/1000); log_d("T=%4.2fms\n", (double)(micros() - looptime)/1000);
} }

View File

@@ -41,7 +41,7 @@ uint8_t getBar(void)
float getValue(void) float getValue(void)
{ {
log_i("ADCvolts:%4.2fV\n",getMeasurement()); log_d("ADCvolts:%4.2fV\n",getMeasurement());
return getMeasurement(); return getMeasurement();
} }

View File

@@ -5,6 +5,18 @@ e_measureStates lastMeasureState = e_measureStates::stateInit;
uint32_t lastMeasureTime = 0; uint32_t lastMeasureTime = 0;
String s_measureState[lastState+1] =
{
"init",
"idle",
"connected",
"allGood",
"Open",
"Error",
"FatalError",
"invalidstate"
};
void setMeasureState(e_measureStates newState) void setMeasureState(e_measureStates newState)
{ {
if (currentMeasureState != e_measureStates::stateError && currentMeasureState != e_measureStates::stateFatalError ) if (currentMeasureState != e_measureStates::stateError && currentMeasureState != e_measureStates::stateFatalError )

View File

@@ -18,17 +18,6 @@ typedef enum
lastState lastState
}e_measureStates; }e_measureStates;
String s_measureState[lastState+1] =
{
"init",
"idle",
"connected",
"allGood",
"Open",
"Error",
"FatalError",
"invalidstate"
};
void initMeasureState(void); void initMeasureState(void);
void handleMeasureState(void); void handleMeasureState(void);

View File

@@ -0,0 +1,107 @@
#include "screen_main.h"
c_onScreenButton ma20("20m", mA20, LocBottom, BUTTON1);
c_onScreenButton ma200("200m", mA200, LocBottom, BUTTON2);
c_onScreenButton ma1000("1A", mA1000, LocBottom, BUTTON3);
c_onScreenButton mauto("Auto", mAuto, LocBottom, BUTTON4);
c_onScreenButton bsetup("Conf", 5, LocBottom, BUTTON5);
c_onScreenButton errorState("ER", 6, LocRight, &getErrorState);
c_onScreenButton okState("OK", 7, LocRight, &getOkState);
c_onScreenButton openState("Open", 8, LocRight, &getOpenState);
c_onScreenButton wifiState("Wifi", 9, LocRight, &getWifiState);
std::vector<c_onScreenButton*> MainScreen;
const e_displayState thisScreen = e_displayState::mainscreen;
void initDisplayMain(void)
{
log_i("Setup main screen : ");
uint16_t screenwidth = getDisplay()->getDisplayWidth();
uint16_t buttonwidth = ((screenwidth / mLast) - CONTROLLOFFSET * 2 + 1);
uint16_t currentWidth = 0;
uint16_t ypos = getDisplay()->getDisplayHeight() - 1 - CONTROLSLINE_H + 2;
log_i("buttons: screenW=%d, buttonW=%d, ypos=%d", screenwidth, buttonwidth, ypos);
// setup bottom buttons
ma20.begin(currentWidth, ypos, buttonwidth, CONTROLSLINE_H + 6, CONTROLRADIUS);
ma200.begin(currentWidth += (buttonwidth - 1), ypos, buttonwidth, CONTROLSLINE_H + CONTROLRADIUS, CONTROLRADIUS);
ma1000.begin(currentWidth += (buttonwidth - 1), ypos, buttonwidth, CONTROLSLINE_H + CONTROLRADIUS, CONTROLRADIUS);
mauto.begin(currentWidth += (buttonwidth - 1), ypos, buttonwidth, CONTROLSLINE_H + CONTROLRADIUS, CONTROLRADIUS);
bsetup.begin(currentWidth += (buttonwidth - 1), ypos, buttonwidth, CONTROLSLINE_H + CONTROLRADIUS, CONTROLRADIUS);
// setup right side indicators
uint16_t currentYpos = 0;
uint16_t IndicatorXpos = screenwidth - INDICATORWIDTH;
log_i("indicators: indicW=%d, indicH=%d ypos,%d", INDICATORWIDTH, INDICATORHEIGHT, IndicatorXpos);
errorState.begin(IndicatorXpos, currentYpos, INDICATORWIDTH, INDICATORHEIGHT, INDICATORRADIUS);
okState.begin(IndicatorXpos, currentYpos += (INDICATORHEIGHT - 1), INDICATORWIDTH, INDICATORHEIGHT, INDICATORRADIUS);
openState.begin(IndicatorXpos, currentYpos += (INDICATORHEIGHT - 1), INDICATORWIDTH, INDICATORHEIGHT, INDICATORRADIUS);
wifiState.begin(IndicatorXpos, currentYpos += (INDICATORHEIGHT - 1), INDICATORWIDTH, INDICATORHEIGHT, INDICATORRADIUS);
// fill vector
log_i("Store main screen items");
MainScreen.push_back(&ma20);
MainScreen.push_back(&ma200);
MainScreen.push_back(&ma1000);
MainScreen.push_back(&mauto);
MainScreen.push_back(&bsetup);
MainScreen.push_back(&errorState);
MainScreen.push_back(&okState);
MainScreen.push_back(&openState);
MainScreen.push_back(&wifiState);
for (auto &&button : MainScreen)
{
button->setVisible(true);
}
log_i("mainscreen OK");
}
void ScreenMainDrawButtons(void)
{
// draw controlstrip indicators
for (auto &&thismode : MainScreen)
{
thismode->setDisplayState((thismode->getIndex() == (uint8_t)getMeasureMode()));
thismode->drawButton();
}
}
void ScreenMainDrawValues(void)
{
if (getDisplay() == NULL)
{
return;
}
drawDashedHLine(0, 12, 220);
drawDashedVLine(40, 12, 33);
getDisplay()->setFont(FONT8);
getDisplay()->drawStr(5, 8, "Fs:100Hz LP");
getDisplay()->setFont(FONT24);
getDisplay()->setCursor(60, 45);
getDisplay()->printf("%4.2f", getValue());
uint16_t stringwidth = getDisplay()->getStrWidth(drawValue("", getValue(), "").c_str());
getDisplay()->setFont(u8g2_font_8x13_t_symbols);
getDisplay()->drawUTF8(60 + stringwidth + 3, 43, "mΩ");
}
e_displayState ScreenMainHandle(void)
{
for (auto &&i : MainScreen)
{
i->handle();
}
if(bsetup.getState())
{
return e_displayState::setupscreen;
}
return thisScreen;
}

View File

@@ -0,0 +1,11 @@
#pragma once
#include "Arduino.h"
#include "display_types.h"
#include "display_draw.h"
#include "display_buttons.h"
void initDisplayMain(void);
void ScreenMainDrawValues(void);
void ScreenMainDrawButtons(void);
e_displayState ScreenMainHandle(void);

View File

@@ -0,0 +1,53 @@
#include "screen_setup.h"
c_onScreenButton bback("<", mA20, LocBottom, BUTTON1);
c_onScreenButton bforw(">", mA200, LocBottom, BUTTON2);
c_onScreenButton bOK("OK", mA1000, LocBottom, BUTTON3);
c_onScreenButton bGame("Game", mAuto, LocBottom, BUTTON4);
c_onScreenButton bExit("Exit", 5, LocBottom, BUTTON5);
std::vector<c_onScreenButton *> SetupScreen;
const e_displayState thisScreen = e_displayState::setupscreen;
void initSetupScreen(void)
{
uint16_t screenwidth = getDisplay()->getDisplayWidth();
uint16_t buttonwidth = ((screenwidth / mLast) - CONTROLLOFFSET * 2 + 1);
uint16_t currentWidth = 0;
uint16_t ypos = getDisplay()->getDisplayHeight() - 1 - CONTROLSLINE_H + 2;
bback.begin(currentWidth, ypos, buttonwidth, CONTROLSLINE_H + 6, CONTROLRADIUS);
bforw.begin(currentWidth += (buttonwidth - 1), ypos, buttonwidth, CONTROLSLINE_H + CONTROLRADIUS, CONTROLRADIUS);
bOK.begin(currentWidth += (buttonwidth - 1), ypos, buttonwidth, CONTROLSLINE_H + CONTROLRADIUS, CONTROLRADIUS);
bGame.begin(currentWidth += (buttonwidth - 1), ypos, buttonwidth, CONTROLSLINE_H + CONTROLRADIUS, CONTROLRADIUS);
bExit.begin(currentWidth += (buttonwidth - 1), ypos, buttonwidth, CONTROLSLINE_H + CONTROLRADIUS, CONTROLRADIUS);
SetupScreen.push_back(&bback);
SetupScreen.push_back(&bforw);
SetupScreen.push_back(&bOK);
SetupScreen.push_back(&bGame);
SetupScreen.push_back(&bExit);
}
void ScreenSetupDrawButtons(void)
{
// draw controlstrip indicators
for (auto &&thismode : SetupScreen)
{
thismode->drawButton();
}
}
e_displayState ScreenSetupHandle(void)
{
for (auto &&i : SetupScreen)
{
i->handle();
}
if(bExit.getState())
{
return e_displayState::mainscreen;
}
return thisScreen;
}

View File

@@ -0,0 +1,10 @@
#pragma once
#include "Arduino.h"
#include "display_types.h"
#include "display_buttons.h"
void initSetupScreen(void);
e_displayState ScreenSetupHandle(void);
void ScreenSetupDrawButtons(void);