diff --git a/1 - Code/hl3.py b/1 - Code/hl3.py index 1fbe32d7be04d2caaba9b8c324add55b61d3b5ca..6942bb7f38d2014ab7110eeea928c04781988c8e 100644 --- a/1 - Code/hl3.py +++ b/1 - Code/hl3.py @@ -3,12 +3,14 @@ from neopixel import NeoPixel from rp2 import PIO, StateMachine, asm_pio import utime import framebuf +import gc nb_line = 8 nb_row = 8 gpio_neopixel = 0 np = NeoPixel(Pin(gpio_neopixel, Pin.OUT), nb_line*nb_row) +fb = framebuf.FrameBuffer(bytearray(nb_line * nb_row * 2), nb_row, nb_line, framebuf.RGB565) class Color: BLACK = (0, 0, 0) @@ -45,98 +47,22 @@ class Color: ORANGE = (255, 128, 0) ORANGE_YELLOW = (255, 204, 0) +COLOR_MAP = { + 'R': Color.RED, + 'G': Color.GREEN, + 'B': Color.BLUE, + 'C': Color.CYAN, + 'M': Color.MAGENTA, + 'Y': Color.YELLOW, + 'W': Color.WHITE, + '.': Color.BLACK +} + class Direction: NORTH = 1 SOUTH = 2 EAST = 4 WEST = 8 - -# use https://goo.gl/gGYfJV to add new chars -__TEXT_DICT = { - ' ': [], - 'A': [14, 17, 17, 31, 17, 17, 17], - 'B': [15, 17, 17, 31, 17, 17, 15], - 'C': [14, 17, 1, 1, 1, 17, 14], - 'D': [15, 17, 17, 17, 17, 17, 15], - 'E': [31, 1, 1, 15, 1, 1, 31], - 'F': [31, 1, 1, 15, 1, 1, 1], - 'G': [14, 17, 1, 1, 25, 17, 30], - 'H': [17, 17, 17, 31, 17, 17, 17], - 'I': [31, 4, 4, 4, 4, 4, 31], - 'J': [31, 16, 16, 16, 16, 17, 14], - 'K': [17, 17, 9, 7, 9, 17, 17], - 'L': [1, 1, 1, 1, 1, 1, 31], - 'M': [17, 27, 27, 21, 21, 17, 17], - 'N': [17, 19, 21, 21, 25, 17, 17], - 'O': [14, 17, 17, 17, 17, 17, 14], - 'P': [15, 17, 17, 17, 15, 1, 1], - 'Q': [14, 17, 17, 17, 17, 21, 14, 4, 8], - 'R': [15, 17, 17, 15, 9, 17, 17], - 'S': [30, 1, 1, 14, 16, 16, 15], - 'T': [31, 4, 4, 4, 4, 4, 4], - 'U': [17, 17, 17, 17, 17, 17, 14], - 'V': [17, 17, 17, 17, 10, 10, 4], - 'W': [17, 17, 21, 21, 21, 10, 10], - 'X': [17, 17, 10, 4, 10, 17, 17], - 'Y': [17, 10, 4, 4, 4, 4, 4], - 'Z': [31, 16, 8, 4, 2, 1, 31], - 'a': [0, 0, 14, 16, 30, 17, 30], - 'b': [1, 1, 13, 19, 17, 17, 15], - 'c': [0, 0, 14, 17, 1, 17, 14], - 'd': [16, 16, 30, 17, 17, 17, 14], - 'e': [0, 0, 14, 17, 31, 1, 30], - 'f': [24, 4, 30, 4, 4, 4, 31], - 'g': [0, 0, 30, 17, 17, 25, 22, 16, 14], - 'h': [1, 1, 15, 17, 17, 17, 17], - 'i': [4, 0, 7, 4, 4, 4, 31], - 'j': [16, 0, 28, 16, 16, 16, 16, 17, 14], - 'k': [1, 1, 9, 9, 7, 9, 17], - 'l': [7, 4, 4, 4, 4, 4, 31], - 'm': [0, 0, 21, 31, 21, 21, 21], - 'n': [0, 0, 13, 19, 17, 17, 17], - 'o': [0, 0, 14, 17, 17, 17, 14], - 'p': [0, 0, 13, 19, 17, 17, 15, 1, 1], - 'q': [0, 0, 30, 17, 17, 25, 22, 16, 16], - 'r': [0, 0, 27, 6, 2, 2, 15], - 's': [0, 0, 30, 1, 14, 16, 15], - 't': [0, 4, 31, 4, 4, 4, 24], - 'u': [0, 0, 17, 17, 17, 25, 22], - 'v': [0, 0, 17, 17, 10, 10, 4], - 'w': [0, 0, 17, 21, 21, 10, 10], - 'x': [0, 0, 17, 17, 14, 17, 17], - 'y': [0, 0, 17, 17, 10, 10, 4, 4, 3], - 'z': [0, 0, 31, 8, 4, 2, 31], - '0': [14, 25, 21, 21, 21, 19, 14], - '1': [4, 7, 4, 4, 4, 4, 31], - '2': [14, 17, 16, 14, 1, 1, 31], - '3': [14, 17, 16, 14, 16, 17, 14], - '4': [8, 12, 10, 9, 31, 8, 8], - '5': [31, 1, 1, 15, 16, 16, 15], - '6': [12, 2, 1, 15, 17, 17, 14], - '7': [31, 16, 8, 4, 2, 2, 2], - '8': [14, 17, 17, 14, 17, 17, 14], - '9': [14, 17, 17, 30, 16, 8, 6], - '.': [0, 0, 0, 0, 0, 4, 4], - ',': [0, 0, 0, 0, 0, 4, 4, 2], - ';': [0, 0, 4, 4, 0, 4, 4, 2], - '?': [14, 17, 16, 12, 0, 4, 4], - '!': [4, 4, 4, 4, 0, 4, 4], - '-': [0, 0, 0, 0, 14], - '_': [0, 0, 0, 0, 0, 0, 31], - '*': [0, 0, 10, 4, 10], - '+': [0, 0, 4, 4, 31, 4, 4], - '/': [16, 16, 8, 4, 4, 2, 2], - '\\': [2, 2, 4, 8, 8, 16, 16], - '<': [0, 0, 8, 4, 2, 4, 8], - '>': [0, 0, 2, 4, 8, 4, 2], - '#': [10, 10, 31, 10, 31, 10, 10], - '=': [0, 0, 0, 31, 0, 31], - '\'': [8, 8, 4], - '%': [11, 11, 4, 2, 2, 13, 13, 0, 0], - '&': [6, 1, 1, 6, 5, 9, 22, 0, 0], - '@': [14, 17, 29, 27, 31, 1, 30, 0, 0], - '$': [4, 30, 5, 14, 20, 15, 4, 0, 0], -} def col(r, g, b): return (r, g, b) @@ -237,6 +163,23 @@ class Matrix: return hex_Color +def set_img(img): + + if not img: + raise ValueError("Image cannot be empty") + + arr = [COLOR_MAP[c] for c in img if c in COLOR_MAP] + + if len(arr) < nb_line * nb_row: + raise ValueError(f"Image too small for screen ({len(arr)} pixels for a {nb_line}x{nb_row} screen)") + elif len(arr) > nb_line * nb_row: + raise ValueError(f"Image too large for screen ({len(arr)} pixels for a {nb_line}x{nb_row} screen)") + + for y in range(nb_line): + for x in range(nb_row): + Matrix.set_led(x, y, arr[y * nb_row + x]) + + def rgb_to_rgb565(r, g, b): return ((r & 0xF8) << 8) | ((g & 0xFC) << 3) | (b >> 3) @@ -255,12 +198,12 @@ def framebuffer_to_neopixel(fb): def show_text(text, color, speed=0.1): color_rgb565 = rgb_to_rgb565(*color) - fb = framebuf.FrameBuffer(bytearray(nb_line * nb_row * 2), nb_row, nb_line, framebuf.RGB565) - for offset in range(len(text) * 8): + for offset in range(nb_row + (len(text) * 8)): fb.fill(0) - fb.text(text, -offset, 0, color_rgb565) + fb.text(text, nb_row-offset, 0, color_rgb565) framebuffer_to_neopixel(fb) + gc.collect() utime.sleep(speed) class Uart: @@ -390,7 +333,7 @@ def christmas(): period = .01 # Balles glissantes - for r in range(100): + for r in range(20): temp = [[2,5],[1,6],[0,7],[0,7],[0,7],[0,7],[1,6],[2,5]] Color = (Color * prime1) % prime2 # Horizontale et Verticale @@ -409,7 +352,7 @@ def christmas(): # Couleurs clignote period = .5 - for r in range(20): + for r in range(10): Color = (Color * prime1) % prime2 for i in range(8): for j in range(8): @@ -420,7 +363,7 @@ def christmas(): # Bleu aléatoire period = .05 - for r in range(20): + for r in range(10): Color = (Color * prime1) % prime2 for i in range(8): for j in range(8): @@ -429,7 +372,7 @@ def christmas(): # Couleurs aleatoire period = .05 - for r in range(20): + for r in range(10): Color = (Color * prime1) % prime2 for i in range(8): for j in range(8): @@ -438,7 +381,7 @@ def christmas(): # Rouge aléatoire period = .05 - for r in range(20): + for r in range(10): Color = (Color * prime1) % prime2 for i in range(8): for j in range(8): @@ -447,7 +390,7 @@ def christmas(): # Lignes period = .05 - for r in range(20): + for r in range(10): Color = (Color * prime1) % prime2 for i in range(8): Matrix.set_led(Color%8,i,Color*(i+1)*(j+11)) @@ -456,4 +399,4 @@ def christmas(): for i in range(8): Matrix.set_led(i,Color%8,Color*(i+1)*(j+11)) utime.sleep(period) - Matrix.clear(0) + Matrix.clear(0) \ No newline at end of file diff --git a/1 - Code/main.py b/1 - Code/main.py index 275030d17fce5cfb80b07d7f635f06b2b1d29424..2ef64bb1f0b49c5ef3d7b1e6dba37165dae1d926 100644 --- a/1 - Code/main.py +++ b/1 - Code/main.py @@ -1,6 +1,83 @@ from hl3 import * while True: - show_text("PiPo", Color.RED, 0.03) - utime.sleep(0.1) + set_img(""" + .RR..RR. + RRRRRRRR + RRRRRRRR + RRRRRRRR + RRRRRRRR + .RRRRRR. + ..RRRR.. + ...RR... + """) + utime.sleep(0.2) + set_img(""" + .RR..RR. + R..RR..R + RRRRRRRR + RRRRRRRR + RRRRRRRR + .RRRRRR. + ..RRRR.. + ...RR... + """) + utime.sleep(0.2) + set_img(""" + .RR..RR. + R..RR..R + R......R + RRRRRRRR + RRRRRRRR + .RRRRRR. + ..RRRR.. + ...RR... + """) + utime.sleep(0.2) + set_img(""" + .RR..RR. + R..RR..R + R......R + R......R + RRRRRRRR + .RRRRRR. + ..RRRR.. + ...RR... + """) + utime.sleep(0.2) + set_img(""" + .RR..RR. + R..RR..R + R......R + R......R + R......R + .RRRRRR. + ..RRRR.. + ...RR... + """) + utime.sleep(0.2) + set_img(""" + .RR..RR. + R..RR..R + R......R + R......R + R......R + .R....R. + ..RRRR.. + ...RR... + """) + utime.sleep(0.2) + set_img(""" + .RR..RR. + R..RR..R + R......R + R......R + R......R + .R....R. + ..R..R.. + ...RR... + """) + utime.sleep(0.2) + show_text("This is Text", Color.BLUE, 0.02) + utime.sleep(0.2) christmas() diff --git a/2 - Reports/Michael_Divia.md b/2 - Reports/Michael_Divia.md index 29bb7e3104d12e97e1465474b9c0aa276cb47743..2557a35b07e3955e3134707c32d1490f74c1422c 100644 --- a/2 - Reports/Michael_Divia.md +++ b/2 - Reports/Michael_Divia.md @@ -11,6 +11,9 @@ - [Lundi, 17 Juin 2024](#lundi-17-juin-2024) - [Mardi, 18 Juin 2024](#mardi-18-juin-2024) - [Mercredi, 19 Juin 2024](#mercredi-19-juin-2024) + - [Jeudi 20 Juin 2024](#jeudi-20-juin-2024) + - [Vendredi 21 Juin 2024](#vendredi-21-juin-2024) + - [Mardi 25 Juin 2024](#mardi-25-juin-2024) - [Creators](#creators) - [Copyright and license](#copyright-and-license) @@ -65,6 +68,12 @@ Design et impression d'une boîte. J'ai modifié la fonction d'affichage et de scrolling du texte afin d'utiliser un `FrameBuffer`. Cela accélère considérablement la vitesse de scolling. +## Mardi 25 Juin 2024 + +J'ai fini d'optimiser la fonction d'affichage et de scrolling du text. Le texte commence maintenant en dehors de l'écran et nous n'avons plus de problème de ralentissement a chaque fois que nous voulons afficher du texte. Ce problème était dû à un problème d'allocation mémoire et de garbage collection du `FrameBuffer`. + +J'ai ensuite enchaîné avec la création d'une fonction `set_img` fonctionnant comme la fonction `afficher_grille` de `hepialight2`. + # Creators **Michael Divià**