199 lines
6.5 KiB
C++
199 lines
6.5 KiB
C++
#ifndef MY_DISPLAY_H_INCLUDED
|
|
#define MY_DISPLAY_H_INCLUDED
|
|
|
|
#include <U8g2lib.h>
|
|
#include "../types.h"
|
|
#include "../macros.h"
|
|
#include "../faults/faults.h"
|
|
|
|
//#define _STD_FONT u8g2_font_ncenB10_te
|
|
//#define _FIRS_LINE_Y 11
|
|
//#define _STD_LINEHEIGHT 12
|
|
#define _STD_FONT u8g2_font_fub11_tf
|
|
#define _FIRS_LINE_Y 12
|
|
#define _STD_LINEHEIGHT 13
|
|
#define _SEL_FONT u8g2_font_6x10_tf
|
|
#define _FIRS_LINE_Y 12
|
|
#define _STD_LINEHEIGHT 13
|
|
|
|
#define _BEGIN_FAST_STEPS_DELAY 500
|
|
#define _BEGIN_BIG_STEPS_DELAY 3000
|
|
#define _FAST_STEP_MS 110
|
|
#define _BIG_STEP 10
|
|
|
|
#define _BACK_TO_HOME_SCREEN 1
|
|
|
|
#define _MENU_MAIN 1
|
|
#define _MENU_SYSTEM 10
|
|
#define _MENU_SETTINGS_MODBUS 11
|
|
#define _MENU_TEMPERATURE 12
|
|
#define _MENU_PRESSURE 13
|
|
#define _MENU_FAULTS_MAIN 20
|
|
#define _MENU_FAULTS_OPEN 21
|
|
#define _MENU_FAULTS_SETTINGS 22
|
|
|
|
#define _SELECTION_TEMPERATURE_ENABLED 100
|
|
#define _SELECTION_TEMPERATURE_SETPOINT 101
|
|
#define _SELECTION_TEMPERATURE_HYSTERESIS 102
|
|
#define _SELECTION_PRESSURE_ENABLE_INCREASE 110
|
|
#define _SELECTION_PRESSURE_ENABLE_DECREASE 111
|
|
#define _SELECTION_PRESSURE_SETPOINT 115
|
|
#define _SELECTION_PRESSURE_HYSTERESIS 116
|
|
#define _SELECTION_FAULTS_ACOUSTIC 125
|
|
#define _SELECTION_FAULTS_OPTICAL 126
|
|
#define _SELECTION_FAULTS_T_OFF 127
|
|
#define _SELECTION_FAULTS_P_OFF 128
|
|
#define _SELECTION_FAULTS_T_R_RATE 129
|
|
#define _SELECTION_FAULTS_T_F_RATE 130
|
|
#define _SELECTION_FAULTS_P_RATE 131
|
|
#define _SELECTION_MODBUS_BAUDRATE 150
|
|
#define _SELECTION_MODBUS_ADDRESS 151
|
|
#define _SELECTION_MODBUS_DELAY 152
|
|
#define _SELECTION_P_SENSOR 200
|
|
#define _SELECTION_CLEAR_FAULTS 220
|
|
#define _SELECTION_RESET 255
|
|
|
|
#define _FAULT_INFO 170
|
|
|
|
#define _VERIFY_ADMIN 253
|
|
#define _ADMIN_CODE 42
|
|
|
|
#define _POS_TEMPERATURE_MENU 0
|
|
#define _POS_TEMPERATURE_ENABLED 0
|
|
#define _POS_TEMPERATURE_SETPOINT 1
|
|
#define _POS_TEMPERATURE_HYSTERESIS 2
|
|
#define _POS_PRESSURE_MENU 1
|
|
#define _POS_PRESSURE_ENABLE_INCREASE 0
|
|
#define _POS_PRESSURE_ENABLE_DECREASE 1
|
|
#define _POS_PRESSURE_SETPOINT 2
|
|
#define _POS_PRESSURE_HYSTERESIS 3
|
|
#define _POS_FAULTS_MAIN 2
|
|
#define _POS_FAULTS_OPEN 0
|
|
#define _POS_FAULTS_CLEAR 1
|
|
#define _POS_FAULTS_SETTINGS 2
|
|
#define _POS_FAULTS_ACOUSTIC 0
|
|
#define _POS_FAULTS_OPTICAL 1
|
|
#define _POS_FAULTS_T_OFF 2
|
|
#define _POS_FAULTS_P_OFF 3
|
|
#define _POS_FAULTS_T_R_RATE 4
|
|
#define _POS_FAULTS_T_F_RATE 5
|
|
#define _POS_FAULTS_P_RATE 6
|
|
#define _POS_SYSTEM 3
|
|
#define _POS_MODBUS_MENU 0
|
|
#define _POS_MODBUS_ADDRESS 0
|
|
#define _POS_MODBUS_BAUDRATE 1
|
|
#define _POS_MODBUS_DELAY 2
|
|
#define _POS_P_SENSOR_SELECTION 1
|
|
#define _POS_P_SMC_1_5V_0_5BAR 0
|
|
#define _POS_P_GEMS_0_5V_0_6BAR 1
|
|
#define _POS_RESET 4
|
|
|
|
#define _POS_BAUDRATE_300 0
|
|
#define _POS_BAUDRATE_1200 1
|
|
#define _POS_BAUDRATE_2400 2
|
|
#define _POS_BAUDRATE_4800 3
|
|
#define _POS_BAUDRATE_9600 4
|
|
#define _POS_BAUDRATE_19200 5
|
|
#define _POS_BAUDRATE_38400 6
|
|
#define _POS_BAUDRATE_57600 7
|
|
#define _POS_BAUDRATE_115200 8
|
|
|
|
extern "C" uint8_t my_UserInterfaceMessage(u8g2_t *u8g2, const char *title1, const char *title2, const char *title3, const char *buttons, uint8_t cursor);
|
|
extern "C" uint8_t my_UserInterfaceSelectionList(u8g2_t *u8g2, const char *title, uint8_t start_pos, const char *sl);
|
|
// extern "C" void my_UserInterfaceInputValue(u8g2_t *u8g2, const char *title, const char *pre, uint8_t value, uint8_t digits, const char *post);
|
|
extern "C" void my_UserInterfaceInputValueString(u8g2_t *u8g2, const char *title, const char *sub, const char *text);
|
|
// extern "C" uint8_t my_read_pin_state(u8x8_t *u8x8);
|
|
|
|
class Display : public U8G2_ST7920_128X64_F_HW_SPI
|
|
{
|
|
|
|
private:
|
|
enum MenuLevel : int8_t {
|
|
MenuLevel_1, MenuLevel_2, MenuLevel_3
|
|
};
|
|
enum Precision : int8_t {
|
|
Precision_0, Precision_1, Precision_2
|
|
};
|
|
|
|
uint8_t _bgLightAnalog = 255; // Wie stark die Displaybeleuchtung ist
|
|
bool _bgLightBool = true; // Ob die Displaybeleuchtung an ist (egal wie stark)
|
|
char _text[50]; // Buffer für Texte
|
|
char _text2[30]; // Buffer für Texte
|
|
uint8_t _selection; // welche Auswahl gerendert werden soll
|
|
uint8_t _cursor; // aktuelle Auswahl-Cursorposition
|
|
uint8_t _prevCursor; // letzte Auswahl-Cursorposition
|
|
uint8_t _cur_l1; // Cursorposition in Ebene 1
|
|
uint8_t _cur_l2; // Cursorposition in Ebene 2
|
|
uint8_t _cur_l3; // Cursorposition in Ebene 3
|
|
uint8_t _menu_depth; // Im wievielten Untermenü man gerade ist
|
|
uint8_t _selCnt; // Anzahl der Auswahlmöglichkeiten
|
|
bool _inputValueActive; // Ob gerade ein Wert eingegeben wird
|
|
int _val; // Der eingegebene Wert
|
|
int _valMin; // Der kleinstmögliche einzugebende Wert
|
|
int _valMax; // Der größtmögliche einzugebende Wert
|
|
unsigned long _prevT;
|
|
bool _enableBigSteps; // Ob große Schritte (_BIG_STEP) durchgeführt werden sollen
|
|
unsigned long _checkFastStepTime; // letzte Zeit, zu der ein entsprechender Button NICHT gedrückt war
|
|
unsigned long _lastFastStep; // letzte Zeit, zu der ein schneller Schritt ausgeführt wurde
|
|
int _stepSize; // Um wieviel der entsprechende Wert auf einmal geändert werden soll
|
|
u8 _fastStepsDelay;
|
|
bool _showFault;
|
|
u8 _showFaultC = 0;
|
|
FaultState _lastFaultState = noFault;
|
|
u8 _lastCEn;
|
|
u8 _lastOpticalState;
|
|
u8 _currBrightness = 0;
|
|
u32 _lastBrightnessChange;
|
|
bool _incBrightness = false;
|
|
|
|
void _saveCursorPosForLevel(MenuLevel);
|
|
uint8_t _restoreCursor();
|
|
void _baudrateCursorPos();
|
|
void _setModbusBaudrate();
|
|
void _select();
|
|
void _select(const uint8_t, const bool restoreCursor=false);
|
|
uint8_t _event();
|
|
void _nextEvent();
|
|
void _prevEvent();
|
|
void _home();
|
|
bool _displayFaultOrPowerSymbol(const FaultState&, bool);
|
|
void _inputValue(const uint8_t stepSize, const char *title, const char *text=nullptr, const char *val=nullptr);
|
|
void _restrictInputValue(int min, int max, Precision p=Precision_0);
|
|
|
|
public:
|
|
|
|
const uint8_t btnNext;
|
|
const uint8_t btnPrev;
|
|
const uint8_t btnSelect;
|
|
const uint8_t btnCancel;
|
|
const uint8_t bgLed;
|
|
|
|
Display(uint8_t cs,
|
|
uint8_t btnNext,
|
|
uint8_t btnPrev,
|
|
uint8_t btnSelect,
|
|
uint8_t btnCancel,
|
|
uint8_t bgLED);
|
|
|
|
void init();
|
|
void process();
|
|
|
|
void modbusProblem();
|
|
void oneWireDevicesDetected(uint8_t count);
|
|
void tooMuchOneWireDevicesDetected(uint8_t actual, uint8_t max);
|
|
void noOneWireDevicesDetected();
|
|
void greeting();
|
|
|
|
void bgLight(uint8_t);
|
|
void bgLight(int val) {bgLight((uint8_t) val);};
|
|
void bgLight(bool);
|
|
bool bgLightIncrease(uint8_t step=1);
|
|
bool bgLightDecrease(uint8_t step=1);
|
|
uint8_t bgLightAnalog();
|
|
bool bgLightState();
|
|
|
|
void (*reset)() = 0;
|
|
};
|
|
|
|
#endif // MY_DISPLAY_H_INCLUDED
|