|
|
|
@@ -10,34 +10,29 @@
|
|
|
|
TFT_eSPI tft = TFT_eSPI();
|
|
|
|
TFT_eSPI tft = TFT_eSPI();
|
|
|
|
FT62XXTouchScreen touchScreen = FT62XXTouchScreen(TFT_WIDTH, PIN_SDA, PIN_SCL);
|
|
|
|
FT62XXTouchScreen touchScreen = FT62XXTouchScreen(TFT_WIDTH, PIN_SDA, PIN_SCL);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include "lvgl.h"
|
|
|
|
#include "lvgl.h"
|
|
|
|
#include "widgets/meter/lv_meter.h"
|
|
|
|
#include "widgets/meter/lv_meter.h"
|
|
|
|
#include "esp_freertos_hooks.h"
|
|
|
|
#include "esp_freertos_hooks.h"
|
|
|
|
|
|
|
|
|
|
|
|
static const uint16_t screenWidth = 480;
|
|
|
|
static lv_disp_buf_t disp_buf;
|
|
|
|
static const uint16_t screenHeight = 320;
|
|
|
|
static lv_color_t buf[LV_HOR_RES_MAX * 10];
|
|
|
|
|
|
|
|
|
|
|
|
static lv_disp_draw_buf_t disp_buf;
|
|
|
|
|
|
|
|
static lv_color_t buf[screenWidth * 10];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
lv_obj_t *screenMain;
|
|
|
|
lv_obj_t *screenMain;
|
|
|
|
lv_obj_t *tabview;
|
|
|
|
lv_obj_t *tabview;
|
|
|
|
lv_obj_t *tab1;
|
|
|
|
lv_obj_t *tab_AQS;
|
|
|
|
lv_obj_t *label;
|
|
|
|
lv_obj_t *label;
|
|
|
|
lv_obj_t *btn1;
|
|
|
|
lv_obj_t *btn1;
|
|
|
|
lv_obj_t *btn2;
|
|
|
|
lv_obj_t *btn2;
|
|
|
|
lv_obj_t *tab2;
|
|
|
|
lv_obj_t *btn_calib;
|
|
|
|
|
|
|
|
lv_obj_t *tab_SET;
|
|
|
|
lv_obj_t *guage;
|
|
|
|
lv_obj_t *guage;
|
|
|
|
lv_obj_t *meter;
|
|
|
|
lv_obj_t * lmeter;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static void event_handler_btn(lv_event_t * e){
|
|
|
|
static void event_handler_btn(lv_obj_t * obj, lv_event_t event){
|
|
|
|
lv_event_code_t event = lv_event_get_code(e);
|
|
|
|
|
|
|
|
lv_obj_t * obj = lv_event_get_target(e);
|
|
|
|
|
|
|
|
if(event == LV_EVENT_CLICKED) {
|
|
|
|
if(event == LV_EVENT_CLICKED) {
|
|
|
|
if (obj == btn1)
|
|
|
|
if (obj == btn1)
|
|
|
|
lv_label_set_text(label, "Hello");
|
|
|
|
lv_label_set_text(label, "Hello");
|
|
|
|
@@ -86,100 +81,77 @@ static void lv_tick_task(void)
|
|
|
|
lv_tick_inc(portTICK_RATE_MS);
|
|
|
|
lv_tick_inc(portTICK_RATE_MS);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// static void set_value(void * indic, int32_t v)
|
|
|
|
void Create_PM_guage(lv_obj_t* par)
|
|
|
|
// {
|
|
|
|
{
|
|
|
|
// lv_meter_set_indicator_end_value(meter, indic, v);
|
|
|
|
/*Describe the color for the needles*/
|
|
|
|
// }
|
|
|
|
static lv_color_t needle_colors[] = {LV_COLOR_BLUE, LV_COLOR_RED, LV_COLOR_YELLOW};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
LV_IMG_DECLARE(img_hand);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/*Create a gauge*/
|
|
|
|
* A meter with multiple arcs
|
|
|
|
guage = lv_gauge_create(par, NULL);
|
|
|
|
*/
|
|
|
|
lv_gauge_set_needle_count(guage, 3, needle_colors);
|
|
|
|
// void lv_example_meter_2(void)
|
|
|
|
lv_obj_set_size(guage, 200, 200);
|
|
|
|
// {
|
|
|
|
lv_obj_align(guage, NULL, LV_ALIGN_CENTER, 100, 0);
|
|
|
|
// meter = lv_meter_create(lv_scr_act());
|
|
|
|
lv_gauge_set_needle_img(guage, &img_hand, 4, 4);
|
|
|
|
// lv_obj_center(meter);
|
|
|
|
/*Allow recoloring of the images according to the needles' color*/
|
|
|
|
// lv_obj_set_size(meter, 200, 200);
|
|
|
|
lv_obj_set_style_local_image_recolor_opa(guage, LV_GAUGE_PART_NEEDLE, LV_STATE_DEFAULT, LV_OPA_COVER);
|
|
|
|
|
|
|
|
|
|
|
|
// /*Remove the circle from the middle*/
|
|
|
|
|
|
|
|
// lv_obj_remove_style(meter, NULL, LV_PART_INDICATOR);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// /*Add a scale first*/
|
|
|
|
|
|
|
|
// lv_meter_scale_t * scale = lv_meter_add_scale(meter);
|
|
|
|
|
|
|
|
// lv_meter_set_scale_ticks(meter, scale, 11, 2, 10, lv_palette_main(LV_PALETTE_GREY));
|
|
|
|
|
|
|
|
// lv_meter_set_scale_major_ticks(meter, scale, 1, 2, 30, lv_color_hex3(0xeee), 15);
|
|
|
|
|
|
|
|
// lv_meter_set_scale_range(meter, scale, 0, 100, 270, 90);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// /*Add a three arc indicator*/
|
|
|
|
|
|
|
|
// lv_meter_indicator_t * indic1 = lv_meter_add_arc(meter, scale, 10, lv_palette_main(LV_PALETTE_RED), 0);
|
|
|
|
|
|
|
|
// lv_meter_indicator_t * indic2 = lv_meter_add_arc(meter, scale, 10, lv_palette_main(LV_PALETTE_GREEN), -10);
|
|
|
|
|
|
|
|
// lv_meter_indicator_t * indic3 = lv_meter_add_arc(meter, scale, 10, lv_palette_main(LV_PALETTE_BLUE), -20);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// /*Create an animation to set the value*/
|
|
|
|
|
|
|
|
// lv_anim_t a;
|
|
|
|
|
|
|
|
// lv_anim_init(&a);
|
|
|
|
|
|
|
|
// lv_anim_set_exec_cb(&a, set_value);
|
|
|
|
|
|
|
|
// lv_anim_set_values(&a, 0, 100);
|
|
|
|
|
|
|
|
// lv_anim_set_repeat_delay(&a, 100);
|
|
|
|
|
|
|
|
// lv_anim_set_playback_delay(&a, 100);
|
|
|
|
|
|
|
|
// lv_anim_set_repeat_count(&a, LV_ANIM_REPEAT_INFINITE);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// lv_anim_set_time(&a, 2000);
|
|
|
|
|
|
|
|
// lv_anim_set_playback_time(&a, 500);
|
|
|
|
|
|
|
|
// lv_anim_set_var(&a, indic1);
|
|
|
|
|
|
|
|
// lv_anim_start(&a);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// lv_anim_set_time(&a, 1000);
|
|
|
|
|
|
|
|
// lv_anim_set_playback_time(&a, 1000);
|
|
|
|
|
|
|
|
// lv_anim_set_var(&a, indic2);
|
|
|
|
|
|
|
|
// lv_anim_start(&a);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// lv_anim_set_time(&a, 1000);
|
|
|
|
|
|
|
|
// lv_anim_set_playback_time(&a, 2000);
|
|
|
|
|
|
|
|
// lv_anim_set_var(&a, indic3);
|
|
|
|
|
|
|
|
// lv_anim_start(&a);
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*Set the values*/
|
|
|
|
|
|
|
|
lv_gauge_set_value(guage, 0, 10);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void lv_ex_tabview(lv_obj_t* par)
|
|
|
|
void lv_ex_tabview(lv_obj_t* par)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
/*Create a Tab view object*/
|
|
|
|
/*Create a Tab view object*/
|
|
|
|
tabview = lv_tabview_create(par);
|
|
|
|
tabview = lv_tabview_create(par, NULL);
|
|
|
|
|
|
|
|
|
|
|
|
/*Add 3 tabs (the tabs are page (lv_page) and can be scrolled*/
|
|
|
|
/*Add 3 tabs (the tabs are page (lv_page) and can be scrolled*/
|
|
|
|
tab1 = lv_tabview_add_tab(tabview, "Tab 1");
|
|
|
|
tab_AQS = lv_tabview_add_tab(tabview, "AirQuality");
|
|
|
|
tab2 = lv_tabview_add_tab(tabview, "Tab 2");
|
|
|
|
tab_SET = lv_tabview_add_tab(tabview, "Settings");
|
|
|
|
|
|
|
|
lv_tabview_set_anim_time(tabview,2);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void lv_Create_text(lv_obj_t* par)
|
|
|
|
void lv_Create_text(lv_obj_t* par)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
label = lv_label_create(par);
|
|
|
|
label = lv_label_create(par, NULL);
|
|
|
|
lv_label_set_long_mode(label, LV_LABEL_LONG_CLIP);
|
|
|
|
lv_label_set_long_mode(label, LV_LABEL_LONG_BREAK);
|
|
|
|
lv_label_set_text(label, "Press a button");
|
|
|
|
lv_label_set_text(label, "Press a button");
|
|
|
|
lv_obj_set_style_text_align(label, LV_TEXT_ALIGN_CENTER,0);
|
|
|
|
lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
|
|
|
|
lv_obj_set_size(label, 240, 40);
|
|
|
|
lv_obj_set_size(label, 240, 40);
|
|
|
|
lv_obj_set_pos(label, 0, 15);
|
|
|
|
lv_obj_set_pos(label, 0, 15);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void lv_Create_button1(lv_obj_t* par)
|
|
|
|
void lv_Create_button1(lv_obj_t* par)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
btn1 = lv_btn_create(par);
|
|
|
|
btn1 = lv_btn_create(par, NULL);
|
|
|
|
lv_obj_add_event_cb(btn1, event_handler_btn,LV_EVENT_ALL);
|
|
|
|
lv_obj_set_event_cb(btn1, event_handler_btn);
|
|
|
|
lv_obj_set_width(btn1, 70);
|
|
|
|
lv_obj_set_width(btn1, 70);
|
|
|
|
lv_obj_set_height(btn1, 32);
|
|
|
|
lv_obj_set_height(btn1, 32);
|
|
|
|
lv_obj_set_pos(btn1, 32, 100);
|
|
|
|
lv_obj_set_pos(btn1, 32, 100);
|
|
|
|
lv_obj_t * label1 = lv_label_create(btn1);
|
|
|
|
lv_obj_t * label1 = lv_label_create(btn1, NULL);
|
|
|
|
lv_label_set_text(label1, "Hello");
|
|
|
|
lv_label_set_text(label1, "Hello");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void lv_Create_btnCalibrate(lv_obj_t* par)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
btn_calib = lv_btn_create(par, NULL);
|
|
|
|
|
|
|
|
lv_obj_set_event_cb(btn_calib, event_handler_btn);
|
|
|
|
|
|
|
|
lv_obj_set_width(btn_calib, 150);
|
|
|
|
|
|
|
|
lv_obj_set_height(btn_calib, 32);
|
|
|
|
|
|
|
|
lv_obj_set_pos(btn_calib, 32, 185);
|
|
|
|
|
|
|
|
lv_obj_t * label1 = lv_label_create(btn_calib, NULL);
|
|
|
|
|
|
|
|
lv_label_set_text(label1, "Calibrate");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void lv_Create_button2(lv_obj_t* par)
|
|
|
|
void lv_Create_button2(lv_obj_t* par)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
btn2 = lv_btn_create(par);
|
|
|
|
btn2 = lv_btn_create(par, NULL);
|
|
|
|
lv_obj_add_event_cb(btn2, event_handler_btn,LV_EVENT_ALL);
|
|
|
|
lv_obj_set_event_cb(btn2, event_handler_btn);
|
|
|
|
lv_obj_set_width(btn2, 70);
|
|
|
|
lv_obj_set_width(btn2, 70);
|
|
|
|
lv_obj_set_height(btn2, 32);
|
|
|
|
lv_obj_set_height(btn2, 32);
|
|
|
|
lv_obj_set_pos(btn2, 142, 100);
|
|
|
|
lv_obj_set_pos(btn2, 142, 100);
|
|
|
|
lv_obj_t * label2 = lv_label_create(btn2);
|
|
|
|
lv_obj_t * label2 = lv_label_create(btn2, NULL);
|
|
|
|
lv_label_set_text(label2, "Goodbye");
|
|
|
|
lv_label_set_text(label2, "Goodbye");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@@ -206,14 +178,14 @@ void setup() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Display Buffer
|
|
|
|
// Display Buffer
|
|
|
|
lv_disp_draw_buf_init(&disp_buf, buf, NULL, screenWidth * 10);
|
|
|
|
lv_disp_buf_init(&disp_buf, buf, NULL, LV_HOR_RES_MAX * 10);
|
|
|
|
|
|
|
|
|
|
|
|
// Init Display
|
|
|
|
// Init Display
|
|
|
|
lv_disp_drv_init(&disp_drv);
|
|
|
|
lv_disp_drv_init(&disp_drv);
|
|
|
|
disp_drv.hor_res = 480;
|
|
|
|
disp_drv.hor_res = 480;
|
|
|
|
disp_drv.ver_res = 320;
|
|
|
|
disp_drv.ver_res = 320;
|
|
|
|
disp_drv.flush_cb = my_disp_flush;
|
|
|
|
disp_drv.flush_cb = my_disp_flush;
|
|
|
|
disp_drv.draw_buf = &disp_buf;
|
|
|
|
disp_drv.buffer = &disp_buf;
|
|
|
|
lv_disp_drv_register(&disp_drv);
|
|
|
|
lv_disp_drv_register(&disp_drv);
|
|
|
|
|
|
|
|
|
|
|
|
// Init Touchscreen
|
|
|
|
// Init Touchscreen
|
|
|
|
@@ -228,16 +200,17 @@ void setup() {
|
|
|
|
lv_ex_tabview(screenMain);
|
|
|
|
lv_ex_tabview(screenMain);
|
|
|
|
|
|
|
|
|
|
|
|
// Text
|
|
|
|
// Text
|
|
|
|
lv_Create_text(tab1);
|
|
|
|
lv_Create_text(tab_SET);
|
|
|
|
|
|
|
|
|
|
|
|
// BUtton 1
|
|
|
|
// BUtton 1
|
|
|
|
lv_Create_button1(tab1);
|
|
|
|
lv_Create_button1(tab_SET);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
lv_Create_btnCalibrate(tab_SET);
|
|
|
|
|
|
|
|
|
|
|
|
// Button 2
|
|
|
|
// Button 2
|
|
|
|
lv_Create_button2(tab1);
|
|
|
|
lv_Create_button2(tab_SET);
|
|
|
|
|
|
|
|
|
|
|
|
lv_gauge_2(tab2);
|
|
|
|
Create_PM_guage(tab_AQS);
|
|
|
|
|
|
|
|
|
|
|
|
// Screen load
|
|
|
|
// Screen load
|
|
|
|
lv_scr_load(screenMain);
|
|
|
|
lv_scr_load(screenMain);
|
|
|
|
|