Usage Examples¶
We assume set_brightness has been defined appropriately.
LED Brightness Control¶
Smoothly fade a LED up and down:
from waveforms import sine_wave_factory
from generator_builder import Repeater
# Create infinite sine wave cycles
sine = sine_wave_factory(50)
for brightness in sine(): # runs indefinitely
set_brightness(brightness) # 0.0 to 1.0
time.sleep(0.01)
Multiple LEDs with Different Patterns¶
Control multiple LEDs with different waveforms:
from waveforms import sine_wave_factory, square_wave_factory
from generator_builder import Repeater
# LED 1: smooth sine wave
sine = sine_wave_factory(50)
# LED 2: square wave blink
square = square_wave_factory(20)
leds_control = [(led1, sine()), (leds2, square())]
while True:
for led, gen in leds_control:
led.set_brightness(next(gen))
time.sleep(0.01)
Time-Limited Sequences¶
Create sequences that stop after a timeout:
from generator_builder import (
Sequencer, TakeWhile, TimeoutTester,
Constant
)
from waveforms import sine_wave_factory
# Run for 5 seconds max
tester = TimeoutTester(5.0)
sequence = TakeWhile(
tester,
Repeater(Sequencer([
sine_wave_factory(20, repeater_arg=1), # one cycle of sine
Constant(0.5, 50), # Hold at 50% brightness for 50 steps
Constant(0.0, 50), # Turn off
]))
)
for value in sequence():
set_brightness(value)
Random Pattern Selection¶
Alternate between patterns randomly:
from generator_builder import (
Repeater, Chooser, TakeWhile, CountTester
)
from waveforms import (
sine_wave_factory, square_wave_factory,
sawtooth_wave_factory
)
# Create multiple pattern factories
patterns = Chooser([
sine_wave_factory(50, repeater_arg=10),
square_wave_factory(20, repeater_arg=10),
sawtooth_wave_factory(30, repeater_arg=10),
])
# Run 3 random selections
test = CountTester(300) # Adjust based on expected steps
sequence = TakeWhile(test, Repeater(patterns))
for value in sequence():
set_brightness(value)
Pulse Train with Random Duration¶
Create pulses with random lengths:
from generator_builder import ProbabilityRepeater, Constant, Sequencer
# One pulse: high then low
pulse = Sequencer([
Constant(1.0, 20), # High for 20 steps
Constant(0.0, 20), # Low for 20 steps
])
# Repeat randomly with 75% probability
train = ProbabilityRepeater(75, pulse)
for value in train():
set_brightness(value)
MicroPython Examples¶
Control PWM LEDs on Raspberry Pi Pico:
from machine import Pin, PWM
import generator_builder_mp as gb
import waveform_mp as fg
# Setup PWM
led = PWM(Pin(15))
led.freq(1000) # 1 kHz
# Create pattern
sine = fg.sine_wave_factory(100)
# Generate and apply
for brightness in sine():
duty = int(brightness * 65535)
led.duty_u16(duty)
Synchronized Multi-LED Control¶
Offset different LEDs for visual effect:
from waveforms_mp import sine_wave_factory
from generator_builder_mp import Repeater
led_configs = [
(led1, 0.0), # Start at 0
(led2, 0.33), # Start at 1/3 through
(led3, 0.66), # Start at 2/3 through
]
generators = [
(led, sine_wave_factory(100, offset=offset)())
for led, offset in led_configs
]
# Run
while True:
for led, gen in generators:
duty = int(next(gen)* 65535)
led.duty_u16(duty)
time.sleep(0.01)
Breathing LED Effect¶
Classic "breathing" effect using sine wave:
from waveforms_mp import sine_wave_factory
from generator_builder_mp import Repeater
import time
# Slow sine wave for breathing
breathing = sine_wave_factory(200)
min_brightness = 0.1
max_brightness = 1.0
for normalized_value in breathing():
# Scale to min/max range
brightness = min_brightness + normalized_value * (max_brightness - min_brightness)
duty = int(brightness* 65535)
led.duty_u16(duty)
time.sleep(4) # 4 second breathing cycle