Ejemplos Prácticos

Esta sección contiene programas completos probados en hardware real, listos para copiar, ejecutar y adaptar a tus propios modelos de LEGO WeDo 2.0.

Los archivos fuente de estos ejemplos se encuentran disponibles en la carpeta examples/ del repositorio.


1. Concurrencia con Tareas: Luces y Movimiento

examples/blink_and_move.py demuestra cómo hacer parpadear el LED en bucle continuo mientras un motor gira durante 3 segundos, utilizando tareas cooperativas sin bloquear el programa ni recurrir a hilos.

"""Blink the LED while a motor runs, using cooperative tasks (no threads, no asyncio)."""
from wedopy import Hub, task

with Hub() as hub:
    def blink():
        while True:
            hub.led.index(6)   # Amarillo
            yield task.sleep(0.3)
            hub.led.index(9)   # Blanco
            yield task.sleep(0.3)

    def move():
        motor = hub.motor("A")
        try:
            motor.run(75)
            yield task.sleep(3)
        finally:
            motor.stop()

    # La tarea de fondo se cancela automáticamente al terminar 'move'
    hub.tasks.add(blink, background=True)
    hub.tasks.add(move)
    hub.tasks.wait()

2. Vehículo Evasor de Obstáculos

examples/distance_sensor.py acciona el motor al 70% de potencia y supervisa el sensor de proximidad en tiempo real. Cuando un obstáculo se encuentra a menos de nivel 3 (muy cerca), el vehículo frena inmediatamente.

"""Drive until the distance sensor reports something nearer than 3 (scale 0..10)."""
import time
from wedopy import Hub, OperationTimeout

with Hub() as hub:
    sensor = hub.distance_sensor("B")
    motor = hub.motor("A")

    motor.run(70)
    print("Avanzando... esperando obstáculo frente al sensor B")

    while True:
        try:
            if sensor.is_near(3):
                print("¡Obstáculo detectado a menos de nivel 3!")
                break
        except OperationTimeout:
            print("Sin respuesta del sensor; deteniendo por seguridad")
            break
        time.sleep(0.05)

    motor.stop()

3. Robot de Dos Motores (MotorGroup)

examples/two_motors.py controla simultáneamente dos motores conectados a los puertos A y B (por ejemplo, las dos ruedas motrices de un vehículo), garantizando que ambos se detengan incluso si ocurre un error en uno de ellos.

"""Drive two motors together (A first, then B; not atomic), then stop."""
import time
from wedopy import Hub

with Hub() as hub:
    motors = hub.motors(("A", "B"))

    print("Iniciando tracción doble...")
    motors.run(75)
    time.sleep(2)

    print("Deteniendo motores...")
    motors.stop()

4. Monitor de Orientación con Sensor de Inclinación

examples/tilt_sensor.py toma 20 muestras periódicas reportando el ángulo 2D y la dirección física (neutral, forward, back, left, right).

"""Print the tilt angle and direction."""
import time
from wedopy import Hub

with Hub() as hub:
    tilt = hub.tilt_sensor("A")

    print("Mueve el sensor de inclinación en el puerto A:")
    for _ in range(20):
        print(f"Ángulo: {tilt.read_angle()} | Dirección: {tilt.read_direction()}")
        time.sleep(0.25)

5. Espectro y Ciclo de Colores LED

examples/led.py recorre uno a uno todos los colores indexados de la paleta oficial de LEGO WeDo 2.0 y finaliza encendiendo un color RGB personalizado.

"""Cycle through the indexed LED colours, then show an RGB colour."""
import time
from wedopy import Hub

with Hub() as hub:
    # Recorrer colores oficiales del 1 al 10
    for i in range(1, 11):
        hub.led.index(i)
        time.sleep(0.3)

    # Establecer color RGB naranja brillante
    hub.led.rgb(255, 80, 0)
    time.sleep(1)

    hub.led.off()