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.