kopia lustrzana https://github.com/peterhinch/micropython-micro-gui
Fix bug in vtest.py. Add pyboard setup example.
rodzic
6485678b51
commit
5de88cc126
|
@ -35,21 +35,9 @@ class BackScreen(Screen):
|
||||||
Label(wri, 2, 2, 'Ensure back refreshes properly')
|
Label(wri, 2, 2, 'Ensure back refreshes properly')
|
||||||
CloseButton(wri)
|
CloseButton(wri)
|
||||||
|
|
||||||
# Create a random vector. Interpolate between current vector and the new one.
|
|
||||||
# Change pointer color dependent on magnitude.
|
# Update a pointer with a vector. Change pointer color dependent on magnitude.
|
||||||
async def ptr_test(dial):
|
def vset(ptr, v):
|
||||||
ptr = Pointer(dial)
|
|
||||||
v = 0j
|
|
||||||
steps = 20 # No. of interpolation steps
|
|
||||||
# BUG getting a weird visual flicker on occasion, with yellow
|
|
||||||
# being briefly displayed. Where is that coming from?
|
|
||||||
# Does not seem to be affected by max value. TODO
|
|
||||||
grv = lambda : urandom.getrandbits(16) / 2**15 - 1 # Random: range -1.0 to +0.999
|
|
||||||
while True:
|
|
||||||
v1 = grv() + 1j * grv() # Random vector
|
|
||||||
dv = (v1 - v) / steps # Interpolation vector
|
|
||||||
for _ in range(steps):
|
|
||||||
v += dv
|
|
||||||
mag = abs(v)
|
mag = abs(v)
|
||||||
if mag < 0.3:
|
if mag < 0.3:
|
||||||
ptr.value(v, BLUE)
|
ptr.value(v, BLUE)
|
||||||
|
@ -57,6 +45,22 @@ async def ptr_test(dial):
|
||||||
ptr.value(v, GREEN)
|
ptr.value(v, GREEN)
|
||||||
else:
|
else:
|
||||||
ptr.value(v, RED)
|
ptr.value(v, RED)
|
||||||
|
|
||||||
|
def get_vec(): # Return a random vector
|
||||||
|
mag = urandom.getrandbits(16) / 2**16 # 0..1 (well, almost 1)
|
||||||
|
phi = pi * urandom.getrandbits(16) / 2**15 # 0..2*pi
|
||||||
|
return rect(mag, phi)
|
||||||
|
|
||||||
|
async def ptr_test(dial):
|
||||||
|
ptr0 = Pointer(dial)
|
||||||
|
ptr1 = Pointer(dial)
|
||||||
|
steps = 20 # No. of interpolation steps
|
||||||
|
while True:
|
||||||
|
dv0 = (get_vec() - ptr0.value()) / steps # Interpolation vectors
|
||||||
|
dv1 = (get_vec() - ptr1.value()) / steps
|
||||||
|
for _ in range(steps):
|
||||||
|
vset(ptr0, ptr0.value() + dv0)
|
||||||
|
vset(ptr1, ptr1.value() + dv1)
|
||||||
await asyncio.sleep_ms(200)
|
await asyncio.sleep_ms(200)
|
||||||
|
|
||||||
# Analog clock demo.
|
# Analog clock demo.
|
||||||
|
@ -77,6 +81,7 @@ async def aclock(dial, lbldate, lbltim):
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
t = time.localtime()
|
t = time.localtime()
|
||||||
|
# Maths rotates vectors counterclockwise, hence - signs.
|
||||||
hrs.value(hstart * uv(-t[3] * pi/6 - t[4] * pi / 360), CYAN)
|
hrs.value(hstart * uv(-t[3] * pi/6 - t[4] * pi / 360), CYAN)
|
||||||
mins.value(mstart * uv(-t[4] * pi/30), CYAN)
|
mins.value(mstart * uv(-t[4] * pi/30), CYAN)
|
||||||
secs.value(sstart * uv(-t[5] * pi/30), RED)
|
secs.value(sstart * uv(-t[5] * pi/30), RED)
|
||||||
|
@ -99,10 +104,10 @@ class VScreen(Screen):
|
||||||
# Set up random vector display with two pointers
|
# Set up random vector display with two pointers
|
||||||
dial = Dial(wri, 2, 2, height = 100, ticks = 12, fgcolor = YELLOW, style=Dial.COMPASS)
|
dial = Dial(wri, 2, 2, height = 100, ticks = 12, fgcolor = YELLOW, style=Dial.COMPASS)
|
||||||
self.reg_task(ptr_test(dial))
|
self.reg_task(ptr_test(dial))
|
||||||
self.reg_task(ptr_test(dial))
|
|
||||||
# Set up clock display: instantiate labels
|
# Set up clock display: instantiate labels
|
||||||
lbldate = Label(wri, 110, 2, 200, **labels)
|
gap = 4
|
||||||
lbltim = Label(wri, 150, 2, 80, **labels)
|
lbldate = Label(wri, dial.mrow + gap, 2, 200, **labels)
|
||||||
|
lbltim = Label(wri, lbldate.mrow + gap, 2, 80, **labels)
|
||||||
dial = Dial(wri, 2, 120, height = 100, ticks = 12, fgcolor = GREEN, pip = GREEN)
|
dial = Dial(wri, 2, 120, height = 100, ticks = 12, fgcolor = GREEN, pip = GREEN)
|
||||||
self.reg_task(aclock(dial, lbldate, lbltim))
|
self.reg_task(aclock(dial, lbldate, lbltim))
|
||||||
|
|
||||||
|
|
|
@ -1,60 +1,54 @@
|
||||||
# st7735r144_setup.py For my PCB with 1.44 inch 128*128 TFT Customise for your hardware config
|
# ili9341_pico.py Customise for your hardware config
|
||||||
|
|
||||||
# Released under the MIT License (MIT). See LICENSE.
|
# Released under the MIT License (MIT). See LICENSE.
|
||||||
# Copyright (c) 2020 Peter Hinch
|
# Copyright (c) 2021 Peter Hinch
|
||||||
|
|
||||||
# As written, supports:
|
# As written, supports:
|
||||||
# Adfruit 1.44 inch Color TFT LCD display with MicroSD Card Breakout:
|
# ili9341 240x320 displays on Pi Pico
|
||||||
# https://www.adafruit.com/product/2088
|
# Edit the driver import for other displays.
|
||||||
|
|
||||||
# WIRING (Adafruit pin nos and names).
|
# Demo of initialisation procedure designed to minimise risk of memory fail
|
||||||
# Pyb SSD
|
# when instantiating the frame buffer. The aim is to do this as early as
|
||||||
# Gnd Gnd
|
# possible before importing other modules.
|
||||||
# 3V3 Vcc
|
|
||||||
# Y11 RESET
|
|
||||||
# Y12 D/C
|
|
||||||
# W32 TFT_CS
|
|
||||||
# Y8 MOSI
|
|
||||||
# Y6 SCK
|
|
||||||
# Vin LITE (10) Backlight
|
|
||||||
|
|
||||||
# Switch wiring
|
# WIRING
|
||||||
# X1 Next
|
# Pico Display
|
||||||
# X2 Sel
|
# GPIO Pin
|
||||||
# X3 Prev
|
# 3v3 36 Vin
|
||||||
# X4 Increase
|
# IO6 9 CLK Hardware SPI0
|
||||||
# X5 Decrease
|
# IO7 10 DATA (AKA SI MOSI)
|
||||||
|
# IO8 11 DC
|
||||||
|
# IO9 12 Rst
|
||||||
|
# Gnd 13 Gnd
|
||||||
|
# IO10 14 CS
|
||||||
|
|
||||||
import machine
|
# Pushbuttons are wired between the pin and Gnd
|
||||||
|
# Pico pin Meaning
|
||||||
|
# 16 Operate current control
|
||||||
|
# 17 Decrease value of current control
|
||||||
|
# 18 Select previous control
|
||||||
|
# 19 Select next control
|
||||||
|
# 20 Increase value of current control
|
||||||
|
|
||||||
|
from machine import Pin, SPI, freq
|
||||||
import gc
|
import gc
|
||||||
|
|
||||||
from machine import Pin, SPI
|
from drivers.ili93xx.ili9341 import ILI9341 as SSD
|
||||||
import gc
|
freq(250_000_000) # RP2 overclock
|
||||||
import time
|
# Create and export an SSD instance
|
||||||
|
pdc = Pin(8, Pin.OUT, value=0) # Arbitrary pins
|
||||||
from drivers.st7735r.st7735r144_4bit import ST7735R as SSD
|
prst = Pin(9, Pin.OUT, value=1)
|
||||||
pp = Pin('EN_3V3')
|
pcs = Pin(10, Pin.OUT, value=1)
|
||||||
pp(1)
|
spi = SPI(0, baudrate=30_000_000)
|
||||||
time.sleep(1)
|
|
||||||
|
|
||||||
pdc = Pin('Y12', Pin.OUT_PP, value=0)
|
|
||||||
pcs = Pin('W32', Pin.OUT_PP, value=1)
|
|
||||||
prst = Pin('Y11', Pin.OUT_PP, value=1)
|
|
||||||
spi = SPI(2, baudrate=6_000_000)
|
|
||||||
gc.collect() # Precaution before instantiating framebuf
|
gc.collect() # Precaution before instantiating framebuf
|
||||||
ssd = SSD(spi, pcs, pdc, prst) # Create a display instance
|
ssd = SSD(spi, pcs, pdc, prst, usd=True)
|
||||||
from gui.core.ugui import Display
|
|
||||||
|
|
||||||
|
from gui.core.ugui import Display
|
||||||
# Create and export a Display instance
|
# Create and export a Display instance
|
||||||
# Define control buttons
|
# Define control buttons
|
||||||
nxt = Pin(Pin.board.X5, Pin.IN, Pin.PULL_UP) # Move to next control
|
nxt = Pin(19, Pin.IN, Pin.PULL_UP) # Move to next control
|
||||||
sel = Pin(Pin.board.X1, Pin.IN, Pin.PULL_UP) # Operate current control
|
sel = Pin(16, Pin.IN, Pin.PULL_UP) # Operate current control
|
||||||
prev = Pin(Pin.board.X4, Pin.IN, Pin.PULL_UP) # Move to previous control
|
prev = Pin(18, Pin.IN, Pin.PULL_UP) # Move to previous control
|
||||||
increase = Pin(Pin.board.X2, Pin.IN, Pin.PULL_UP) # Increase control's value
|
increase = Pin(20, Pin.IN, Pin.PULL_UP) # Increase control's value
|
||||||
decrease = Pin(Pin.board.X3, Pin.IN, Pin.PULL_UP) # Decrease control's value
|
decrease = Pin(17, Pin.IN, Pin.PULL_UP) # Decrease control's value
|
||||||
display = Display(ssd, nxt, sel, prev, increase, decrease)
|
display = Display(ssd, nxt, sel, prev, increase, decrease)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,60 @@
|
||||||
|
# st7735r144_setup.py For my PCB with 1.44 inch 128*128 TFT Customise for your hardware config
|
||||||
|
|
||||||
|
# Released under the MIT License (MIT). See LICENSE.
|
||||||
|
# Copyright (c) 2020 Peter Hinch
|
||||||
|
|
||||||
|
# As written, supports:
|
||||||
|
# Adfruit 1.44 inch Color TFT LCD display with MicroSD Card Breakout:
|
||||||
|
# https://www.adafruit.com/product/2088
|
||||||
|
|
||||||
|
# WIRING (Adafruit pin nos and names).
|
||||||
|
# Pyb SSD
|
||||||
|
# Gnd Gnd
|
||||||
|
# 3V3 Vcc
|
||||||
|
# Y11 RESET
|
||||||
|
# Y12 D/C
|
||||||
|
# W32 TFT_CS
|
||||||
|
# Y8 MOSI
|
||||||
|
# Y6 SCK
|
||||||
|
# Vin LITE (10) Backlight
|
||||||
|
|
||||||
|
# Switch wiring
|
||||||
|
# X1 Next
|
||||||
|
# X2 Sel
|
||||||
|
# X3 Prev
|
||||||
|
# X4 Increase
|
||||||
|
# X5 Decrease
|
||||||
|
|
||||||
|
import machine
|
||||||
|
import gc
|
||||||
|
|
||||||
|
from machine import Pin, SPI
|
||||||
|
import gc
|
||||||
|
import time
|
||||||
|
|
||||||
|
from drivers.st7735r.st7735r144_4bit import ST7735R as SSD
|
||||||
|
pp = Pin('EN_3V3')
|
||||||
|
pp(1)
|
||||||
|
time.sleep(1)
|
||||||
|
|
||||||
|
pdc = Pin('Y12', Pin.OUT_PP, value=0)
|
||||||
|
pcs = Pin('W32', Pin.OUT_PP, value=1)
|
||||||
|
prst = Pin('Y11', Pin.OUT_PP, value=1)
|
||||||
|
spi = SPI(2, baudrate=6_000_000)
|
||||||
|
gc.collect() # Precaution before instantiating framebuf
|
||||||
|
ssd = SSD(spi, pcs, pdc, prst) # Create a display instance
|
||||||
|
from gui.core.ugui import Display
|
||||||
|
|
||||||
|
# Create and export a Display instance
|
||||||
|
# Define control buttons
|
||||||
|
nxt = Pin(Pin.board.X5, Pin.IN, Pin.PULL_UP) # Move to next control
|
||||||
|
sel = Pin(Pin.board.X1, Pin.IN, Pin.PULL_UP) # Operate current control
|
||||||
|
prev = Pin(Pin.board.X4, Pin.IN, Pin.PULL_UP) # Move to previous control
|
||||||
|
increase = Pin(Pin.board.X2, Pin.IN, Pin.PULL_UP) # Increase control's value
|
||||||
|
decrease = Pin(Pin.board.X3, Pin.IN, Pin.PULL_UP) # Decrease control's value
|
||||||
|
display = Display(ssd, nxt, sel, prev, increase, decrease)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue