🟢 LED

View Source

Control LEDs or relays. A simple library with some artful gimmicks.

This library is a simple, convenient wrapper around Circuits.GPIO for controlling LEDs or relays. Beyond basic on/off control, it enables artful, experimental, and even random noise light effects through overlapping repeating patterns — offering creative flexibility.

✨ Features

  • ⚡ Control single LEDs or relays on GPIO pins
  • ✔ Easy on/off control
  • ⏰ Blink and repeat patterns with configurable intervals and counts
  • 💡 Toggle LED state
  • 🎛️ Optional named LED processes for multiple devices
  • Supports overlapping repeat patterns for creative effects
  • Defaults to GPIO pin 22 with LED initially on

Installation

Add to your mix.exs:

def deps do
  [
    {:led, "~> 0.1.0"}
  ]
end

🛠 Usage

Start an LED

  • Default (gpio_pin: 22, initially on):
{:ok, _pid} = LED.start_link()
  • Named (gpio_pin: 23, initially off):
{:ok, _pid} = LED.start_link(name: :green_led, gpio_pin: 23, initial_value: 0)

Turn it on or off

  • Default:
LED.on()
LED.off()
  • Named:
LED.on(:green_led)
LED.off(:green_led)

Toggle LED

LED.toggle()
LED.toggle(:green_led)

Set state directly

LED.set(0, :green_led)  # Off
LED.set(1, :green_led)  # On
  • Blink indefinitely at 2 Hz (250ms interval):
LED.blink()
LED.blink(name: :green_led)
  • Blink LED on default/:green_led 10 times, toggling every 500 ms:
LED.blink(interval: 500, times: 10)
LED.blink(name: :green_led, interval: 500, times: 10)

Repeat blinking (overlapping allowed)

  • Start a repeating blink pattern on default/:green_led every 300 ms indefinitely:
LED.repeat(interval: 300)
LED.repeat(name: :green_led, interval: 300)
  • Overlay multiple blinking patterns (polyrhythmic effect):
LED.repeat(interval: 400, times: 5)
LED.repeat(interval: 700, times: 3)
LED.repeat(name: :green_led, interval: 400, times: 5)
LED.repeat(name: :green_led, interval: 700, times: 3)

Cancel blinking timers

Stop all blinking/repeating timers on default/:green_led:

LED.cancel_timers()
LED.cancel_timers(:green_led)

Note on use with relay

When using a relay, check its datasheet for minimum switch times to avoid damage or malfunction.