🎯 Tu misión
Comunicar dos placas por un cable para que se manden un mensaje de 10 valores: quien
envía lo "canta" primero con luz y música, lo transmite por el cable, y la otra nave lo
recibe y lo repite igualito. Todo con la misma máquina de estados del Laboratorio 6.
🎨 Ficha técnica (valores exactos)
Los 10 colores (arreglo colores, uno por cada valor):
Están ordenados para que valores vecinos salgan de colores bien distintos (no un
arcoíris que va cambiando de a poquito):
| valor | color | RGB | valor | color | RGB | |
|---|---|---|---|---|---|---|
| 0 | 🔴 rojo | (255, 0, 0) |
5 | 🩵 cian | (0, 255, 255) |
|
| 1 | 🟢 verde | (51, 255, 0) |
6 | 🟣 morado | (204, 0, 255) |
|
| 2 | 🔵 azul | (0, 102, 255) |
7 | 🟠 naranja | (255, 153, 0) |
|
| 3 | 🩷 rosa | (255, 0, 153) |
8 | 💚 esmeralda | (0, 255, 102) |
|
| 4 | 🟡 limón | (204, 255, 0) |
9 | 💙 añil | (51, 0, 255) |
Las 10 notas (arreglo notas, do re mi fa sol la si + do re mi de la siguiente octava):
| valor | nota | Hz | valor | nota | Hz | |
|---|---|---|---|---|---|---|
| 0 | do | 262 |
5 | la | 440 |
|
| 1 | re | 294 |
6 | si | 494 |
|
| 2 | mi | 330 |
7 | do↑ | 523 |
|
| 3 | fa | 349 |
8 | re↑ | 587 |
|
| 4 | sol | 392 |
9 | mi↑ | 659 |
Otros valores: Brillo = 0.2 · Tiempo por LED/nota = 0.5 s · Valores por mensaje = 10
(cada uno del 0 al 9) · Marcas del protocolo: Start = 170, End = 85.
🧠 La idea: la misma máquina de estados del Lab 6
Esto es el proyecto final del Laboratorio 6, pero en vez de mandar un color, las placas
se mandan un mensaje de 10 valores que suena como una pequeña melodía. La máquina es
una sola, igual en las dos placas, con cuatro estados:
- 🟢 Escuchando (inicial): espera. Si aprietas el Botón A, tú envías; si te llega un
Start, te toca recibir. - 🟠 Preparando: inventas 10 valores al azar y los "cantas": prendes su LED con su
color y tocas su nota, medio segundo cada uno. - 🟠 Enviando: mandas por el cable Start → los 10 valores → End.
- 🩵 Recibiendo: llegó un Start; recibes los 10 valores y, al terminar, los repites
con luz y sonido igual que el emisor.
🗺️ El diagrama de estados
Cada burbuja es un estado y cada flecha dice qué evento la dispara. La rama
ámbar es la placa que envía; la turquesa la que recibe. Es la misma máquina en
las dos.
🔗 Conecta las dos naves (tres cablecitos)
Necesitas dos placas y tres caimanes (cables con pinza). Une tres pads del borde de
una placa con los de la otra, cruzando TX y RX:
| Placa 1 | Placa 2 | |
|---|---|---|
| pad TX | → | pad RX |
| pad RX | → | pad TX |
| pad GND | → | pad GND |
El que habla en una placa (TX) tiene que ir al que escucha en la otra (RX). El
cable de GND une el "cero" de las dos placas para que se pongan de acuerdo en qué es un 0
y qué es un 1. Sin él, el mensaje llega hecho un revoltijo.
🧱 Dale cuerpo a la nave: las dos naves
Marca cuál placa es cada nave para no confundirte al mandar los mensajes.
💡 Ideas de material
- Dos hojas de papel y un marcador.
🛠️ Cómo hacerlo (paso a paso)
- En una hoja escribe "Astra-7" y en la otra "Desconocida".
- Pon una placa CPX arriba de cada hoja.
- Conéctalas con sus tres cables (TX↔RX cruzados y GND↔GND) y manda un mensaje de una a la otra.
- Cada placa está sobre su hoja ("Astra-7" y "Desconocida") y se pasan mensajes de luz y sonido.
💻 El programa, estado por estado
No lo escribas todo de golpe. Tu profe te dará el esqueleto Mision6Alumno.py: ya trae el
encabezado (los import, las listas colores y notas, las marcas START/END yestado = "escuchando"), el while y los cuatro estados vacíos con un pass adentro. Tu
trabajo es llenar el hueco de cada estado (donde dice pass) con el código de abajo.
Hazlo uno por uno y prueba entre cada paso. El mismo programa va en las dos placas.
💡
coloresynotasson dos listas de 10. El valor es la posición en la lista, así
quecolores[valor]te da su color ynotas[valor]su nota.
🟢 Estado: Escuchando
La placa espera. Si aprietas el Botón A, tú vas a mandar el mensaje; si te llega un
Start por el cable, te toca recibir. En el hueco de escuchando escribe:
if cp.button_a: # Boton A: yo mando el mensaje
estado = "preparando"
print("EVENTO: Boton A -> preparando")
while cp.button_a:
time.sleep(0.01)
else:
marca = uart.read(1) # me hablan: leo una marca del cable
if marca and marca[0] == START:
estado = "recibiendo"
print("EVENTO: llego Start -> recibiendo")
🟠 Estado: Preparando
Inventa 10 valores al azar y "canta" cada uno: prende solo su LED con su color y toca
su nota medio segundo. Al terminar, pasa a Enviando. En el hueco de preparando escribe:
valores = []
for i in range(10):
valores.append(random.randint(0, 9))
for valor in valores: # los muestra uno a uno
cp.pixels.fill((0, 0, 0))
cp.pixels[valor] = colores[valor] # prende SOLO ese LED con su color
cp.play_tone(notas[valor], 0.5) # suena 1/2 s (el LED sigue prendido)
cp.pixels.fill((0, 0, 0))
estado = "enviando"
🟠 Estado: Enviando
Manda todo por el cable de un jalón: Start + los 10 valores + End (son 12 números). Luego
vuelve a Escuchando. En el hueco de enviando escribe:
uart.write(bytes([START] + valores + [END]))
print("Envie:", valores)
estado = "escuchando"
print("---> Estado: escuchando")
🩵 Estado: Recibiendo
Llegó un Start. Lee los 10 valores y la marca End, y repite el mensaje con la misma
luz y sonido que el emisor. En el hueco de recibiendo escribe:
datos = uart.read(10) # el DATO: los 10 valores
if datos and len(datos) == 10: # cuando YA llegaron los 10...
uart.read(1) # la marca de End
print("Recibi:", list(datos))
for valor in datos: # los repite igual que el emisor
cp.pixels.fill((0, 0, 0))
cp.pixels[valor] = colores[valor]
cp.play_tone(notas[valor], 0.5)
cp.pixels.fill((0, 0, 0))
estado = "escuchando"
print("---> Estado: escuchando")
🧩 Cuando llenes los cuatro huecos, tu programa queda completo: es la misma máquina de
estados del diagrama, ahora hablando entre dos naves.
🎯 Pruébalo con la otra nave
- Conecta las dos placas con los tres cables (TX↔RX cruzados y GND↔GND).
- Carga este mismo programa en las dos placas y ábreles la consola serial.
- Aprieta el Botón A en una: verás correr una lucecita de colores mientras suena una
pequeña melodía de 10 notas. Eso es el mensaje que inventó. - En cuanto termina, la otra nave repite la misma melodía y los mismos colores. ✨
¡Le pasó el mensaje por el cable! - Ahora aprieta el Botón A en la otra placa: los papeles se invierten (es la misma máquina).
⚠️ ¿La otra nave no repite nada? Revisa que TX y RX estén cruzados y que el GND
esté conectado. Si sale un error al arrancar, revisa que llenaste bien el hueco de cada
estado (la sangría cuenta).
🌟 Si quieres ir más allá (reto opcional)
- Contraseña secreta: en vez de 10 valores al azar, escribe tú una lista fija (por
ejemplovalores = [0, 2, 4, 5, 7, 7, 5, 4, 2, 0]) para mandar siempre la misma
melodía. ¿La reconoces al oírla del otro lado? Es tu santo y seña entre naves.
✅ Misión cumplida cuando…
- Tu programa usa la lista
colores(10) y la listanotas(10). - Al apretar el Botón A, la placa inventa 10 valores y los muestra con LED, color
y nota (medio segundo cada uno). - Envía el mensaje por el cable con las marcas Start y End.
- La otra placa lo recibe y lo repite igualito (misma luz, misma música).
🏅 Insignia: "Primer contacto". ¡Ya no estás sola/o en K-342! 📡
Valentina Tech