color_test.py

../_images/color_test.jpg

Test color with gradients.

Draws Red, Green and Blues gradients on the display and writes the color name centered in the gradient. Then repeatedly draws a borders around the display in the same colors.

Note

This example requires the following modules:

  • st7789py

  • tft_config

  • vga2_bold_16x32

 1"""
 2color_test.py
 3=============
 4
 5.. figure:: ../_static/color_test.jpg
 6    :align: center
 7
 8    Test color with gradients.
 9
10Draws Red, Green and Blues gradients on the display and writes the color name centered in the
11gradient.  Then repeatedly draws a borders around the display in the same colors.
12
13.. note:: This example requires the following modules:
14
15  .. hlist::
16    :columns: 3
17
18    - `st7789py`
19    - `tft_config`
20    - `vga2_bold_16x32`
21
22"""
23
24import random
25from machine import Pin, SoftSPI
26from time import sleep
27import st7789py as st7789
28import tft_config
29import vga2_bold_16x32 as font
30
31
32def interpolate(value1, value2, position, total_range):
33    """
34    Perform linear interpolation between two values based on a position within a range.
35
36    Args:
37        value1 (float): Starting value.
38        value2 (float): Ending value.
39        position (float): Current position within the range.
40        total_range (float): Total range of positions.
41
42    Returns:
43        float: Interpolated value.
44    """
45    return value1 + (value2 - value1) * position / total_range
46
47
48def main():
49    tft = tft_config.config(tft_config.WIDE)
50
51    names = ["Red", "Green", "Blue"]
52
53    color_values = (255, 255, 255)
54    height_division = tft.height // len(color_values)
55    for i, color_value in enumerate(color_values):
56        start_row = i * height_division
57        end_row = (i + 1) * height_division
58        for row in range(start_row, end_row):
59            rgb_color = [0 if idx != i else int(interpolate(0, color_value, row - start_row, height_division)) for idx in range(3)]
60            color = st7789.color565(rgb_color)
61            tft.hline(0, row, tft.width, color)
62
63        name = names[i]
64        text_x = (tft.width - font.WIDTH * len(name)) // 2
65        text_y = start_row + (end_row - start_row - font.HEIGHT) // 2
66        tft.text(font, name, text_x, text_y, st7789.WHITE, color)
67
68    while True:
69        for color in [st7789.RED, st7789.GREEN, st7789.BLUE]:
70            for x in range(tft.width):
71                tft.pixel(x, 0, color)
72                tft.pixel(x, tft.height - 1, color)
73
74            for y in range(tft.height):
75                tft.pixel(0 , y, color)
76                tft.pixel(tft.width - 1, y, color)
77
78            sleep(1)
79main()