5.2.3 Piano Electrónico Simple
5.2.3.1 Resumen

En este proyecto, controlamos el altavoz de la micro:bit para reproducir diferentes tonos moviendo el joystick y presionando los botones. Mientras tanto, la matriz de LED a bordo mostrará los números correspondientes.
Al girar el joystick a la derecha se produce “Do (Tono Central C)” con la pantalla mostrando “1”; al girarlo a la izquierda se produce “Re (Tono D)” con “2”; al girarlo hacia arriba se produce “Mi (Tono E)” con “3”; al girarlo hacia abajo se produce “Fa (Tono F)” con “4”. Al presionar el botón C se produce “Sol (Tono G)” con “5”, al presionar D se produce “La (Tono A)” con “6”, E produce “Si (Tono B)” con “7”, y al presionar F se produce un “Do(Sostenido)” más alto mientras la pantalla vuelve a “1”. Hay una bonita sincronización del joystick, los botones, los tonos y la pantalla.

5.2.3.2 Conocimiento de Componentes

Altavoz de Micro:bit

La placa micro:bit cuenta con un altavoz incorporado para emitir sonidos, como risas, saludos, bostezos o expresiones de tristeza, o incluso componer una canción. Mediante programación, puede incluso generar notas individuales, melodías y ritmos, o incluso composiciones musicales, como la canción Twinkle Twinkle Little Star.

5.2.3.3 Piezas Requeridas
Placa micro:bit V2 (suministrada por el usuario) ×1 |
Smart Gamepad micro:bit (ensamblado) ×1 |
Pila AAA (suministrada por el usuario) ×4 |
|---|---|---|
|
|
|
5.2.3.4 Flujo del Código

5.2.3.5 Código de Prueba
⚠️ Tenga en cuenta que la sensibilidad del joystick se puede ajustar según sus necesidades.
Código completo:
from microbit import *
# ===================== Global Configuration & Variables =====================
# Joystick threshold for movement detection
JOYSTICK_THRESHOLD = 200
# Note frequencies (Hz) for C, D, E, F, G, A, B, High C
NOTES = {
"C": 262,
"D": 294,
"E": 330,
"F": 349,
"G": 392,
"A": 440,
"B": 494,
"HC": 523 # High C
}
# ===================== Main Loop =====================
while True:
# Read joystick X and Y values
joystick_x = pin1.read_analog()
joystick_y = pin2.read_analog()
# Clear display
display.clear()
# Determine direction and play note
if joystick_x < 512 - JOYSTICK_THRESHOLD: # Left (D note)
music.play(music.note(NOTES["D"], music.HALF), wait=False)
display.show("2")
elif joystick_x > 512 + JOYSTICK_THRESHOLD: # Right (C note)
music.play(music.note(NOTES["C"], music.HALF), wait=False)
display.show("1")
elif joystick_y < 512 - JOYSTICK_THRESHOLD: # Up (E note)
music.play(music.note(NOTES["E"], music.HALF), wait=False)
display.show("3")
elif joystick_y > 512 + JOYSTICK_THRESHOLD: # Down (F note)
music.play(music.note(NOTES["F"], music.HALF), wait=False)
display.show("4")
elif not pin13.read_digital(): # Button C (G note)
music.play(music.note(NOTES["G"], music.HALF), wait=False)
display.show("5")
elif not pin15.read_digital(): # Button D (A note)
music.play(music.note(NOTES["A"], music.HALF), wait=False)
display.show("6")
elif not pin16.read_digital(): # Button E (B note)
music.play(music.note(NOTES["B"], music.HALF), wait=False)
display.show("7")
elif not pin14.read_digital(): # Button F (High C note)
music.play(music.note(NOTES["HC"], music.HALF), wait=False)
display.show("1")
else: # No input, show initial image
display.show(Image.MUSIC_CROTCHET)
sleep(100) # Small delay to prevent flickering and rapid note re-triggering

Breve explicación:
① Inicialice la matriz de LED de la micro:bit para que muestre
.
from microbit import *
# ===================== Global Configuration & Variables =====================
# Joystick threshold for movement detection
JOYSTICK_THRESHOLD = 200
# Note frequencies (Hz) for C, D, E, F, G, A, B, High C
NOTES = {
"C": 262,
"D": 294,
"E": 330,
"F": 349,
"G": 392,
"A": 440,
"B": 494,
"HC": 523 # High C
}
② Determine la dirección del movimiento del joystick; reproduzca los tonos correspondientes durante medio tiempo en segundo plano, y la matriz de LED mostrará el número correspondiente.
# ===================== Main Loop =====================
while True:
# Read joystick X and Y values
joystick_x = pin1.read_analog()
joystick_y = pin2.read_analog()
# Clear display
display.clear()
# Determine direction and play note
if joystick_x < 512 - JOYSTICK_THRESHOLD: # Left (D note)
music.play(music.note(NOTES["D"], music.HALF), wait=False)
display.show("2")
elif joystick_x > 512 + JOYSTICK_THRESHOLD: # Right (C note)
music.play(music.note(NOTES["C"], music.HALF), wait=False)
display.show("1")
elif joystick_y < 512 - JOYSTICK_THRESHOLD: # Up (E note)
music.play(music.note(NOTES["E"], music.HALF), wait=False)
display.show("3")
elif joystick_y > 512 + JOYSTICK_THRESHOLD: # Down (F note)
music.play(music.note(NOTES["F"], music.HALF), wait=False)
display.show("4")
elif not pin13.read_digital(): # Button C (G note)
music.play(music.note(NOTES["G"], music.HALF), wait=False)
display.show("5")
elif not pin15.read_digital(): # Button D (A note)
music.play(music.note(NOTES["A"], music.HALF), wait=False)
display.show("6")
elif not pin16.read_digital(): # Button E (B note)
music.play(music.note(NOTES["B"], music.HALF), wait=False)
display.show("7")
elif not pin14.read_digital(): # Button F (High C note)
music.play(music.note(NOTES["HC"], music.HALF), wait=False)
display.show("1")
else: # No input, show initial image
display.show(Image.MUSIC_CROTCHET)
sleep(100) # Small delay to prevent flickering and rapid note re-triggering
③ Compruebe si se presiona un botón, y reproduzca el tono correspondiente durante medio tiempo en segundo plano, y la matriz de LED mostrará el número correspondiente.

5.2.3.6 Resultado de la Prueba

Después de grabar el código, inserte la placa micro:bit en la ranura del gamepad (pilas instaladas), y active el interruptor a “ON”. La matriz de LED mostrará “
” primero.
Al girar el joystick a la derecha se produce “Do (Tono Central C)” con la pantalla mostrando “1”; al girarlo a la izquierda se produce “Re (Tono D)” con “2”; al girarlo hacia arriba se produce “Mi (Tono E)” con “3”; al girarlo hacia abajo se produce “Fa (Tono F)” con “4”. Al presionar el botón C se produce “Sol (Tono G)” con “5”, al presionar D se produce “La (Tono A)” con “6”, E produce “Si (Tono B)” con “7”, y al presionar F se produce un “Do(Sostenido)” más alto mientras la pantalla vuelve a “1”.
¡Ha construido el piano electrónico simple!

Consejo: Si no hay respuesta en la placa, presione el botón de reinicio en la parte posterior de la placa micro:bit.



