Creació de jocs amb PyBadge

Programació Dades pràctiques     Recursos CITCEA
Tutorial Exemples Projectes   Inici

Ús de NeoPixels

El NeoPixel és un LED RGB (és a dir, un LED tricolor) que incorpora un circuit intern que permet controlar si està encès o no i el seu color.

NeoPixel

El control dels NeoPixels es fa des d'una única sortida digital del microcontrolador de manera que deixa totes les altres potes lliures per a altres funcions. A més, els NeoPixels es poden posar en cadena (connectant la sortida de l'un amb l'entrada del següent) i això permet controlar individualment un nombre elevat de LED fent servir una única sortida.

Per fer servir els NeoPixels cal la biblioteca neopixel. A la part inicial, hem de carregar la biblioteca corresponent:

import neopixel

Hem de crear un objecte NeoPixel per a la cadena de LED. Considerem que formen una cadena tots els que estan connectats un després de l'altra a una mateixa sortida del microcontrolador. En el nostre cas, tots els de la placa (un o cinc) ho estaran.

cadena = neopixel.NeoPixel(board.NEOPIXEL, 5, brightness=0.3)  # Cinc NeoPixel al 30 % de lluminositat

En aquest cas l'objecte s'anomena cadena i correspon a un conjunt de cinc NeoPixels (segon paràmetre dins el parèntesi) connectats a la pota NEOPIXEL del microcontrolador (primer paràmetre dins el parèntesi). El tercer paràmetre ens permet ajustar la lluminositat amb un valor entre 0 i 1.

Per encendre un LED d'un determinat color podem fer servir la instrucció següent:

    cadena[0] = (255, 0, 0)    # Pixel 0 vermell

Els tres paràmetres són la codificació RGB del color, és a dir les quantitats de vermell, verd i blau desitjades (valors entre 0, apagat, i 255).

Aquest mètode és senzill però implica anar definint els colors cada cop a base de tres nombres. Hi ha una altra manera més compacta que consisteix en definir un tuple que guardi un color concret.

groc = (255, 255, 0)
    cadena[0] = groc           # Pixel 0 groc

El programa següent fa una seqüència de colors sobre dos dels NeoPixel de la placa. Si la placa només en té un, aquest farà la seqüència corresponent a l'índex 0.

import board
import neopixel
import time
cadena = neopixel.NeoPixel(board.NEOPIXEL, 5, brightness=0.3)  # Dos NeoPixel a la pota D2
groc = (255, 255, 0)
while True:
    cadena[0] = (255, 0, 0)    # Pixel 0 vermell
    cadena[1] = (0, 255, 0)    # Pixel 1 verd
    time.sleep(1)
    cadena[0] = (0, 255, 0)    # Pixel 0 verd
    cadena[1] = (0, 0, 255)    # Pixel 1 blau
    time.sleep(1)
    cadena[0] = (0, 0, 255)    # Pixel 0 blau
    cadena[1] = groc           # Pixel 1 groc
    time.sleep(1)
    cadena[0] = groc           # Pixel 0 groc
    cadena[1] = (255, 0, 0)    # Pixel 1 vermell
    time.sleep(1)

En qualsevol moment, al llarg del programa, podem modificar la brillantor:

    cadena.brightness = 0.8

Si volem posar tots els NeoPixel del mateix color podem fer servir la funció fill, com en aquests casos:

    cadena.fill((255, 0, 0))
    cadena.fill(groc)

En CircuitPithon, en principi, els NeoPixel s'actualitzen en el mateix moment en el que se'ls canvia el color. Això es pot desactivar afegint una opció quan es defineix l'objecte:

cadena = neopixel.NeoPixel(board.D2, 2, brightness=0.3, auto_write=False)

Llavors podem controlar quan s'envia el color als NeoPixel amb les funcions write o show, totes dues fan el mateix.

while True:
    cadena[0] = (255, 0, 0)    # Pixel 0 vermell
    cadena.write()
    time.sleep(1)
    cadena[0] = (0, 255, 0)    # Pixel 0 verd
    cadena.show()
    time.sleep(1)

Això permet ajustar els colors en llocs diferents del programa però fer que es mostrin tots de cop.

 

 

 

 

 

 

 

 

 

 

Licencia de Creative Commons
Esta obra de Oriol Boix está licenciada bajo una licencia no importada Creative Commons Reconocimiento-NoComercial-SinObraDerivada 3.0.