Micropython-neotrellis-multi

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche

MultiTrellis

MultiTrellis est une classe permettant de combiner plusieurs NeoTrellis en mosaïque/damier et de pouvoir accéder aux différents boutons/NeoPixels à partir d'un système de coordonnées X et Y commun.

 

L'exemple multitrellistest.py visible ci-dessous indique comment combiner plusieurs NeoTrellis.

Comme pour l'utilisation d'un NeoTrellis seul, le script une instance du bus I2C et les instances de NeoTrellis.

Une nuance cependant, les NeoTrellis sont répertoriés dans la variable trelli, une liste (un entrée par ligne) contenant des sous-listes (ayant un entrée NeoTrellis pour chaque colonne).

Chaque NeoTrellis est créé en précisant l'adresse de chaque dalle (Note: le paramètre False correspond au paramètre interrupt).

import time
from machine import I2C, Pin
from neotrellis import NeoTrellis
from neotrellis.multitrellis import MultiTrellis

i2c = I2C( 1, sda=Pin.board.GP6, scl=Pin.board.GP7 )
trelli = [
    # 1iere ligne de 2 NeoTrellis de gauche à droite
    [NeoTrellis(i2c, False, addr=0x2E), NeoTrellis(i2c, False, addr=0x2F)], # 2 colonnes
    ]

Une fois la structure des dalles définie, il est possible de créer une instance MultiTrellis.

La classe MultiTrellis expose une interface similaire à celle de NeoTrellis.

Chaque appel de méthode sur MultiTrellis est réparti entre les différentes instances NeoTrellis renseignées.

trellis = MultiTrellis(trelli)
trellis.brightness = 0.5

# Définition de couleurs
OFF = (0, 0, 0)
RED = (255, 0, 0)
YELLOW = (255, 150, 0)
GREEN = (0, 255, 0)
CYAN = (0, 255, 255)
BLUE = (0, 0, 255)
PURPLE = (180, 0, 255)

Comme pour les autres exemples, une fonction de rappel sera associée à chaque bouton.

La fonction de rappel qui sera fournie à MultiTrellis doit recevoir des paramètres supplémentaires, à savoir:

  • position X,
  • position Y
  • type de flan (flan montant avec NeoTrellis.EDGE_RISING ou flan descendant avec NeoTrellis.EDGE_FALLING)
def blink(xcoord, ycoord, edge):
    # Allumer la LED sur un flan montant (quand le bouton est enfoncé)
    if edge == NeoTrellis.EDGE_RISING:
        trellis.color(xcoord, ycoord, BLUE)
    # Eteindre la LED sur flan descendant (quand le bouton est relâché)
    elif edge == NeoTrellis.EDGE_FALLING:
        trellis.color(xcoord, ycoord, OFF)

La section suivante active la détection des flans montant et descendant pour chaque bouton, associe la fonction de rappel et allume la LED (en violet).

for y in range(4):     # Lignes de 0 à 3
    for x in range(8): # Colonnes de 0 à 7
        trellis.activate_key(x, y, NeoTrellis.EDGE_RISING)
        trellis.activate_key(x, y, NeoTrellis.EDGE_FALLING)
        trellis.set_callback(x, y, blink)
        trellis.color(x, y, PURPLE)
        time.sleep(0.05)

Vient le moment d'éteindre les LEDs en fixant la couleur noir (0,0,0) .

for y in range(4):
    for x in range(8):
        trellis.color(x, y, OFF)
        time.sleep(0.05)

Enfin comme, comme dans les autres exemples, le corps du script doit appeler régulièrement la méthode trellis.sync() .

Cela permet à la bibliothèque de détecter l'état des boutons sur les différentes dalle NeoTrellis afin de générer les différents événements.

while True:
    trellis.sync()
    # Intervalle minimum de 17ms entre deux requêtes
    time.sleep(0.02)

Traduction augmentée réalisée par Meurisse. D pour shop.MCHobby.be - Licence CC-BY-SA.


MCHobby investit du temps et de l'argent dans la réalisation de traduction et/ou documentation. C'est un travail long et fastidieux réalisé dans l'esprit Open-Source... donc gratuit et librement accessible.
SI vous aimez nos traductions et documentations ALORS aidez nous à en produire plus en achetant vos produits chez MCHobby.