Ecrire en Python sur l'écran de la brique EV3
La brique graphique d'action Affichage proposée par le logiciel de programmation des robots livré propose des déclinaisons permettant d'écrire sur l'écran LCD de la brique EV3.
La bibliothèque ev3dev2 propose des fonctions équivalentes dans la classe Display.
Méthodes d'écriture de la classe Display
Ces méthodes permettre d'écrire une chaîne de caractères sur l'écran. Elles correspondent aux variantes des briques graphiques d'affichage ci-dessus. Elle sont déclarées comme suit :
text_pixels(text, clear_screen=True, x=0, y=0, text_color='black', font=None)
text_grid(text, clear_screen=True, x=0, y=0, text_color='black', font=None)
Les paramètres passés correspondent aux paramètres des briques graphiques :text_pixels(text, clear_screen=True, x=0, y=0, text_color='black', font=None)
text_grid(text, clear_screen=True, x=0, y=0, text_color='black', font=None)
- text est la chaîne de caractères à afficher.
- clear_screen indique si l'écran doit être effacé avant l'affichage. Par défaut, ce paramètre est initialisé à True. Mais, la plupart du temps, l'affichage nécessite l'invocation de plusieurs méthodes. C'est pourquoi, il vaut mieux préciser la valeur False pour que chaque méthode invoquée n'efface pas ce qu'a fait la précédente. Quitte à utiliser la méthode clear() pour effacer l'écran au début du dessin.
- x, y est la position du coin supérieur gauche du texte à afficher.
- text_color désigne la couleur du texte. Cette couleur ne peut prendre que deux valeurs 'black' ou 'white'.
- font désigne la police de caractères à utiliser. Si aucune police n'est passée en paramètre, une police par défaut est utilisée.
Les deux méthodes fonctionnent exactement de la même façon. Le texte passé en paramètre est affiché aux coordonnées x et y, cette position correspondant au coin supérieur gauche du texte affiché. La différence entre les deux réside dans l'unité de mesure utilisée pour les coordonnées. Pour text_pixels(), la position est exprimée en pixels à partir du coin supérieur gauche de l'écran. Pour text_grid(), l'écran est divisé en une grille de 22 x 12 cellules, chaque cellule faisant 8 x 12 pixels. Dans ce cas, x correspond au rang de la colonne de la grille et y au rang de la ligne de la grille. text_pixels() est donc plus précis pour positionner du texte. Mais text_grid() facilite l'affichage de tableaux.
Remarque sur l'usage des couleurs
L'écran LCD de la brique EV3 est monochrome. C'est à dire qu'il ne peut afficher que du noir ou du blanc. Ce sont d'ailleurs les deux seules couleurs proposées par les briques graphiques du logiciel de programmation Lego MindStorm : Vrai ('white') et Faux ('black').
La librairie ev3dev2 s'appuie sur la bibliothèque Python PIL. Celle-ci accepte toutes les couleurs comme elles sont exprimées en HTML. L'usage de la valeur 'red', par exemple, dans un paramètre de couleur, ne provoque pas d'erreur. La couleur est traduite dans une nuance de gris.
Exemples d'utilisation des méthodes d'écriture
Utilisation de la méthode text_pixels()
Cet exemple affiche le texte « Joyeux Noël ! » sur plusieurs lignes, chacune d'elles étant décalée en x et y de 10 pixels.
import time
from ev3dev2.display import Display
SCREEN = Display()
def write_pixels(text):
SCREEN.clear()
for x in range(0,100, 10):
SCREEN.text_pixels(text, clear_screen=False, x=x, y=x)
SCREEN.update()
#
#
##############################################################################
if __name__ == '__main__':
write_pixels("Joyeux Noël !")
time.sleep(10)
from ev3dev2.display import Display
SCREEN = Display()
def write_pixels(text):
SCREEN.clear()
for x in range(0,100, 10):
SCREEN.text_pixels(text, clear_screen=False, x=x, y=x)
SCREEN.update()
#
#
##############################################################################
if __name__ == '__main__':
write_pixels("Joyeux Noël !")
time.sleep(10)
Utilisation de la méthode text_grid()
Cet exemple affiche le texte « Bonne année 2020 ! » sur plusieurs lignes, chacune d'elles étant décalée en x et y de une seule cellule.
import time
from ev3dev2.display import Display
SCREEN = Display()
def write_grid(text):
SCREEN.clear()
for x in range(0,10):
SCREEN.text_grid(text, clear_screen=False, x=x, y=x)
SCREEN.update()
#
#
##############################################################################
if __name__ == '__main__':
write_grid("Bonne année 2020 !")
time.sleep(10)
from ev3dev2.display import Display
SCREEN = Display()
def write_grid(text):
SCREEN.clear()
for x in range(0,10):
SCREEN.text_grid(text, clear_screen=False, x=x, y=x)
SCREEN.update()
#
#
##############################################################################
if __name__ == '__main__':
write_grid("Bonne année 2020 !")
time.sleep(10)
Utilisation des polices de caractères
L'usage des polices de caractères est légèrement plus complexe. En effet, pour qu'une police puisse être utilisée, elle doit être chargée auparavant en invoquant la méthode load() du module fonts de la bibliothèque ev3dev2. L'exemple ci dessous affiche plusieurs lignes en utilisant les tailles proposées par la police luBS. Comme l'indique la documentation de référence de ev3dev2, les tailles possibles de cette police sont 10, 12, 14, 18, 19 et 24. Pour chaque taille, la police porte un nom différent (luBS10 à luBS24).
import time
from ev3dev2.display import Display
import ev3dev2.fonts as fonts
SCREEN = Display()
FONT_SIZES = [10, 12, 14, 18, 19, 24]
def write_font(text):
SCREEN.clear()
y = 0
for size in FONT_SIZES:
name = "luBS{0}".format(size)
SCREEN.text_pixels(text, clear_screen=False, x=0, y=y, font=fonts.load(name))
y += size
SCREEN.update()
#
#
##############################################################################
if __name__ == '__main__':
write_font("Joyeux Noël !")
time.sleep(10)
from ev3dev2.display import Display
import ev3dev2.fonts as fonts
SCREEN = Display()
FONT_SIZES = [10, 12, 14, 18, 19, 24]
def write_font(text):
SCREEN.clear()
y = 0
for size in FONT_SIZES:
name = "luBS{0}".format(size)
SCREEN.text_pixels(text, clear_screen=False, x=0, y=y, font=fonts.load(name))
y += size
SCREEN.update()
#
#
##############################################################################
if __name__ == '__main__':
write_font("Joyeux Noël !")
time.sleep(10)
Commentaires
Enregistrer un commentaire