| Per començar | Elements d'entrada | Programació CircuitPython | Recursos CITCEA | |
| Elements no electrònics | Elements de sortida | Programació Arduino | ||
| Projectes | Elements de control | Dades pràctiques | Inici | 
Es tracta d'un guant en el que la punta de cada dit té un polsador de roba. Quan es pica amb el dit sobre una superfície toca la nota corresponent a aquell dit. Una segona funció del guant és aprendre a tocar el piano. En aquest cas es carrega un fitxer amb les dades de la melodia que es vol tocar i s'aniran encenent els LED situats a cada dit per indicar a l'usuari les notes que ha de tocar i durant quan temps.
L'interruptor de la placa és el que permet seleccionar entre els dos modes de funcionament. Els polsadors de la placa serveixen per variar el volum del so i els LED de la placa ens indiquen el nivell actual del volum.
La llista de materials principals és la següent:
1 Placa Circuit Playground Express
5 NeoPixel
1 Connector jack femella de 3 mm
Les figures següents mostren el resultat final.
 
           
El fitxer d'aprenentatge s'ha de gravar, al disc virtual que correspon a la placa, amb el nom song.txt i tindrà un contingut similar a aquest:
DO,1 RE,2 SOL,1 S,1 FA,1 RE,1 SOL,1 S,1 DO,2 RE,1
Els valors corresponen a la durada de cada nota i la lletra S indica un silenci.
A continuació tenim el llistat del programa:
import board import digitalio import time import neopixel import audioio import audio_lib
altaveu = neopixel.NeoPixel(board.D8, 11, brightness=0.8) button_a = digitalio.DigitalInOut(board.BUTTON_A) button_a.direction = digitalio.Direction.INPUT button_a.pull = digitalio.Pull.DOWN button_b = digitalio.DigitalInOut(board.BUTTON_B) button_b.direction = digitalio.Direction.INPUT button_b.pull = digitalio.Pull.DOWN switch = digitalio.DigitalInOut(board.SLIDE_SWITCH) switch.direction = digitalio.Direction.INPUT switch.pull = digitalio.Pull.UP cadena = neopixel.NeoPixel(board.A6, 5, brightness=0.8) # neopixels t1 = digitalio.DigitalInOut(board.A3) #dit polze t1.direction = digitalio.Direction.INPUT t1.pull = digitalio.Pull.DOWN #Pull.DOWN pq està connectat a 3.3V t2 = digitalio.DigitalInOut(board.A2) #dit index t2.direction = digitalio.Direction.INPUT t2.pull = digitalio.Pull.DOWN t3 = digitalio.DigitalInOut(board.A1) #dit del mig t3.direction = digitalio.Direction.INPUT t3.pull = digitalio.Pull.DOWN t4 = digitalio.DigitalInOut(board.A4) #dit anular t4.direction = digitalio.Direction.INPUT t4.pull = digitalio.Pull.DOWN t5 = digitalio.DigitalInOut(board.A5) #dit petit t5.direction = digitalio.Direction.INPUT t5.pull = digitalio.Pull.DOWN speaker = digitalio.DigitalInOut(board.SPEAKER_ENABLE) speaker.direction = digitalio.Direction.OUTPUT speaker.value = True sons = audioio.AudioOut(board.SPEAKER)
do=262 re=294 mi=330 fa=349 sol=392 temps=[0.25,0.5,1]
with open("song.txt", "r") as file:
    l=[]
    for linia in file:
        linia=linia.strip()
        l.append(linia.split(','))
vol=0.1
i=0
para=0
while para<1:
    #MODE LLIURE
    if not switch.value:
        if t1.value:
            for n in range(5):
                cadena[n]=(0, 0, 0)
            cadena[4]=(0, 0, 255)
            so = audio_lib.nota(do,vol)
            sons.play(so, loop=True)
            time.sleep(0.5)
        if t2.value:
            for n in range(5):
                cadena[n]=(0, 0, 0)
            cadena[3]=(0, 0, 255)
            so = audio_lib.nota(re,vol)
            sons.play(so, loop=True)
            time.sleep(0.5)
        if t3.value:
            for n in range(5):
                cadena[n]=(0, 0, 0)
            cadena[2]=(0, 0, 255)
            so = audio_lib.nota(mi,vol)
            sons.play(so, loop=True)
            time.sleep(0.5)
        if t4.value:
            for n in range(5):
                cadena[n]=(0, 0, 0)
            cadena[1]=(0, 0, 255)
            so = audio_lib.nota(fa,vol)
            sons.play(so, loop=True)
            time.sleep(0.5)
        if t5.value:
            for n in range(5):
                cadena[n]=(0, 0, 0)
            cadena[0]=(0, 0, 255)
            so = audio_lib.nota(sol,vol)
            sons.play(so, loop=True)
            time.sleep(0.5)
        else:
            sons.stop()
            for n in range(5):
                cadena[n]=(0, 0, 0)
    if switch.value:
        for notes,temps in l:
            if notes=='DO':
                while not t1.value:
                    cadena[4]=(255,255,255)
                if t1.value:
                    so = audio_lib.nota(do,vol)
                    sons.play(so, loop=True)
                    time.sleep(float(temps))
                    sons.stop()
                    cadena[4]=(0,0,0)
            if notes=='RE':
                while not t2.value:
                    cadena[3]=(255,255,255)
                if t2.value:
                    so = audio_lib.nota(re,vol)
                    sons.play(so, loop=True)
                    time.sleep(float(temps))
                    sons.stop()
                    cadena[3]=(0,0,0)
            if notes=='MI':
                while not t3.value:
                    cadena[2]=(255,255,255)
                if t3.value:
                    so = audio_lib.nota(mi,vol)
                    sons.play(so, loop=True)
                    time.sleep(float(temps))
                    sons.stop()
                    cadena[2]=(0,0,0)
            if notes=='FA':
                while not t4.value:
                    cadena[1]=(255,255,255)
                if t4.value:
                    so = audio_lib.nota(fa,vol)
                    sons.play(so, loop=True)
                    time.sleep(float(temps))
                    sons.stop()
                    cadena[1]=(0,0,0)
            if notes=='SOL':
                while not t5.value:
                    cadena[0]=(255,255,255)
                if t5.value:
                    so = audio_lib.nota(sol,vol)
                    sons.play(so, loop=True)
                    time.sleep(float(temps))
                    sons.stop()
                    cadena[0]=(0,0,0)
            if notes=='S':
                time.sleep(float(temps))
            else:
                pass
            para=para+1
    #VOLUM
    if button_b.value:
        if i==9:
            pass
        else:
            k=i
            i=i+1
    if button_a.value:
        if i==0:
            pass
        else:
            i=i-1
    vol=i*0.1+0.1
    altaveu[i+1]=(0,0,0)
    altaveu[i]=(87,35,100)
    altaveu.show()
    time.sleep(0.2)
En aquest web, les fotografies marcades amb [AF] són del web d'Adafruit, les marcades amb [SF] del web d'Sparkfun i les marcades amb [AU] del web d'Arduino.

Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.