-
Notifications
You must be signed in to change notification settings - Fork 0
Display
En el módulo display/abstract_display.py se encuentra la clase abstracta Display, Fonts y colors que funcionan de interfaz para poder añadir cualquier tipo de pantalla al sistema.
Al crear una nueva pantalla se deben programar estas 3 clases.
Se debe asignar un valor a cada uno de los colores de la clase. En caso de que la pantalla no pueda reproducirlos todos, se debe poner un valor por defecto de color. Por ejemplo, si la pantalla solo reproduce blancos y negros, se puede asignar el color blanco al blanco y para todos los demás el valor de negro.
class Colors:
BLACK = None
BLUE = None
RED = None
GREEN = None
CYAN = None
MAGENTA = None
YELLOW = None
WHITE = NoneDefinición de colores para una pantalla concreta
colors = Colors()
colors.BLACK = st7789.BLACK
colors.BLUE = st7789.BLUE
colors.RED = st7789.RED
colors.GREEN = st7789.GREEN
colors.CYAN = st7789.CYAN
colors.MAGENTA = st7789.MAGENTA
colors.YELLOW = st7789.YELLOW
colors.WHITE = st7789.WHITESe definen 4 tipos diferentes de fuentes. Al igual que los colores se deben de asignar un valor a todas. Las fuentes son tuplas de 2 elementos. El primero es la fuente a utilizar, que dependiendo de cada pantalla puede estar contenida en un archivo diferente. El segundo es una tupla que indica el tamaño de cada caracter --> (ancho, alto).
class Fonts:
FONT1 = None
FONT2 = None
FONT3 = None
FONT4 = NoneDefinición de fuentes para pantalla concreta (ST7789).
import vga1_8x8 as font1
import vga1_8x16 as font2
import vga1_bold_16x16 as font3
import vga1_bold_16x32 as font4
fonts = Fonts()
fonts.FONT1 = (font1, (8,8))
fonts.FONT2 = (font2, (8,16))
fonts.FONT3 = (font3, (16,16))
fonts.FONT4 = (font4, (16,32))El constructor recibe las clases colores y fuentes a utilizar.
Devuelve el sistema al que esta asignado o, None en su defecto.
Asigna un sistema a la pantalla
Devuelve la vista actual o, en su defecto None.
Agina una nueva vista a la pantalla
Refresca la vista actual
Limpia todos los elementos de la pantalla
Dibuja el pixel en la posición (x,y) del color seleccionado.
Dibuja el texto dado empezando en la posición (x,y) con un tamaño de fuente, color y color de fondo determinados
Dibuja un rectangulo sólido empezando en la posición (x,y) con las dimensiones especificadas
Dibuja una imágen en formato jpg, empezando en la posición (x,y). La imagen se pasa como una ruta en el sistema de archivos.
Apaga la pantalla para no consumir batería.
Enciende la pantalla
Cualquier pantalla debe implementar las funciones abstractas de la clase para poder funcionar correctamente.
from display.abstract_display import Display, Colors, Fonts
from machine import SoftSPI, Pin
import st7789
from system import System_Manager
import vga1_8x8 as font1
import vga1_8x16 as font2
import vga1_bold_16x16 as font3
import vga1_bold_16x32 as font4
WIDTH = 135
HEIGHT = 240
class Color_Display(Display):
def __init__(self, system_manager: System_Manager = None):
# Define colors
colors = Colors()
colors.BLACK = st7789.BLACK
colors.BLUE = st7789.BLUE
colors.RED = st7789.RED
colors.GREEN = st7789.GREEN
colors.CYAN = st7789.CYAN
colors.MAGENTA = st7789.MAGENTA
colors.YELLOW = st7789.YELLOW
colors.WHITE = st7789.WHITE
# Define fonts, --> (Font, (width, height))
fonts = Fonts()
fonts.FONT1 = (font1, (8,8))
fonts.FONT2 = (font2, (8,16))
fonts.FONT3 = (font3, (16,16))
fonts.FONT4 = (font4, (16,32))
super().__init__(colors, fonts)
spi = SoftSPI(
baudrate=40000000,
polarity=1,
phase=0,
sck=Pin(18),
mosi=Pin(19),
miso=Pin(13))
self.__tft = st7789.ST7789(
spi,
WIDTH, # width
HEIGHT, # height
reset=Pin(23, Pin.OUT),
cs=Pin(5, Pin.OUT),
dc=Pin(16, Pin.OUT),
backlight=Pin(4, Pin.OUT),
rotation=1)
self.__tft.init()
self.__tft.fill(st7789.BLACK)
def get_width(self) -> int:
return self.__tft.width()
def get_height(self) -> int:
return self.__tft.height()
def clean(self):
self.__tft.fill(st7789.BLACK)
def draw_pixel(self, x: int, y: int, color: Colors):
self.__tft.pixel(x, y, color)
def print_text(self, text: str, x: int, y: int, font: Fonts, font_color: Colors, bg_color: Colors):
self.__tft.text(font[0], text, x, y, font_color, bg_color)
def draw_fill_rect(self, x: int, y: int, width: int, height: int, color: Colors):
self.__tft.fill_rect(x, y, width, height, color)
def draw_jpg(self, x: int, y: int, filename: str):
self.__tft.jpg(filename, x, y, st7789.SLOW)
def power_off(self):
self.__tft.off()
def power_on(self):
self.__tft.on()