logic for display

This commit is contained in:
Siwat Sirichai 2024-03-18 02:18:13 +07:00
parent 5a1d4dca90
commit 33be51aab9
3 changed files with 131 additions and 5 deletions

View File

@ -3,6 +3,23 @@
CUDDisplay::CUDDisplay(cud_display_conf_t *conf) : ESPMegaDisplay(conf->uart, conf->communication_baudrate, conf->ota_baudrate, conf->tx, conf->rx)
{
this->conf = conf;
// Initialize Light Group and Fan Group
this->light_group = {
.element_id = {LCD_DASHBOARD_ELEMENT_LIGHT_1, LCD_DASHBOARD_ELEMENT_LIGHT_2, LCD_DASHBOARD_ELEMENT_LIGHT_3, LCD_DASHBOARD_ELEMENT_LIGHT_4},
.element_name = {LCD_DASHBOARD_ELEMENT_NAME_LIGHT_1, LCD_DASHBOARD_ELEMENT_NAME_LIGHT_2, LCD_DASHBOARD_ELEMENT_NAME_LIGHT_3, LCD_DASHBOARD_ELEMENT_NAME_LIGHT_4},
.picture_on = {LCD_DASHBOARD_PIC_LIGHT_1_ON, LCD_DASHBOARD_PIC_LIGHT_2_ON, LCD_DASHBOARD_PIC_LIGHT_3_ON, LCD_DASHBOARD_PIC_LIGHT_4_ON},
.picture_on_pressed = {LCD_DASHBOARD_PIC_LIGHT_1_ON_PRESSED, LCD_DASHBOARD_PIC_LIGHT_2_ON_PRESSED, LCD_DASHBOARD_PIC_LIGHT_3_ON_PRESSED, LCD_DASHBOARD_PIC_LIGHT_4_ON_PRESSED},
.picture_off = {LCD_DASHBOARD_PIC_LIGHT_1_OFF, LCD_DASHBOARD_PIC_LIGHT_2_OFF, LCD_DASHBOARD_PIC_LIGHT_3_OFF, LCD_DASHBOARD_PIC_LIGHT_4_OFF},
.picture_off_pressed = {LCD_DASHBOARD_PIC_LIGHT_1_OFF_PRESSED, LCD_DASHBOARD_PIC_LIGHT_2_OFF_PRESSED, LCD_DASHBOARD_PIC_LIGHT_3_OFF_PRESSED, LCD_DASHBOARD_PIC_LIGHT_4_OFF_PRESSED}
};
this->fan_group = {
.element_id = {LCD_DASHBOARD_ELEMENT_FAN_1, LCD_DASHBOARD_ELEMENT_FAN_2, LCD_DASHBOARD_ELEMENT_FAN_3},
.element_name = {LCD_DASHBOARD_ELEMENT_NAME_FAN_1, LCD_DASHBOARD_ELEMENT_NAME_FAN_2, LCD_DASHBOARD_ELEMENT_NAME_FAN_3},
.picture_on = {LCD_DASHBOARD_PIC_FAN_1_ON, LCD_DASHBOARD_PIC_FAN_2_ON, LCD_DASHBOARD_PIC_FAN_3_ON},
.picture_on_pressed = {LCD_DASHBOARD_PIC_FAN_1_ON_PRESSED, LCD_DASHBOARD_PIC_FAN_2_ON_PRESSED, LCD_DASHBOARD_PIC_FAN_3_ON_PRESSED},
.picture_off = {LCD_DASHBOARD_PIC_FAN_1_OFF, LCD_DASHBOARD_PIC_FAN_2_OFF, LCD_DASHBOARD_PIC_FAN_3_OFF},
.picture_off_pressed = {LCD_DASHBOARD_PIC_FAN_1_OFF_PRESSED, LCD_DASHBOARD_PIC_FAN_2_OFF_PRESSED, LCD_DASHBOARD_PIC_FAN_3_OFF_PRESSED}
};
}
void CUDDisplay::begin()
@ -101,7 +118,35 @@ void CUDDisplay::handle_aqi_change(char *value)
{
// Update the AQI value on the display
float aqi = atof(value);
// TODO - Update the AQI value on the display
this->takeSerialMutex();
this->displayAdapter->printf("%s.txt=%d", LCD_DASHBOARD_ELEMENT_NAME_AQI_TEXT, (int)aqi);
this->sendStopBytes();
// Update the AQI picture on the display
if (aqi <= 50)
{
this->displayAdapter->printf("%s.pic=%d", LCD_DASHBOARD_ELEMENT_NAME_AQI_TEXT, LCD_DASHBOARD_PIC_AQI_GOOD);
}
else if (aqi <= 100)
{
this->displayAdapter->printf("%s.pic=%d", LCD_DASHBOARD_ELEMENT_NAME_AQI_TEXT, LCD_DASHBOARD_PIC_AQI_MODERATE);
}
else if (aqi <= 150)
{
this->displayAdapter->printf("%s.pic=%d", LCD_DASHBOARD_ELEMENT_NAME_AQI_TEXT, LCD_DASHBOARD_PIC_AQI_UNHEALTHY_FOR_SENSITIVE_GROUPS);
}
else if (aqi <= 200)
{
this->displayAdapter->printf("%s.pic=%d", LCD_DASHBOARD_ELEMENT_NAME_AQI_TEXT, LCD_DASHBOARD_PIC_AQI_UNHEALTHY);
}
else if (aqi <= 300)
{
this->displayAdapter->printf("%s.pic=%d", LCD_DASHBOARD_ELEMENT_NAME_AQI_TEXT, LCD_DASHBOARD_PIC_AQI_VERY_UNHEALTHY);
}
else
{
this->displayAdapter->printf("%s.pic=%d", LCD_DASHBOARD_ELEMENT_NAME_AQI_TEXT, LCD_DASHBOARD_PIC_AQI_HAZARDOUS);
}
this->giveSerialMutex();
}
/**
@ -123,20 +168,54 @@ void CUDDisplay::handle_payload(uint8_t type, uint8_t *payload, uint8_t length)
void CUDDisplay::set_display_light_state(uint8_t row, bool state)
{
// set_display_light_state implementation
this->takeSerialMutex();
this->displayAdapter->printf("%s.pic=%d", this->light_group.element_name[row], state ? this->light_group.picture_on[row] : this->light_group.picture_off[row]);
this->displayAdapter->printf("%s.pic2=%d", this->light_group.element_name[row], state ? this->light_group.picture_on_pressed[row] : this->light_group.picture_off_pressed[row]);
this->sendStopBytes();
this->giveSerialMutex();
}
void CUDDisplay::set_display_light_all_state()
{
bool light_on = this->get_lights_state();
this->takeSerialMutex();
this->displayAdapter->printf("%s.pic=%d", LCD_DASHBOARD_ELEMENT_NAME_LIGHT_ALL, light_on ? LCD_DASHBOARD_PIC_LIGHT_ALL_ON : LCD_DASHBOARD_PIC_LIGHT_ALL_OFF);
this->displayAdapter->printf("%s.pic2=%d", LCD_DASHBOARD_ELEMENT_NAME_LIGHT_ALL, light_on ? LCD_DASHBOARD_PIC_LIGHT_ALL_ON_PRESSED : LCD_DASHBOARD_PIC_LIGHT_ALL_OFF_PRESSED);
this->sendStopBytes();
this->giveSerialMutex();
}
void CUDDisplay::set_display_fan_state(uint8_t row, bool state)
{
// set_display_fan_state implementation
this->takeSerialMutex();
this->displayAdapter->printf("%s.pic=%d", this->fan_group.element_name[row], state ? this->fan_group.picture_on[row] : this->fan_group.picture_off[row]);
this->displayAdapter->printf("%s.pic2=%d", this->fan_group.element_name[row], state ? this->fan_group.picture_on_pressed[row] : this->fan_group.picture_off_pressed[row]);
this->sendStopBytes();
this->giveSerialMutex();
}
void CUDDisplay::set_display_fan_all_state()
{
bool fan_on = this->get_fans_state();
this->takeSerialMutex();
this->displayAdapter->printf("%s.pic=%d", LCD_DASHBOARD_ELEMENT_NAME_FAN_ALL, fan_on ? LCD_DASHBOARD_PIC_FAN_ALL_ON : LCD_DASHBOARD_PIC_FAN_ALL_OFF);
this->displayAdapter->printf("%s.pic2=%d", LCD_DASHBOARD_ELEMENT_NAME_FAN_ALL, fan_on ? LCD_DASHBOARD_PIC_FAN_ALL_ON_PRESSED : LCD_DASHBOARD_PIC_FAN_ALL_OFF_PRESSED);
this->sendStopBytes();
}
void CUDDisplay::set_display_mosquito_zapper_state(bool state)
{
// set_display_mosquito_zapper_state implementation
this->takeSerialMutex();
this->displayAdapter->printf("%s.pic=%d", LCD_DASHBOARD_ELEMENT_NAME_MOSQUITO_ZAPPER, state ? LCD_DASHBOARD_PIC_MOSQUITO_ZAPPER_ON : LCD_DASHBOARD_PIC_MOSQUITO_ZAPPER_OFF);
this->displayAdapter->printf("%s.pic2=%d", LCD_DASHBOARD_ELEMENT_NAME_MOSQUITO_ZAPPER, state ? LCD_DASHBOARD_PIC_MOSQUITO_ZAPPER_ON_PRESSED : LCD_DASHBOARD_PIC_MOSQUITO_ZAPPER_OFF_PRESSED);
this->sendStopBytes();
}
void CUDDisplay::set_display_air_purifier_state(bool state)
{
// set_display_air_purifier_state implementation
this->takeSerialMutex();
this->displayAdapter->printf("%s.pic=%d", LCD_DASHBOARD_ELEMENT_NAME_AIR_PURIFIER, state ? LCD_DASHBOARD_PIC_AIR_PURIFIER_ON : LCD_DASHBOARD_PIC_AIR_PURIFIER_OFF);
this->displayAdapter->printf("%s.pic2=%d", LCD_DASHBOARD_ELEMENT_NAME_AIR_PURIFIER, state ? LCD_DASHBOARD_PIC_AIR_PURIFIER_ON_PRESSED : LCD_DASHBOARD_PIC_AIR_PURIFIER_OFF_PRESSED);
this->sendStopBytes();
}

View File

@ -22,6 +22,26 @@ struct cud_display_conf_t
uint8_t mosquito_zapper_pin;
};
struct cud_display_light_group_t
{
uint8_t element_id[4];
const char *element_name[20];
uint8_t picture_on[4];
uint8_t picture_on_pressed[4];
uint8_t picture_off[4];
uint8_t picture_off_pressed[4];
};
struct cud_display_fan_group_t
{
uint8_t element_id[3];
const char *element_name[20];
uint8_t picture_on[3];
uint8_t picture_on_pressed[3];
uint8_t picture_off[3];
uint8_t picture_off_pressed[3];
};
class CUDDisplay : public ESPMegaDisplay
{
public:
@ -39,9 +59,13 @@ class CUDDisplay : public ESPMegaDisplay
void handle_payload(uint8_t type, uint8_t* payload, uint8_t length);
// Change Display Elements
void set_display_light_state(uint8_t row, bool state);
void set_display_light_all_state();
void set_display_fan_state(uint8_t row, bool state);
void set_display_fan_all_state();
void set_display_mosquito_zapper_state(bool state);
void set_display_air_purifier_state(bool state);
// Local Variables
cud_display_conf_t *conf;
cud_display_light_group_t light_group;
cud_display_fan_group_t fan_group;
};

View File

@ -9,30 +9,35 @@
* ***************************************/
// Lights
#define LCD_DASHBOARD_ELEMENT_LIGHT_ALL 0
#define LCD_DASHBOARD_ELEMENT_NAME_LIGHT_ALL "light_all"
#define LCD_DASHBOARD_PIC_LIGHT_ALL_ON 0
#define LCD_DASHBOARD_PIC_LIGHT_ALL_ON_PRESSED 1
#define LCD_DASHBOARD_PIC_LIGHT_ALL_OFF 1
#define LCD_DASHBOARD_PIC_LIGHT_ALL_OFF_PRESSED 0
#define LCD_DASHBOARD_ELEMENT_LIGHT_1 0
#define LCD_DASHBOARD_ELEMENT_NAME_LIGHT_1 "light_1"
#define LCD_DASHBOARD_PIC_LIGHT_1_ON 2
#define LCD_DASHBOARD_PIC_LIGHT_1_ON_PRESSED 3
#define LCD_DASHBOARD_PIC_LIGHT_1_OFF 3
#define LCD_DASHBOARD_PIC_LIGHT_1_OFF_PRESSED 2
#define LCD_DASHBOARD_ELEMENT_LIGHT_2 1
#define LCD_DASHBOARD_ELEMENT_NAME_LIGHT_2 "light_2"
#define LCD_DASHBOARD_PIC_LIGHT_2_ON 4
#define LCD_DASHBOARD_PIC_LIGHT_2_ON_PRESSED 5
#define LCD_DASHBOARD_PIC_LIGHT_2_OFF 5
#define LCD_DASHBOARD_PIC_LIGHT_2_OFF_PRESSED 4
#define LCD_DASHBOARD_ELEMENT_LIGHT_3 2
#define LCD_DASHBOARD_ELEMENT_NAME_LIGHT_3 "light_3"
#define LCD_DASHBOARD_PIC_LIGHT_3_ON 6
#define LCD_DASHBOARD_PIC_LIGHT_3_ON_PRESSED 7
#define LCD_DASHBOARD_PIC_LIGHT_3_OFF 7
#define LCD_DASHBOARD_PIC_LIGHT_3_OFF_PRESSED 6
#define LCD_DASHBOARD_ELEMENT_LIGHT_4 3
#define LCD_DASHBOARD_ELEMENT_NAME_LIGHT_4 "light_4"
#define LCD_DASHBOARD_PIC_LIGHT_4_ON 8
#define LCD_DASHBOARD_PIC_LIGHT_4_ON_PRESSED 9
#define LCD_DASHBOARD_PIC_LIGHT_4_OFF 9
@ -40,24 +45,28 @@
// Fans
#define LCD_DASHBOARD_ELEMENT_FAN_ALL 4
#define LCD_DASHBOARD_ELEMENT_NAME_FAN_ALL "fan_all"
#define LCD_DASHBOARD_PIC_FAN_ALL_ON 10
#define LCD_DASHBOARD_PIC_FAN_ALL_ON_PRESSED 11
#define LCD_DASHBOARD_PIC_FAN_ALL_OFF 11
#define LCD_DASHBOARD_PIC_FAN_ALL_OFF_PRESSED 10
#define LCD_DASHBOARD_ELEMENT_FAN_1 4
#define LCD_DASHBOARD_ELEMENT_NAME_FAN_1 "fan_1"
#define LCD_DASHBOARD_PIC_FAN_1_ON 12
#define LCD_DASHBOARD_PIC_FAN_1_ON_PRESSED 13
#define LCD_DASHBOARD_PIC_FAN_1_OFF 13
#define LCD_DASHBOARD_PIC_FAN_1_OFF_PRESSED 12
#define LCD_DASHBOARD_ELEMENT_FAN_2 5
#define LCD_DASHBOARD_ELEMENT_NAME_FAN_2 "fan_2"
#define LCD_DASHBOARD_PIC_FAN_2_ON 14
#define LCD_DASHBOARD_PIC_FAN_2_ON_PRESSED 15
#define LCD_DASHBOARD_PIC_FAN_2_OFF 15
#define LCD_DASHBOARD_PIC_FAN_2_OFF_PRESSED 14
#define LCD_DASHBOARD_ELEMENT_FAN_3 6
#define LCD_DASHBOARD_ELEMENT_NAME_FAN_3 "fan_3"
#define LCD_DASHBOARD_PIC_FAN_3_ON 16
#define LCD_DASHBOARD_PIC_FAN_3_ON_PRESSED 17
#define LCD_DASHBOARD_PIC_FAN_3_OFF 17
@ -65,6 +74,7 @@
// Air Purifier
#define LCD_DASHBOARD_ELEMENT_AIR_PURIFIER 7
#define LCD_DASHBOARD_ELEMENT_NAME_AIR_PURIFIER "purifier"
#define LCD_DASHBOARD_PIC_AIR_PURIFIER_ON 18
#define LCD_DASHBOARD_PIC_AIR_PURIFIER_ON_PRESSED 19
#define LCD_DASHBOARD_PIC_AIR_PURIFIER_OFF 19
@ -72,6 +82,7 @@
// Mosquito Zapper
#define LCD_DASHBOARD_ELEMENT_MOSQUITO_ZAPPER 8
#define LCD_DASHBOARD_ELEMENT_NAME_MOSQUITO_ZAPPER "zapper"
#define LCD_DASHBOARD_PIC_MOSQUITO_ZAPPER_ON 20
#define LCD_DASHBOARD_PIC_MOSQUITO_ZAPPER_ON_PRESSED 21
#define LCD_DASHBOARD_PIC_MOSQUITO_ZAPPER_OFF 21
@ -79,7 +90,9 @@
// AQI
#define LCD_DASHBOARD_ELEMENT_AQI_TEXT 9
#define LCD_DASHBOARD_ELEMENT_NAME_AQI_TEXT "aqi_txt"
#define LCD_DASHBOARD_ELEMENT_AQI_PICTURE 10
#define LCD_DASHBOARD_ELEMENT_NAME_AQI_PICTURE "aqi_pic"
#define LCD_DASHBOARD_PIC_AQI_GOOD 22
#define LCD_DASHBOARD_PIC_AQI_MODERATE 23
#define LCD_DASHBOARD_PIC_AQI_UNHEALTHY_FOR_SENSITIVE_GROUPS 24
@ -89,11 +102,13 @@
// Socket Power
#define LCD_DASHBOARD_ELEMENT_SOCKET_POWER 11
#define LCD_DASHBOARD_ELEMENT_NAME_SOCKET_POWER "socket"
#define LCD_DASHBOARD_PIC_SOCKET_POWER_ON 28
#define LCD_DASHBOARD_PIC_SOCKET_POWER_OFF 29
// Air Conditioner
#define LCD_DASHBOARD_ELEMENT_AC_STATE 12
#define LCD_DASHBOARD_ELEMENT_NAME_AC_STATE "ac_state"
#define LCD_DASHBOARD_PIC_AC_STATE_OFF 30
#define LCD_DASHBOARD_PIC_AC_STATE_OFF_PRESSED 31
#define LCD_DASHBOARD_PIC_AC_STATE_OFF_LOCKED 31
@ -102,45 +117,53 @@
#define LCD_DASHBOARD_PIC_AC_STATE_ON_LOCKED 33
#define LCD_DASHBOARD_ELEMENT_AC_MODE_FAN 13
#define LCD_DASHBOARD_ELEMENT_NAME_AC_MODE_FAN "ac_mode_fan"
#define LCD_DASHBOARD_PIC_AC_MODE_FAN_ACTIVE 34
#define LCD_DASHBOARD_PIC_AC_MODE_FAN_ACTIVE_PRESS 35
#define LCD_DASHBOARD_PIC_AC_MODE_FAN_INACTIVE 35
#define LCD_DASHBOARD_PIC_AC_MODE_FAN_INACTIVE_PRESS 34
#define LCD_DASHBOARD_ELEMENT_AC_MODE_COOL 14
#define LCD_DASHBOARD_ELEMENT_NAME_AC_MODE_COOL "ac_mode_cool"
#define LCD_DASHBOARD_PIC_AC_MODE_COOL_ACTIVE 36
#define LCD_DASHBOARD_PIC_AC_MODE_COOL_ACTIVE_PRESS 37
#define LCD_DASHBOARD_PIC_AC_MODE_COOL_INACTIVE 37
#define LCD_DASHBOARD_PIC_AC_MODE_COOL_INACTIVE_PRESS 36
#define LCD_DASHBOARD_ELEMENT_AC_FAN_SPEED_AUTO 15
#define LCD_DASHBOARD_ELEMENT_NAME_AC_FAN_SPEED_AUTO "ac_fan_auto"
#define LCD_DASHBOARD_PIC_AC_FAN_SPEED_AUTO_ACTIVE 38
#define LCD_DASHBOARD_PIC_AC_FAN_SPEED_AUTO_ACTIVE_PRESS 39
#define LCD_DASHBOARD_PIC_AC_FAN_SPEED_AUTO_INACTIVE 39
#define LCD_DASHBOARD_PIC_AC_FAN_SPEED_AUTO_INACTIVE_PRESS 38
#define LCD_DASHBOARD_ELEMENT_AC_FAN_SPEED_HIGH 16
#define LCD_DASHBOARD_ELEMENT_NAME_AC_FAN_SPEED_HIGH "ac_fan_high"
#define LCD_DASHBOARD_PIC_AC_FAN_SPEED_HIGH_ACTIVE 40
#define LCD_DASHBOARD_PIC_AC_FAN_SPEED_HIGH_ACTIVE_PRESS 41
#define LCD_DASHBOARD_PIC_AC_FAN_SPEED_HIGH_INACTIVE 41
#define LCD_DASHBOARD_PIC_AC_FAN_SPEED_HIGH_INACTIVE_PRESS 40
#define LCD_DASHBOARD_ELEMENT_AC_FAN_SPEED_MEDIUM 17
#define LCD_DASHBOARD_ELEMENT_NAME_AC_FAN_SPEED_MEDIUM "ac_fan_medium"
#define LCD_DASHBOARD_PIC_AC_FAN_SPEED_MEDIUM_ACTIVE 42
#define LCD_DASHBOARD_PIC_AC_FAN_SPEED_MEDIUM_ACTIVE_PRESS 43
#define LCD_DASHBOARD_PIC_AC_FAN_SPEED_MEDIUM_INACTIVE 43
#define LCD_DASHBOARD_PIC_AC_FAN_SPEED_MEDIUM_INACTIVE_PRESS 42
#define LCD_DASHBOARD_ELEMENT_AC_FAN_SPEED_LOW 18
#define LCD_DASHBOARD_ELEMENT_NAME_AC_FAN_SPEED_LOW "ac_fan_low"
#define LCD_DASHBOARD_PIC_AC_FAN_SPEED_LOW_ACTIVE 44
#define LCD_DASHBOARD_PIC_AC_FAN_SPEED_LOW_ACTIVE_PRESS 45
#define LCD_DASHBOARD_PIC_AC_FAN_SPEED_LOW_INACTIVE 45
#define LCD_DASHBOARD_PIC_AC_FAN_SPEED_LOW_INACTIVE_PRESS 44
#define LCD_DASHBOARD_ELEMENT_ROOM_TEMPERATURE 19
#define LCD_DASHBOARD_ELEMENT_NAME_ROOM_TEMPERATURE "room_temp"
// All System Button
#define LCD_DASHBOARD_ELEMENT_ALL_SYSTEM_TOGGLE 20
#define LCD_DASHBOARD_ELEMENT_NAME_ALL_SYSTEM_TOGGLE "all_toggle"
#define LCD_DASHBOARD_PIC_ALL_SYSTEM_TOGGLE_ON 46
#define LCD_DASHBOARD_PIC_ALL_SYSTEM_TOGGLE_ON_PRESSED 47
#define LCD_DASHBOARD_PIC_ALL_SYSTEM_TOGGLE_OFF 47