Files
klubhaus-doorbell/libraries/FastLED/examples/README.md
2026-02-12 00:45:31 -08:00

224 lines
9.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# FastLED Examples (`examples/`)
This document maps the example sketches, shows how to run them on different targets (Arduino/PlatformIO, Teensy, ESP32, WASM), and suggests learning paths. It mirrors the structure and tone of `src/fl/README.md` so you can quickly jump between concepts and runnable code.
## Table of Contents
- [Overview and Quick Start](#overview-and-quick-start)
- [How to Run Examples](#how-to-run-examples)
- [Arduino IDE (classic workflow)](#arduino-ide-classic-workflow)
- [PlatformIO (boards and native host)](#platformio-boards-and-native-host)
- [Teensy/OctoWS2811](#teensyoctows2811)
- [ESP32 / I2S (parallel output)](#esp32--i2s-parallel-output)
- [WASM (browser demos + JSON UI)](#wasm-browser-demos--json-ui)
- [Directory Map (by theme)](#directory-map-by-theme)
- [Basics and core idioms](#basics-and-core-idioms)
- [Color, palettes, and HSV](#color-palettes-and-hsv)
- [Classic 1D effects](#classic-1d-effects)
- [2D, matrices, mapping](#2d-matrices-mapping)
- [FX engine and higher-level utilities](#fx-engine-and-higher-level-utilities)
- [Audio and reactive demos](#audio-and-reactive-demos)
- [Storage, SD card, and data](#storage-sd-card-and-data)
- [Multiple strips, parallel, and high-density](#multiple-strips-parallel-and-high-density)
- [ESP/Teensy/SmartMatrix specifics](#espteensysmartmatrix-specifics)
- [WASM and UI](#wasm-and-ui)
- [Larger projects and showcases](#larger-projects-and-showcases)
- [Quick Usage Notes](#quick-usage-notes)
- [Choosing an Example](#choosing-an-example)
- [Troubleshooting](#troubleshooting)
- [Guidance for New Users](#guidance-for-new-users)
- [Guidance for C++ Developers](#guidance-for-c-developers)
---
## Overview and Quick Start
The `examples/` directory contains runnable sketches that cover:
- Getting started (blinking, first LED, pin modes)
- Color utilities, palettes, and HSV/CRGB conversions
- Classic 1D effects (Cylon, Fire, Twinkles, DemoReel100)
- 2D matrix helpers, XY mapping, and raster effects
- Advanced pipelines like downscale/upscale and path rendering
- Platform-specific demos (Teensy OctoWS2811, ESP I2S)
- Browser/WASM examples with JSON-driven UI controls
Typical first steps:
- Open an example in the Arduino IDE and change `NUM_LEDS`, chipset, and `DATA_PIN` to match hardware
- For matrices, define width/height and choose serpentine vs. row-major mapping
- For WASM or host exploration, use the WASM examples or the STUB platform (see below)
---
## How to Run Examples
### Arduino IDE (classic workflow)
- Open an `.ino` file directly (e.g., `examples/Blink/Blink.ino`)
- Edit the configuration near the top:
- LED type: `FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS)`
- Strip length: `NUM_LEDS`
- Brightness: `FastLED.setBrightness(…)`
- Select your board and COM/serial port, then Upload
Tips:
- For 2D examples, set `WIDTH`/`HEIGHT` and confirm wiring (serpentine vs. linear)
- If the animation is mirrored or offset, adjust the mapping helper
### PlatformIO (boards and native host)
- Board-based workflows: create a `platformio.ini` that targets your MCU and copy an example sketch into a project `src/` folder
- Host/STUB workflows: use the STUB platform for local testing where appropriate (no hardware); advanced builds hook into `src/platforms/stub/`
The repository includes `ci/native/` and `ci/kitchensink/` PlatformIO configs you can reference for host builds and integration tests.
### Teensy/OctoWS2811
- Examples under `examples/OctoWS2811*` and related Teensy demos show multi-output patterns
- Replace pin/channel configuration and buffer sizes to match your wiring; ensure you select the correct Teensy model in your IDE/toolchain
### ESP32 / I2S (parallel output)
- See `examples/EspI2SDemo/` and `examples/Esp32S3I2SDemo/`
- These demonstrate high-throughput I2S-driven output; choose a board definition matching your dev board and wiring
- On some environments, parallel output requires specific pin sets and PSRAM settings; consult the sketch notes
### WASM (browser demos + JSON UI)
- `examples/wasm/` and related WASM-focused examples run in the browser
- The JSON UI system enables sliders, buttons, and other controls (see `src/platforms/wasm` and `src/fl/ui.h`)
- Typical flow: build to WebAssembly, serve the app, and interact via the browser UI
---
## Directory Map (by theme)
This list highlights commonly used examples. It is not exhaustive—browse the folders for more.
### Basics and core idioms
- `Blink/` — minimal starting point
- `FirstLight/` — walk a single bright pixel along the strip
- `PinMode/` — simple input pin usage
- `RGBSetDemo/` — basic pixel addressing and assignment
- `RGBCalibrate/` — adjust color channel balance
### Color, palettes, and HSV
- `ColorPalette/` — palette usage and transitions
- `ColorTemperature/` — white point and temperature helpers
- `HSVTest/` — HSV types and conversions
- `ColorBoost/` — saturation/luminance shaping for high visual impact
### Classic 1D effects
- `Cylon/`, `FxCylon/` — scanning eye; FX variants use higher-level helpers
- `Fire2012/`, `Fire2012WithPalette/`, `FxFire2012/` — classic fire effect
- `TwinkleFox/`, `FxTwinkleFox/` — twinkling star fields
- `Pride2015/`, `FxPride2015/` — rainbow variants
- `DemoReel100/`, `FxDemoReel100/` — rotating showcase of many patterns
- `Wave/` — 1D wave toolkit
### 2D, matrices, mapping
- `XYMatrix/` — matrix mapping helpers and layouts
- `Wave2d/`, `FxWave2d/` — 2D wavefields
- `Blur2d/` — separable blur across a matrix
- `Downscale/` — render high-res, resample to panel resolution
- `Animartrix/` — animated matrix patterns and helpers
- `SmartMatrix/` — SmartMatrix integration sketch
### FX engine and higher-level utilities
- `FxEngine/` — scaffolding for composing layers and frames
- `FxGfx2Video/` — utilities to pipe graphics into frame/video helpers
- `fx/` under `src/` provides the building blocks used by these examples
### Audio and reactive demos
- `Audio/` — audio input + analysis (simple and advanced variants)
- `Ports/PJRCSpectrumAnalyzer/` — Teensy-centric spectrum analyzer
### Storage, SD card, and data
- `FxSdCard/` — SD-backed media and assets (see `data/` subfolder)
### Multiple strips, parallel, and high-density
- `Multiple/` — organize multiple arrays/segments
- `TeensyParallel/` — multi-output example
- `TeensyMassiveParallel/` — larger multi-output wiring
- `OctoWS2811/`, `OctoWS2811Demo/` — OctoWS2811 multi-channel output
### ESP/Teensy/SmartMatrix specifics
- `EspI2SDemo/`, `Esp32S3I2SDemo/` — ESP32 parallel/I2S output
- `SmartMatrix/` — run on SmartMatrix hardware
### WASM and UI
- `wasm/` — browser-targeted demo
- `WasmScreenCoords/` — UI overlay and coordinate visualization
- `Json/` — JSON-structured sketch example
- `UITest/` — showcase of JSON UI controls and groups
### Larger projects and showcases
- `LuminescentGrand/` — complex, multi-file installation piece
- `Luminova/` — larger effect set
- `Chromancer/` — advanced example with assets and helpers
---
## Quick Usage Notes
- Always set the LED chipset, pin, color order, and `NUM_LEDS` to match your hardware:
- `FastLED.addLeds<CHIPSET, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS);`
- Common CHIPSETs: `WS2812B`, `SK6812`, `APA102` (APA102 also needs `CLK_PIN`)
- Adjust brightness and power: `FastLED.setBrightness(…)` and consider power limits for dense strips
- For matrices, define `WIDTH`/`HEIGHT` and use serpentine or row-major helpers; verify orientation
- Prefer using `fl::Leds` + `XYMap` for 2D logic when the example exposes those hooks
- For high quality on low-res displays, render at higher resolution and `downscale`
---
## Choosing an Example
- New to FastLED: start with `Blink``FirstLight``DemoReel100`
- Building a palette-based animation: `ColorPalette` and `ColorTemperature`
- Making a 1D animation: `Cylon`, `Fire2012`, `TwinkleFox`
- Driving a panel: `XYMatrix`, then try `Downscale` or `Wave2d`
- Multi-output / high-density: `OctoWS2811Demo`, `TeensyParallel`
- Browser demo / UI: `wasm`, `UITest`, `Json`
- Advanced/experimental: `Corkscrew` (in `src/fl`), `Fx*` examples, and `Chromancer`
---
## Troubleshooting
- Nothing lights up:
- Re-check `DATA_PIN`, chipset, and `COLOR_ORDER`
- Confirm `NUM_LEDS` and power are correct; try a low brightness first
- Colors look wrong: try `GRB` vs. `RGB` ordering; some strips invert green/red
- Matrix appears mirrored or wrapped: change serpentine/row-major mapping or flip `WIDTH` and `HEIGHT`
- ESP32 I2S pinning: verify the chosen pins are valid for your boards I2S peripheral
- Teensy multi-output: confirm channel count and buffer sizes match your wiring
---
## Guidance for New Users
- Include `FastLED.h`, pick your chipset, set `NUM_LEDS`, and get something simple running first
- For matrices, draw into width/height coordinates and let mapping/wiring helpers translate to indices
- Explore the palette and HSV examples for smooth color; try `fill_rainbow` and `CHSV`
- When moving to larger builds, consider splitting configuration and effect code into separate files for clarity
## Guidance for C++ Developers
- Many examples are deliberately small; for more reusable building blocks, see `src/fl/` and `src/fx/`
- Prefer `fl::` containers, views (`fl::span`), and graphics helpers for portability and quality
- For UI/remote control on capable targets, use the JSON UI elements (see `src/fl/ui.h`) and WASM bridge (`src/platforms/wasm`)
---
This README will evolve alongside the examples. Browse subfolders for sketch-specific notes and hardware details. For the core library map and deeper subsystems, see `src/README.md` and `src/fl/README.md`.