El porqué del orden de las actividades: cómo cada paso se apoya en el anterior, desde el primer “hola mundo” animado hasta los proyectos de síntesis.
Las bases absolutas: enseñar a seguir instrucciones en orden (secuencia) y a repetirlas (bucles).
Motivación. Es el “Hola Mundo” de la animación y la personalización. En vez de un concepto abstracto, crea un objeto físico y atractivo (un llavero, un adorno para la mochila) que conecta el código con la creatividad y con un objeto de uso diario. Es el punto de partida ideal: una sola salida, sin entrada ni mapeo.
Cómo funciona. El programa entra en un bucle infinito. Dentro, una secuencia: muestra un corazón grande, emite dos sonidos de latido y luego entra en un bucle pequeño que se repite 4 veces para una animación de vibración rápida.
Programas que reaccionan al instante, “traduciendo” los datos de un sensor en sonido o imagen.
Motivación. Introduce la interactividad musical: una conexión intuitiva entre el gesto (inclinar) y el resultado (sonido). Sienta las bases para los siguientes proyectos.
Cómo funciona. En un bucle infinito, lee el valor de la inclinación y lo suma a una nota base; la nota resultante suena al instante.
notaFinal = 60 + oriY.Motivación. Evolución directa del anterior: un único input (inclinación) controla varias salidas a la vez (sonido y luz), para un feedback más rico.
Cómo funciona. El valor de la inclinación se usa para dos cálculos: la nota musical y la posición de un píxel en la matriz LED.
valorNota = redondear(oriY/5).notaFinal = 60 + valorNota.posicionLedY = 4 + valorNota.Motivación. Consolida la idea mostrando que cualquier sensor puede mapearse a cualquier salida: aquí, el ruido se transforma en color. Refuerza que es un principio universal.
Cómo funciona. Lee continuamente el nivel de ruido y lo usa como componente rojo de un color RGB; ese color ilumina toda la pantalla.
colorDinamico = Color(R=noise, G=0, B=0).Primero el evento como simple “disparador”; luego, combinado con variables, para darle “memoria” al programa.
Motivación. Los eventos en su forma más simple: una causa (ruido) dispara un efecto (secuencia de risa), sin guardar estado. Primer contacto para darle vida al robot.
Cómo funciona. Está inactivo con una cara estática. Cuando detecta un aumento súbito de ruido (una palmada), reproduce una risa y anima la boca; al terminar, vuelve a su estado inicial.
Motivación. Introduce las variables con un juego competitivo y temático. Tras hacerle cosquillas, el robot necesita energía: ¿quién es el primero en cargarlo tocando la pantalla? Es la forma perfecta de entender cómo una variable “cuenta”.
Cómo funciona. Una variable energia empieza en 0. Cada vez que ocurre el evento “pantalla presionada”, se incrementa en 1 y se muestra el nuevo valor.
energia = 0.energia = energia + 1.energia en la pantalla.Motivación. Con el robot ya “cargado”, se desbloquea una función avanzada: cambiar su comportamiento fundamental (su “estado de ánimo”, representado por el latido) en respuesta a la interacción.
Cómo funciona. El bucle principal hace latir un corazón a una velocidad definida por las variables latidoGrande y latidoPequeño. Dos eventos (inclinar de lado o boca arriba) cambian esos valores, alterando el comportamiento del bucle.
latidoGrande = 500, latidoPequeño = 150.latidoGrande = 250, latidoPequeño = 80.latidoGrande = 500, latidoPequeño = 150.Que el programa lea su “memoria” (variables) y decida qué camino tomar.
if simpleMotivación. La introducción más suave a la lógica condicional, en un escenario divertido: proteger un tesoro.
Cómo funciona. Comprueba continuamente si la “tapa” se inclina más allá de un ángulo. Si la condición es verdadera, activa una secuencia de alarma con luz y sonido.
inclinacionX > 20 ENTONCES: ejecutar secuencia de alarma (luz, sonido, espera, apagar).if-elseMotivación. Manejar dos caminos excluyentes (luz vs. oscuridad), con una metáfora visual y positiva.
Cómo funciona. Revisa el nivel de luz. Si supera un umbral (hay luz), reproduce una melodía y dibuja un sol; de lo contrario (oscuro), apaga todo.
intensidadLuz > 50: reproducir melodía y dibujar sol.if-elseMotivación. Consolida aplicando la misma estructura con la condición invertida: demuestra la versatilidad de la lógica condicional.
Cómo funciona. Es lo opuesto al despertador: si hay poca luz (oscuro), animación de fiesta; de lo contrario, apaga.
intensidadLuz < 30: ejecutar animación de luces.if-else basado en un estado cambianteMotivación. El ciclo completo de la programación interactiva: un evento (soplo) modifica una variable de estado, y un condicional lee esa variable para decidir qué hacer.
Cómo funciona. Una variable flama controla si la vela está encendida. Un evento de ruido (soplo) invierte su valor. El bucle usa un if-else para mostrar la llama o dejar la pantalla apagada.
flama = VERDADERO.flama = no flama.flama es VERDADERO → mostrar animación de la llama; SINO → apagar LEDs.Motivación. Introduce los operadores lógicos de forma tangible: mantener el equilibrio exige cumplir varias condiciones a la vez.
Cómo funciona. En cada ciclo verifica si la inclinación en X e Y están dentro de un rango seguro. Solo si ambas se cumplen, el indicador es verde; si una falla, se pone rojo y suena una alarma.
inclinacionX e inclinacionY.(-2 < X < 2) Y (-2 < Y < 2): punto VERDE + sonido “agradable”.Los últimos tipos de bucles (for y while) e integrar todo en proyectos completos.
Motivación. Un proyecto de repaso que encapsula la lógica central (evento → variable → condicional) en una aplicación práctica y casi mágica.
Cómo funciona. Versión limpia de la vela: un evento de ruido cambia el estado de una variable booleana; inmediatamente, un if-else la lee para encender o apagar todos los LEDs.
estado = FALSO.estado = no estado.estado es VERDADERO → encender todos los LEDs; SINO → apagarlos.forMotivación. Introduce el for donde es perfecto: recorrer todos los píxeles de la pantalla para una animación de encendido/apagado gradual.
Cómo funciona. Se basa en el proyecto anterior, pero en vez de encender de golpe usa for anidados para recorrer la matriz píxel por píxel (efecto “barrido”).
estado igual que P13.)estado es VERDADERO → PARA columna 1..7: PARA fila 1..7: encender LED (columna, fila) y esperar.for en orden inverso para apagar.whileMotivación. Repeticiones donde no se sabe de antemano cuántas serán. El temporizador aleatorio del juego es el ejemplo perfecto para el while.
Cómo funciona. Al presionar la pantalla se genera un tiempo aleatorio. Un while sigue activo mientras el tiempo sea mayor que cero, descontando un segundo por iteración. Al llegar a 0, el juego “explota”.
tiempo = aleatorio(5..15) · reproducir música.tiempo > 0: tiempo = tiempo - 1, esperar 1 segundo.Motivación. Integra mapeo de sensores, cálculos matemáticos, gestión de variables y una condición compleja basada en el tiempo, para crear una herramienta útil.
Cómo funciona. Lee la inclinación para calcular los BPM; a partir de ellos, el intervalo entre latidos. En un bucle, comprueba si pasó suficiente tiempo desde el último latido para generar el siguiente.
ultimoLatido = 0.bpm desde la inclinación · intervalo = 60000 / bpm.(tiempoActual - ultimoLatido) > intervalo: reproducir sonido y ultimoLatido = tiempoActual.bpm · volver al paso 2.Motivación. Requiere una gestión cuidadosa del estado a través de varias fases (esperando, activo, terminado) para un juego competitivo.
Cómo funciona. Espera un ruido fuerte para empezar a contar el tiempo. Mientras el ruido se mantenga sobre un umbral, el cronómetro avanza. Si cesa, el juego se detiene, muestra el tiempo final y espera unos segundos antes de poder reiniciarse.
inicio = 0, activo = VERDADERO.activo Y nivelDeRuido > umbral: si inicio == 0 → inicio = tiempoActual; mostrar tiempoActual - inicio.inicio > 0: activo = FALSO, mostrar tiempo final, esperar 5 s, luego inicio = 0 y activo = VERDADERO.