What MCU/Processor/Board and compiler are you using?
ttgo v1 2020 watch (esp32 with tft screen via spi)
What LVGL version are you using? 7.1.1. (since lilly go hasnt ported 8x)
What do you want to achieve? call a new screen from a call back function
What have you tried so far? reading documentation on 7.1.1
Code to reproduce
Add a code snippet which can run in the simulator. It should contain only the relevant code that compiles without errors when separated from your main code base.
The code block(s) should be formatted like:
#define LILYGO_WATCH_2020_V1
#define LILYGO_WATCH_LVGL
#include <LilyGoWatch.h>
int myVar_width = 480;
int myVar_height = 270;
const int vib = 4;
bool button_status = false ;
int buttonstate = 0;
int button_press_current_status = 0;
int button_press_last_status = 0;
bool auto_del = true;
TTGOClass *ttgo;
static void go_to_sleep(lv_obj_t *screen_1, lv_event_t event){
esp_deep_sleep_start();}
static void load_page_2(lv_obj_t *screen_2, lv_event_t event){
lv_scr_load_anim(screen_2, LV_SCR_LOAD_ANIM_OVER_LEFT, 10, 10,auto_del);
lv_scr_load(screen_2);
}
static void load_page_1(lv_obj_t *screen_1, lv_event_t event){
lv_scr_load_anim(screen_1, LV_SCR_LOAD_ANIM_OVER_RIGHT, 10, 10,auto_del);
lv_scr_load(screen_1);
}
static void event_handler(lv_obj_t *obj, lv_event_t event)
{
if (event == LV_EVENT_CLICKED) {
Serial.printf("Clicked\n");
digitalWrite(vib,HIGH);
delay(250);
digitalWrite(vib,LOW);}
else if (event == LV_EVENT_VALUE_CHANGED) {
Serial.printf("Toggled\n");
digitalWrite(vib,HIGH);
delay(250);
digitalWrite(vib,LOW);}
}
void setup()
{
pinMode(vib,OUTPUT);
pinMode(36,INPUT);
Serial.begin(115200);
ttgo = TTGOClass::getWatch();
ttgo->begin();
ttgo->openBL();
ttgo->lvgl_begin();
ttgo->tft->init(TFT_BLACK);
ttgo->tft->setRotation(2);
esp_sleep_enable_ext0_wakeup(GPIO_NUM_36,true);
lv_obj_t * screen_2 = lv_obj_create(NULL, NULL);
LV_IMG_DECLARE(screen_1_background_image);
lv_obj_t * screen_1 = lv_obj_create(NULL, NULL);
lv_scr_load(screen_1);
lv_obj_t *label;
lv_obj_t *btn1 = lv_btn_create(screen_1, NULL); //create the object button and what screen
lv_obj_set_event_cb(btn1, event_handler); //assign it a function
lv_obj_align(btn1, NULL, LV_ALIGN_IN_TOP_LEFT,5,5); //X,Y coord placement
lv_obj_set_size(btn1,70,40); //button metrics
label = lv_label_create(btn1, NULL); //placing and defining
lv_label_set_text(label, "MENU"); //visual label
lv_obj_t *btn2 = lv_btn_create(screen_1, NULL);
lv_obj_set_event_cb(btn2, event_handler);
lv_obj_align(btn2, NULL, LV_ALIGN_IN_LEFT_MID, 5, 0);
lv_obj_set_size(btn2,90,50);
label = lv_label_create(btn2, NULL);
lv_label_set_text(label, "CONNECT");
lv_obj_t *btn3 = lv_btn_create(screen_1, NULL);
lv_obj_set_event_cb(btn3, event_handler);
lv_obj_align(btn3, NULL, LV_ALIGN_IN_BOTTOM_LEFT,5,-5);
lv_obj_set_size(btn3,80,40);
label = lv_label_create(btn3, NULL);
lv_label_set_text(label, "STATUS");
lv_obj_t *btn4 = lv_btn_create(screen_1, NULL);
lv_obj_set_event_cb(btn4,go_to_sleep);
lv_obj_align(btn4, NULL, LV_ALIGN_IN_TOP_RIGHT,45,5);
lv_obj_set_size(btn4,80,50);
label = lv_label_create(btn4, NULL);
lv_label_set_text(label, "SLEEP");
lv_obj_t *btn5 = lv_btn_create(screen_1, NULL);
lv_obj_set_event_cb(btn5, event_handler);
lv_obj_align(btn5, NULL, LV_ALIGN_IN_RIGHT_MID,15,0);
lv_obj_set_size(btn5,110,50);
label = lv_label_create(btn5, NULL);
lv_label_set_text(label, "DISCONNECT");
lv_obj_t *btn6 = lv_btn_create(screen_1, NULL);
lv_obj_set_event_cb(btn6, load_page_2);
lv_obj_align(btn6, NULL, LV_ALIGN_IN_BOTTOM_RIGHT,55,-5);
lv_obj_set_size(btn6,70,40);
label = lv_label_create(btn6, NULL);
lv_label_set_text(label, "EXIT");
lv_obj_t *btn7 = lv_btn_create(screen_2, NULL);
lv_obj_set_event_cb(btn7, load_page_1);
lv_obj_align(btn7, NULL, LV_ALIGN_CENTER,0,0);
lv_obj_set_size(btn7,0,0);
label = lv_label_create(btn7, NULL);
lv_label_set_text(label, "BACK");
void loop(){
lv_task_handler();
delay(5);}
}
when i try to call screen 2 it crashes and turns the screen black then goes back to screen 1 could anyone tell me what i did wrong here? thank you in advance