🤖Have you ever tried Chat.M5Stack.com before asking??😎
    M5Stack Community
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Register
    • Login

    Not Fully Solved: Core2 UIFlow touch clears display?

    Cores
    1
    1
    3.7k
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • V
      veryalien
      last edited by veryalien

      I'm trying a few little UIFlow tests on my core2 and I noticed that when I touch the display it always gets cleared to the background colour set in the uiflow.
      I wrote a simple test program to print the current rtc time as a clock.
      Here is the python:

      from m5stack import *
      from m5stack_ui import *
      from uiflow import *
      import time
      
      screen = M5Screen()
      screen.clean_screen()
      screen.set_screen_bg_color(0x070707)
      
      lasttime = None
      time = None
      
      lcd.clear()
      lcd.fill(0x000000)
      lcd.rect(50, 50, 50, 50, color=0xff0000)
      lasttime = ''
      while True:
        time = rtc.printRTCtime()
        if lasttime != time:
          lcd.print(lasttime, 0, 0, 0x000000)
          lasttime = time
          lcd.print(time, 0, 0, 0xffffff)
        wait_ms(500)
        wait_ms(2)
      

      If I touch the display, it gets cleared to the black background.
      The red square that I draw only once disappears, so I know the display is being cleared.
      When my program writes to the display again, when the time changes after one second, it updates correctly and shows the time in white on a black background.

      How can I disable or change the behaviour of this 'automatic' touch display clear?

      I've solved the problem myself. When I use a label the screen clear does not affect it, so only the red square disappears.

      from m5stack import *
      from m5stack_ui import *
      from uiflow import *
      import time
      
      screen = M5Screen()
      screen.clean_screen()
      screen.set_screen_bg_color(0x000000)
      
      label0 = M5Label('Text', x=0, y=0, color=0xffffff, font=FONT_MONT_26, parent=None)
      
      lasttime = None
      time = None
      
      lcd.clear()
      lcd.fill(0x000000)
      lcd.rect(50, 50, 50, 50, color=0xff0000)
      lasttime = ''
      while True:
        time = rtc.printRTCtime()
        if lasttime != time:
          lasttime = time
          label0.set_text(str(time))
        wait_ms(500)
        wait_ms(2)
      

      I suppose this has something to do with which layers on the display are being cleared by the touch? But this still seems strange default behaviour to me.

      If I download the original program to the Core2 (without using a label) and run it from the app menu, any touches do not clear the display at all. If I then reset the Core2 and the app runs automatically, it then clears the display when I do a touch. What is going on?

      1 Reply Last reply Reply Quote 1
      • First post
        Last post