Bugfixes, add datapoints, improve screens

This commit is contained in:
Carsten Schmiemann 2022-09-03 21:01:56 +02:00
parent 7cef59552e
commit f0a9d71599
4 changed files with 129 additions and 103 deletions

View File

@ -32,6 +32,8 @@
U8G2_SSD1306_128X64_VCOMH0_F_HW_I2C display(U8G2_R0, OLED_RST, OLED_SCL, OLED_SDA);
bool pv_charging = false;
void display_begin() {
display.begin();
}
@ -81,12 +83,14 @@ void display_category_0() {
void display_category_1() {
display.setFont(u8g2_font_6x10_tr);
display.drawStr(2,7,"Batterie");
display.drawStr(46,45,"F");
display.drawStr(46,64,"E");
display.drawLine(0, 8, 128, 8);
display.drawLine(100, 0, 100, 8);
display.drawXBM(106,0, down_width, down_height, down_bits);
display.drawXBM(116,0, up_width, up_height, up_bits);
display.drawXBM(7,9, battery_width, battery_height, battery_bits);
display.drawFrame(5,38,40,25);
display.drawFrame(5,38,40,26);
}
void display_category_2() {
@ -96,7 +100,6 @@ void display_category_2() {
display.drawLine(100, 0, 100, 8);
display.drawXBM(116,0, up_width, up_height, up_bits);
display.drawXBM(0,9, grid_width, grid_height, grid_bits);
display.drawBox(6,18,40,10);
}
//PV Charger
@ -107,7 +110,7 @@ void display_screen_0(float pv_voltage, float pv_wattage, float battery_voltage,
do {
display_category_0();
display.setCursor(72,18); display.print(pv_voltage); display.print("V");
display.setCursor(72,28); display.print(pv_wattage); display.print("W");
display.setCursor(72,28); display.print(pv_wattage,0); display.print("W");
display.setCursor(72,38); display.print(pv_kwh); display.print("kWh");
display.setCursor(72,54); display.print(battery_voltage); display.print("V");
display.setCursor(72,64); display.print(pv_amps); display.print("A");
@ -115,37 +118,50 @@ void display_screen_0(float pv_voltage, float pv_wattage, float battery_voltage,
}
//Battery
void display_screen_1(float battery_voltage, float battery_amps, float battery_wattage, float battery_soc)
void display_screen_1(float battery_voltage, float battery_amps, float battery_wattage, float battery_soc, float batt_cell_v_min, float batt_cell_v_max)
{
logPrintlnD("Refresh display values...");
display.firstPage();
do {
display_category_1();
display.setCursor(9,60); display.print(batt_cell_v_min); display.print("V");
display.setCursor(9,50); display.print(batt_cell_v_max); display.print("V");
display.setCursor(72,18); display.print(battery_voltage); display.print("V");
display.setCursor(72,28); display.print(battery_amps); display.print("A");
display.setCursor(72,38); display.print(battery_wattage); display.print("W");
display.setCursor(72,28); display.print(battery_amps,1); display.print("A");
display.setCursor(72,38); display.print(battery_wattage,0); display.print("W");
display.setFont(u8g2_font_inr19_mf);
display.setCursor(70,63); display.print(battery_soc,0); display.print("%");
display.setFont(u8g2_font_6x10_tr);
int batt_fill_y = map(battery_soc, 0, 100, 63, 38);
int batt_fill_height = map(battery_soc, 0, 100, 0, 25);
display.drawBox(5,batt_fill_y,40,batt_fill_height);
display.setDrawColor(2);
display.drawBox(6,batt_fill_y,38,batt_fill_height);
} while ( display.nextPage() );
}
//Grid
void display_screen_2(float grid_power, float inv_power, float inv_current, float load_ph1, float load_ph2, float load_ph3)
void display_screen_2(float grid_power, float inv_power, float inv_current, float load_ph1, float load_ph2, float load_ph3, float pv_wattage)
{
logPrintlnD("Refresh display values...");
display.firstPage();
do {
display_category_2();
display.setDrawColor(0);
display.setCursor(10,26); display.print(grid_power,0); display.print("W");
display.setDrawColor(1);
display.setCursor(43,54); display.print(inv_power,0); display.print("W");
display.setCursor(43,64); display.print(inv_current,1); display.print("A");
display.setCursor(10,45); display.print(grid_power,0); display.print("W");
display.setCursor(40,54); display.print(inv_power,0); display.print("W");
display.setCursor(40,64); display.print(inv_current,1); display.print("A");
float ac_load = load_ph1 + load_ph2 + load_ph3;
display.setCursor(89,22); display.print(ac_load,0); display.print("W");
display.setCursor(87,20); display.print(ac_load,0); display.print("W");
display.setCursor(101,38); display.print(pv_wattage,0); display.print("W");
int pv_chg_y_pos;
if (pv_wattage >= 10) {
if (pv_charging) {
pv_chg_y_pos = 45;
pv_charging = false;
} else {
pv_chg_y_pos = 47;
pv_charging = true;
}
display.drawXBM(89,pv_chg_y_pos, down_pv_width, down_pv_height, down_pv_bits);
}
} while ( display.nextPage() );
}

View File

@ -29,5 +29,5 @@ void display_wifi(char* STATUS);
void display_mqtt();
void display_category_0();
void display_screen_0(float pv_voltage, float pv_wattage, float battery_voltage, float pv_amps, float pv_kwh);
void display_screen_1(float battery_voltage, float battery_amps, float battery_wattage, float battery_soc);
void display_screen_2(float grid_power, float inv_power, float inv_current, float load_ph1, float load_ph2, float load_ph3);
void display_screen_1(float battery_voltage, float battery_amps, float battery_wattage, float battery_soc, float batt_cell_v_min, float batt_cell_v_max);
void display_screen_2(float grid_power, float inv_power, float inv_current, float load_ph1, float load_ph2, float load_ph3, float pv_wattage);

View File

@ -36,7 +36,7 @@
#include <display.h>
#define VERSION "0.1a"
static const unsigned long DISPLAY_REFRESH_INTERVAL = 1000; // ms
static const unsigned long DISPLAY_REFRESH_INTERVAL = 500; // ms
static const unsigned long DISPLAY_SCREEN_INTERVAL = 10000; // ms
//Wifi Setup
@ -51,7 +51,7 @@ PubSubClient client(espClient);
//Globals
long lastMsg = 0;
char msg[50];
float pv_v = 0, pv_w = 0, pv_i = 0, pv_kwh = 0, inv_p = 0, inv_i = 0, batt_v = 0, batt_i = 0, batt_p = 0, grid_p = 0, batt_soc = 0, temp_outside = 0, load_ph1 = 0, load_ph2 = 0, load_ph3 = 0;
float pv_v = 0, pv_w = 0, pv_i = 0, pv_kwh = 0, inv_p = 0, inv_i = 0, batt_v = 0, batt_i = 0, batt_p = 0, batt_c_min = 0, batt_c_max = 0, grid_p = 0, batt_soc = 0, temp_outside = 0, load_ph1 = 0, load_ph2 = 0, load_ph3 = 0;
int lastButtonState = HIGH;
int currentButtonState;
int display_screen = 0;
@ -139,6 +139,18 @@ void callback(char* topic, byte* message, unsigned int length) {
deserializeJson(json, messageTemp);
batt_p = json["value"];
}
//Battery - max cell volts
if (String(topic) == "N/48e7da87c8df/battery/512/System/MaxCellVoltage") {
DynamicJsonDocument json(512);
deserializeJson(json, messageTemp);
batt_c_max = json["value"];
}
//Battery - min cell volts
if (String(topic) == "N/48e7da87c8df/battery/512/System/MinCellVoltage") {
DynamicJsonDocument json(512);
deserializeJson(json, messageTemp);
batt_c_min = json["value"];
}
//Temperature - outside
if (String(topic) == "N/48e7da87c8df/temperature/18/Temperature") {
@ -189,6 +201,8 @@ void reconnect() {
client.subscribe("N/48e7da87c8df/battery/512/Dc/0/Voltage");
client.subscribe("N/48e7da87c8df/battery/512/Dc/0/Current");
client.subscribe("N/48e7da87c8df/battery/512/Dc/0/Power");
client.subscribe("N/48e7da87c8df/battery/512/System/MaxCellVoltage");
client.subscribe("N/48e7da87c8df/battery/512/System/MinCellVoltage");
client.subscribe("N/48e7da87c8df/temperature/18/Temperature");
client.subscribe("N/48e7da87c8df/system/0/Ac/ConsumptionOnInput/L1/Power");
client.subscribe("N/48e7da87c8df/system/0/Ac/ConsumptionOnInput/L2/Power");
@ -248,10 +262,10 @@ void loop() {
display_screen_0(pv_v, pv_w, batt_v, pv_i, pv_kwh);
}
if (display_screen == 1) {
display_screen_1(batt_v, batt_i, batt_p, batt_soc);
display_screen_1(batt_v, batt_i, batt_p, batt_soc, batt_c_min, batt_c_max);
}
if (display_screen == 2) {
display_screen_2(grid_p, inv_p, inv_i, load_ph1, load_ph2, load_ph3);
display_screen_2(grid_p, inv_p, inv_i, load_ph1, load_ph2, load_ph3, pv_w);
}
}

View File

@ -81,89 +81,80 @@ static unsigned char battery_bits[] = {
0x04, 0x00, 0x00, 0x80, 0x00, 0xf8, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00 };
#define grid_width 128
#define grid_height 58
#define grid_width 123
#define grid_height 53
static unsigned char grid_bits[] = {
0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13,
0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0xc0,
0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xc0, 0x90, 0x20, 0x60, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x1f, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x90, 0x11, 0x81, 0x03, 0x00, 0x00,
0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x10, 0x1b,
0x01, 0x0e, 0x00, 0x00, 0x08, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x07, 0x30, 0x8f, 0x01, 0x3c, 0x00, 0x00, 0x08, 0x00, 0x06, 0x00,
0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00,
0x08, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x10, 0x0b,
0x00, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x00, 0x10, 0x11, 0x00, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x90, 0x20, 0x01, 0x40, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xc0,
0x01, 0x00, 0x00, 0x00, 0x08, 0xf8, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xf0, 0xff, 0x01, 0x00, 0x00, 0x00, 0x08, 0xf8, 0xff, 0x0f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x00, 0x00, 0x00,
0x08, 0xf8, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0xc0,
0x18, 0x00, 0x00, 0x00, 0x08, 0xf8, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xd0, 0x20, 0x60, 0x00, 0x00, 0x00, 0x08, 0xf8, 0xff, 0x0f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x90, 0x11, 0x81, 0x03, 0x00, 0x00,
0x08, 0xf8, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x10, 0x1b,
0x01, 0x0c, 0x00, 0x00, 0x08, 0xf8, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00,
0xc0, 0x07, 0x30, 0x9f, 0x03, 0x3c, 0x80, 0x01, 0x08, 0xf8, 0xff, 0x0f,
0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xc0, 0x00,
0x08, 0xf8, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x10, 0x0b,
0x00, 0x40, 0x60, 0x00, 0x08, 0xf8, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x40, 0x00, 0x10, 0x11, 0x00, 0x40, 0x30, 0x00, 0x08, 0xf8, 0xff, 0x0f,
0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x90, 0x20, 0x00, 0x40, 0xf8, 0xff,
0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xc0,
0x01, 0x00, 0x30, 0x00, 0x00, 0xf8, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x70, 0xc0, 0x01, 0x00, 0x60, 0x00, 0x00, 0xf8, 0xff, 0x0f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xc0, 0x01, 0x00, 0xc0, 0x00,
0x00, 0xf8, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xc0,
0x01, 0x00, 0x80, 0x01, 0x00, 0xf8, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x90, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x0f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x01, 0x00, 0x00, 0x00,
0x00, 0xf8, 0xff, 0x0f, 0x00, 0x0f, 0xc0, 0x03, 0x00, 0x00, 0x10, 0x0b,
0x01, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x0f, 0x80, 0x10, 0x20, 0x04,
0x00, 0x00, 0xf0, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x0f,
0x80, 0x10, 0x20, 0x04, 0x00, 0x00, 0x10, 0x0a, 0x01, 0x00, 0x00, 0x00,
0x00, 0xf8, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xf8, 0xff, 0xff, 0x7f,
0x00, 0x00, 0x90, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
0x0c, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x50, 0x40, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0x00, 0x04, 0x00, 0x00, 0x80, 0x00, 0x00, 0x38, 0x80,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x04, 0x00, 0x00, 0x80,
0x00, 0x00, 0x38, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
0x04, 0x00, 0x00, 0x80, 0x00, 0x00, 0x38, 0x80, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0x00, 0x04, 0x00, 0x00, 0x80, 0x00, 0x00, 0x38, 0x80,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x04, 0x00, 0x00, 0x80,
0x00, 0x00, 0x48, 0x60, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
0x04, 0x00, 0x80, 0x81, 0x00, 0x00, 0x88, 0x11, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0x00, 0x04, 0x00, 0x80, 0x81, 0x00, 0x00, 0x08, 0x0b,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc4, 0x1f, 0xe0, 0x87,
0x00, 0x00, 0xf8, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff,
0xc7, 0x1f, 0xe0, 0x87, 0x00, 0x00, 0x08, 0x1b, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x80, 0x81, 0x00, 0x00, 0x88, 0x11,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x80, 0x81,
0x00, 0x00, 0x40, 0x60, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x80, 0x00, 0x00, 0x2c, 0x80, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x80, 0x00, 0x00, 0x1c, 0x00,
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x80,
0x00, 0x00, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x80, 0x00, 0x80, 0x01, 0x00, 0x30, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x80,
0x00, 0x80, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xf8, 0xff, 0xff, 0x7f };
0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x06,
0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xf0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x03, 0x8e, 0x01, 0x00, 0x00, 0x00,
0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x04, 0x09,
0x06, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xc0, 0x80, 0x88, 0x08, 0x18, 0x00, 0x00, 0x40, 0x00, 0xc0, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x30, 0x80, 0x50, 0x08, 0x60, 0x00, 0x00, 0x40,
0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x80, 0x51, 0x0c,
0x80, 0x01, 0x00, 0x40, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xfe, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x40, 0x00, 0x18, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x02, 0x80, 0x50, 0x08, 0x00, 0x02, 0x00, 0x40,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x80, 0x88, 0x08,
0x00, 0x02, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x02, 0x80, 0x04, 0x09, 0x00, 0x02, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x0e, 0x00, 0x00, 0x00, 0x40,
0xc0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x0f,
0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xf0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x40, 0x40, 0x0c, 0x50, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x03, 0x8e, 0x01, 0x00, 0x00, 0x40,
0x40, 0x12, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x06, 0x0b,
0x06, 0x00, 0x00, 0x40, 0x40, 0x1e, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00,
0xc0, 0x80, 0x8c, 0x09, 0x18, 0x00, 0x00, 0x40, 0x40, 0x12, 0x42, 0x00,
0x00, 0x00, 0x00, 0x00, 0x30, 0x80, 0xd8, 0x08, 0x60, 0x00, 0x00, 0x40,
0x40, 0x00, 0x41, 0x27, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x80, 0x71, 0x0c,
0x80, 0x01, 0x0c, 0x40, 0x40, 0x0c, 0x41, 0x29, 0x02, 0x00, 0x00, 0x00,
0xfe, 0xff, 0xff, 0xff, 0xff, 0x03, 0x06, 0x40, 0x40, 0x02, 0x41, 0x29,
0x02, 0x00, 0x00, 0x00, 0x02, 0x80, 0x50, 0x08, 0x00, 0x02, 0x03, 0x40,
0x40, 0x82, 0x40, 0x67, 0x03, 0x00, 0x00, 0x00, 0x02, 0x80, 0x88, 0x08,
0x00, 0x82, 0x01, 0x40, 0x40, 0x4c, 0x46, 0x41, 0x01, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0xc2, 0xff, 0xff, 0x7f, 0x20, 0x4a, 0x41,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00,
0x40, 0x10, 0x4a, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x03, 0x00, 0x40, 0x10, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x40, 0x10, 0x40, 0x10,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00,
0x40, 0x08, 0x4c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x40, 0x04, 0x42, 0x38, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x02, 0x42, 0x10,
0x80, 0x07, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x01, 0x4c, 0x10, 0x40, 0x08, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x40, 0x10, 0x40, 0x08, 0x21, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x7f, 0x10,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x04, 0x10, 0xf8, 0xff, 0xff, 0x03, 0x00, 0x80, 0x04, 0x09,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x10, 0x0c, 0x00, 0x00, 0x06,
0x00, 0x80, 0x02, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x10,
0x04, 0x00, 0x00, 0x04, 0x00, 0x80, 0x01, 0x0c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x04, 0x10, 0x04, 0x00, 0x00, 0x04, 0x00, 0x80, 0x01, 0x0c,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x10, 0x04, 0x00, 0x00, 0x04,
0x00, 0xc0, 0x01, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x10,
0x04, 0x06, 0x00, 0x04, 0x00, 0x40, 0x01, 0x14, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xfc, 0xff, 0x07, 0x06, 0x00, 0x04, 0x00, 0x40, 0x06, 0x13,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x1f, 0x3f, 0x04,
0x00, 0x40, 0x88, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x84, 0x1f, 0x3f, 0x04, 0x00, 0x40, 0x50, 0x10, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x04, 0x06, 0x00, 0x04, 0x00, 0xc0, 0xff, 0x1f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x06, 0x00, 0x04,
0x00, 0x40, 0x50, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x04, 0x00, 0xc0, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0xf8, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04,
0x00, 0x0c, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x06, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x03 };
#define up_width 7
#define up_height 7
@ -173,4 +164,9 @@ static unsigned char up_bits[] = {
#define down_width 7
#define down_height 7
static unsigned char down_bits[] = {
0x00, 0x41, 0x22, 0x14, 0x08, 0x00, 0x00 };
0x00, 0x41, 0x22, 0x14, 0x08, 0x00, 0x00 };
#define down_pv_width 7
#define down_pv_height 4
static unsigned char down_pv_bits[] = {
0x49, 0x49, 0x2a, 0x1c };