71 lines
1.6 KiB
Python
71 lines
1.6 KiB
Python
|
|
import time
|
||
|
|
from machine import Pin, SPI
|
||
|
|
import st7789 as st7789
|
||
|
|
from random import randrange, choice
|
||
|
|
|
||
|
|
|
||
|
|
def hsv_to_rgb(h, s, v):
|
||
|
|
if s == 0.0:
|
||
|
|
return v, v, v
|
||
|
|
i = int(h * 6.0) # XXX assume int() truncates!
|
||
|
|
f = (h * 6.0) - i
|
||
|
|
p = v * (1.0 - s)
|
||
|
|
q = v * (1.0 - s * f)
|
||
|
|
t = v * (1.0 - s * (1.0 - f))
|
||
|
|
i = i % 6
|
||
|
|
if i == 0:
|
||
|
|
return int(v * 255), int(t * 255), int(p * 255)
|
||
|
|
if i == 1:
|
||
|
|
return int(q * 255), int(v * 255), int(p * 255)
|
||
|
|
if i == 2:
|
||
|
|
return int(p * 255), int(v * 255), int(t * 255)
|
||
|
|
if i == 3:
|
||
|
|
return int(p * 255), int(q * 255), int(v * 255)
|
||
|
|
if i == 4:
|
||
|
|
return int(t * 255), int(p * 255), int(v * 255)
|
||
|
|
if i == 5:
|
||
|
|
return int(v * 255), int(p * 255), int(q * 255)
|
||
|
|
# Cannot get here
|
||
|
|
|
||
|
|
|
||
|
|
def rainbow():
|
||
|
|
print('RAINBOW')
|
||
|
|
for i in range(240):
|
||
|
|
color = st7789.color565(*hsv_to_rgb(i / 240, 1.0, 1.0))
|
||
|
|
tft.hline(0, i, 135, color)
|
||
|
|
|
||
|
|
|
||
|
|
def fill():
|
||
|
|
print('FILL')
|
||
|
|
tft.fill_rect(0, 0, 135, 240, st7789.color565(
|
||
|
|
randrange(0, 255), randrange(0, 255), randrange(0, 255)
|
||
|
|
))
|
||
|
|
|
||
|
|
|
||
|
|
def main():
|
||
|
|
p1 = Pin(0, Pin.IN)
|
||
|
|
p2 = Pin(35, Pin.IN)
|
||
|
|
|
||
|
|
time.sleep(0.5)
|
||
|
|
tft = st7789.ST7789(
|
||
|
|
SPI(2, baudrate=30000000, polarity=1, phase=1, sck=Pin(18), mosi=Pin(19)),
|
||
|
|
135,
|
||
|
|
240,
|
||
|
|
reset=Pin(23, Pin.OUT),
|
||
|
|
cs=Pin(5, Pin.OUT),
|
||
|
|
dc=Pin(16, Pin.OUT),
|
||
|
|
backlight=Pin(4, Pin.OUT),
|
||
|
|
rotation=0
|
||
|
|
)
|
||
|
|
tft.init()
|
||
|
|
|
||
|
|
time.sleep(0.5)
|
||
|
|
fill()
|
||
|
|
while True:
|
||
|
|
if not p1.value():
|
||
|
|
rainbow()
|
||
|
|
elif not p2.value():
|
||
|
|
fill()
|
||
|
|
time.sleep(0.1)
|
||
|
|
|
||
|
|
main()
|