Overview
The Pattern Builder is an advanced LED sequence development tool integrated into the AutoLight Web Client. It provides desktop-only pattern creation with 4 distinct simulation modes, high-precision timing, and C++ code generation for seamless integration with AutoLight V3 firmware.4 Simulation Modes
The Pattern Builder provides comprehensive LED sequence development through four complementary approaches:Visual Pattern
Interactive grid-based LED pattern creation with frame-by-frame editing
Expression Builder
Mathematical expression-based patterns with live preview
C++ Simulator
C++ code parsing and execution engine with validation
JavaScript Simulator
High-precision JavaScript engine with Arduino compatibility
Visual Pattern Mode
Overview
Interactive grid-based LED pattern creation with frame-by-frame editing, timeline visualization, and real-time playback. Component:components/simulation/modes/VisualPatternMode.tsx
Features
- Dynamic LED Grid
- Frame Timeline
- Pattern Controls
- Code Generator
Adaptive grid supporting up to 64 channelsFeatures:
- Automatic grid layout calculation
- Responsive cell sizing
- Visual LED state (ON/OFF)
- Click to toggle individual LEDs
- Multi-select support
- Copy/paste frame data
Grid Layout System
Automatic grid layout calculation based on channel count:Example: Creating a Blink Pattern
Test Playback
Click Play to preview the blinking patternAll LEDs will blink ON/OFF at 100ms intervals
Expression Builder Mode
Overview
Mathematical expression-based pattern generation with real-time evaluation and live preview. Component:components/simulation/modes/ExpressionBuilderMode.tsx
Expression System
- Syntax
- Examples
- Live Preview
Expression syntax and variablesAvailable variables:
t- Time in millisecondsi- Channel index (0 to channels-1)frame- Current frame numberch- Total channel count
- Math:
sin(),cos(),tan(),abs(),floor(),ceil(),round() - Logic:
&&,||,!,>,<,==,!= - Operators:
+,-,*,/,%,^
Example: Creating a Wave Pattern
C++ Simulator Mode
Overview
C++ code parsing and execution engine with syntax validation and simulation capabilities. Component:components/simulation/modes/CppSimulatorMode.tsx
Features
Code Parser
Code Parser
Parse existing C++ sequence code from BaseChannelSequence.cpp
Execution Simulator
Execution Simulator
Simulate C++ code execution to generate frame dataFeatures:
- Parse function calls:
set(),on(),off(),sleep() - Track channel states
- Generate timing information
- Validate syntax
- Export frame data
Syntax Validator
Syntax Validator
Validate C++ code for common errorsChecks:
- Function syntax
- Variable declarations
- Loop structures
- Array bounds
- Timing constraints
- AutoLight API usage
Code Optimizer
Code Optimizer
Optimize C++ code for performanceOptimizations:
- Remove redundant operations
- Combine sequential sets
- Minimize sleep calls
- Reduce loop iterations
- Suggest improvements
JavaScript Simulator Mode
Overview
High-precision JavaScript engine with Arduino compatibility layer and exact ESP32 timing matching. Component:components/simulation/modes/JavaScriptSimulatorMode.tsx
High-Precision Timing System
PrecisionTimer Class - Location:/lib/utils/precisionTimer.ts
- ±1-4% Timing Accuracy: Revolutionary improvement over standard setTimeout (±10-30%)
- Hybrid Algorithm: Combines setTimeout (bulk delay) and requestAnimationFrame (precision)
- Hardware Compatibility: JavaScript patterns match ESP32 deployment timing exactly
- Zero Double-Timing: Eliminates setTimeout + playback context timing conflicts
Arduino Compatibility Layer
JavaScript Engine - Location:/lib/simulation/javascriptEngine.ts
Example: JavaScript Pattern
Code Generation
C++ Export Formats
- Direct API
- Native API
- With Metadata
Uses BaseChannel direct control functionsFunctions:
on()- Turn all channels ONoff()- Turn all channels OFFset(channel, state)- Set individual channelsleep(ms)- Delay in milliseconds
Integration with BaseChannelSequence.cpp
Add to BaseChannelSequence.cpp
Open
Firmware/Core/Channel/BaseChannel/BaseChannelSequence.cppAdd your function at the end:Desktop-Only Design
Responsive Requirements
The Pattern Builder requires substantial screen real estate:Why Desktop-Only?
Monaco Editor
Monaco Editor
The Monaco code editor (used in C++/JavaScript modes) requires:
- Minimum width: 600px for usable editing
- Syntax highlighting panel
- Line numbers and minimap
- Error indicators and tooltips
Frame Timeline
Frame Timeline
Frame timeline visualization needs:
- Minimum 800px for comfortable scrolling
- Thumbnail previews (64x64px each)
- Frame controls and labels
- Drag-and-drop interaction area
LED Grid
LED Grid
Dynamic LED grid requires:
- Minimum 400px for 64-channel display
- Touch targets must be ≥44px for accessibility
- Labels and state indicators
- Multi-select interaction area
Control Panels
Control Panels
Multiple control panels need:
- Pattern controls: 300px
- Grid configuration: 250px
- Export options: 200px
- Settings panel: 250px
Next Steps
Web Client
Learn about the Next.js web interface
REST API
API reference for device control
AutoLight V3
Firmware architecture details
Back to Overview
Return to AutoLight overview