#ifndef CUI_H #define CUI_H #include "SSD1306.h" #define WIDTH SCREEN_WIDTH #define HEIGHT SCREEN_HEIGHT #define DISPLAY_PAGE_COUNT (SCREEN_HEIGHT / 8) enum ITEM_MODE { MODE_NORMAL, MODE_SET, MODE_CONFIG, }; enum MESSAGE_MODE { MODE_NONE, MODE_NO_WIFI, MODE_AC, MODE_LOAD }; typedef struct box_struct { int16_t x, y; uint16_t w, h; } BOX_TYPE; class CUI : public SSD1306 { public: // Constructor //CUI(Adafruit_SSD1306 &display); CUI(); void setup(); void start(); void updateDisplay(unsigned long tick); void updateDisplayTop(unsigned long tick); void updateDisplayBottom(unsigned long tick); void message(uint8_t lineNo, char *szMessage); void progress(uint8_t lineNo, uint8_t progress); void loopButton(unsigned long tickMillis); inline void setItemMode(uint16_t mode) { m_nItemMode = mode; }; // Shared variables with ISR volatile bool bButtonSetChanged; volatile bool bButtonUpChanged; volatile bool bButtonDownChanged; volatile unsigned long buttonSetChangeTime; // Time when button was pressed volatile unsigned long buttonUpChangeTime; // Time when button was pressed volatile unsigned long buttonDownChangeTime; // Time when button was pressed private: uint16_t m_nMessageMode, lastMessageMode; uint16_t m_nMainMode, lastMainMode; // Temp, Humid, Clock uint16_t m_nItemMode, lastItemMode; // Normal, Set, Config uint16_t m_nItem, lastItem; // Temp, Hum, Heat ... int16_t m_nValue, lastValue; uint8_t *m_pUnit, *lastUnit; uint16_t m_nD0, lastD0; uint16_t m_nD1, lastD1; uint16_t m_nD2, lastD2; uint16_t m_nD3, lastD3; uint8_t *m_pDUnit, *lastpDUnit; BOX_TYPE boxMode, boxTitle, boxValue, boxUnit, boxD0, boxD1, boxD2, boxDot, boxD3, boxDUnit; bool bDot; bool bButtonChanged; // Helper function to update digits bool displayTop(); bool displayBottom(); //bool displayTemperature(); //bool displayHumidity(); //void displayClock() {}; void getBoundaries(); // Buttons unsigned long buttonSetDownTime; unsigned long buttonUpDownTime; unsigned long buttonDownDownTime; unsigned int buttonSetDownDuration; unsigned int buttonUpDownDuration; unsigned int buttonDownDownDuration; bool bButtonSetUp; // Flag for menu button bool bButtonSetDown; // Flag for menu button bool bButtonUpUp; // Flag for up button bool bButtonUpDown; // Flag for down button bool bButtonDownUp; // Flag for up button bool bButtonDownDown; // Flag for down button void initButtonState(); void checkButtonStates(unsigned long tickMillis); }; #endif extern CUI ui;