253 lines
5.4 KiB
Markdown
253 lines
5.4 KiB
Markdown
# Quick Start Guide
|
|
|
|
Get up and running with the Tasmota Berry Animation Framework in 5 minutes!
|
|
|
|
## Prerequisites
|
|
|
|
- Tasmota device with Berry support
|
|
- Addressable LED strip (WS2812, SK6812, etc.)
|
|
- Basic familiarity with Tasmota console
|
|
|
|
## Step 1: Basic Setup
|
|
|
|
### Import the Framework
|
|
```berry
|
|
import animation
|
|
```
|
|
|
|
### Create LED Strip and Engine
|
|
```berry
|
|
# Create LED strip (adjust count for your setup)
|
|
var strip = Leds(30) # 30 LEDs
|
|
|
|
# Create animation engine
|
|
var engine = animation.create_engine(strip)
|
|
```
|
|
|
|
## Step 2: Your First Animation
|
|
|
|
### Simple Solid Color
|
|
```berry
|
|
# Create a solid red animation
|
|
var red_anim = animation.solid(0xFFFF0000) # ARGB format
|
|
|
|
# Add to engine and start
|
|
engine.add_animation(red_anim)
|
|
engine.start()
|
|
```
|
|
|
|
### Pulsing Effect
|
|
```berry
|
|
# Create pulsing blue animation
|
|
var pulse_blue = animation.pulse(
|
|
animation.solid(0xFF0000FF), # Blue color
|
|
2000, # 2 second period
|
|
50, # Min brightness (0-255)
|
|
255 # Max brightness (0-255)
|
|
)
|
|
|
|
engine.clear() # Clear previous animations
|
|
engine.add_animation(pulse_blue)
|
|
engine.start()
|
|
```
|
|
|
|
## Step 3: Using the DSL
|
|
|
|
The DSL (Domain-Specific Language) makes animations much easier to write.
|
|
|
|
### Create Animation File
|
|
Create `my_first.anim`:
|
|
```dsl
|
|
# Define colors
|
|
color red = #FF0000
|
|
color blue = #0000FF
|
|
|
|
# Create pulsing animation
|
|
animation pulse_red = pulse(solid(red), 3s, 20%, 100%)
|
|
|
|
# Run it
|
|
run pulse_red
|
|
```
|
|
|
|
### Load DSL Animation
|
|
```berry
|
|
import animation
|
|
|
|
var strip = Leds(30)
|
|
var runtime = animation.DSLRuntime(animation.create_engine(strip))
|
|
|
|
# Load from string
|
|
var dsl_code = '''
|
|
color blue = #0000FF
|
|
animation pulse_blue = pulse(solid(blue), 2s, 30%, 100%)
|
|
run pulse_blue
|
|
'''
|
|
|
|
runtime.load_dsl(dsl_code)
|
|
```
|
|
|
|
## Step 4: Color Palettes
|
|
|
|
Palettes create smooth color transitions:
|
|
|
|
```dsl
|
|
# Define a sunset palette
|
|
palette sunset = [
|
|
(0, #191970), # Midnight blue
|
|
(64, purple), # Purple
|
|
(128, #FF69B4), # Hot pink
|
|
(192, orange), # Orange
|
|
(255, yellow) # Yellow
|
|
]
|
|
|
|
# Create palette animation
|
|
animation sunset_glow = rich_palette_animation(sunset, 5s, smooth, 200)
|
|
|
|
run sunset_glow
|
|
```
|
|
|
|
## Step 5: Sequences
|
|
|
|
Create complex shows with sequences:
|
|
|
|
```dsl
|
|
color red = #FF0000
|
|
color green = #00FF00
|
|
color blue = #0000FF
|
|
|
|
animation red_pulse = pulse(solid(red), 2s, 50%, 100%)
|
|
animation green_pulse = pulse(solid(green), 2s, 50%, 100%)
|
|
animation blue_pulse = pulse(solid(blue), 2s, 50%, 100%)
|
|
|
|
sequence rgb_show {
|
|
play red_pulse for 3s
|
|
wait 500ms
|
|
play green_pulse for 3s
|
|
wait 500ms
|
|
play blue_pulse for 3s
|
|
wait 500ms
|
|
repeat 2 times:
|
|
play red_pulse for 1s
|
|
play green_pulse for 1s
|
|
play blue_pulse for 1s
|
|
}
|
|
|
|
run rgb_show
|
|
```
|
|
|
|
## Step 6: Interactive Animations
|
|
|
|
Add event handling for interactive effects:
|
|
|
|
```dsl
|
|
color white = #FFFFFF
|
|
color red = #FF0000
|
|
|
|
animation flash_white = solid(white)
|
|
animation normal_red = solid(red)
|
|
|
|
# Flash white when button pressed
|
|
on button_press: flash_white
|
|
|
|
# Main animation
|
|
run normal_red
|
|
```
|
|
|
|
## Common Patterns
|
|
|
|
### Fire Effect
|
|
```dsl
|
|
palette fire = [
|
|
(0, #000000), # Black
|
|
(64, #800000), # Dark red
|
|
(128, #FF0000), # Red
|
|
(192, #FF8000), # Orange
|
|
(255, #FFFF00) # Yellow
|
|
]
|
|
|
|
animation fire_effect = rich_palette_animation(fire, 2s, smooth, 255)
|
|
run fire_effect
|
|
```
|
|
|
|
### Rainbow Cycle
|
|
```dsl
|
|
palette rainbow = [
|
|
(0, red), (42, orange), (84, yellow),
|
|
(126, green), (168, blue), (210, indigo), (255, violet)
|
|
]
|
|
|
|
animation rainbow_cycle = rich_palette_animation(rainbow, 10s, smooth, 255)
|
|
run rainbow_cycle
|
|
```
|
|
|
|
### Breathing Effect
|
|
```dsl
|
|
color soft_blue = #4080FF
|
|
animation breathing = pulse(solid(soft_blue), 4s, 10%, 100%)
|
|
run breathing
|
|
```
|
|
|
|
## Tips for Success
|
|
|
|
### 1. Start Simple
|
|
Begin with solid colors and basic pulses before moving to complex effects.
|
|
|
|
### 2. Use the DSL
|
|
The DSL is much easier than writing Berry code directly.
|
|
|
|
### 3. Test Incrementally
|
|
Add one animation at a time and test before adding complexity.
|
|
|
|
### 4. Check Your Colors
|
|
Use hex color codes (#RRGGBB) or named colors (red, blue, green).
|
|
|
|
### 5. Mind the Timing
|
|
Start with longer periods (3-5 seconds) and adjust as needed.
|
|
|
|
## Troubleshooting
|
|
|
|
### Animation Not Starting
|
|
```berry
|
|
# Make sure to start the engine
|
|
engine.start()
|
|
|
|
# Check if animation was added
|
|
print(engine.size()) # Should be > 0
|
|
```
|
|
|
|
### Colors Look Wrong
|
|
```berry
|
|
# Check color format (ARGB with alpha channel)
|
|
var red = 0xFFFF0000 # Correct: Alpha=FF, Red=FF, Green=00, Blue=00
|
|
var red = 0xFF0000 # Wrong: Missing alpha channel
|
|
```
|
|
|
|
### DSL Compilation Errors
|
|
```berry
|
|
# Use try/catch for better error messages
|
|
try
|
|
runtime.load_dsl(dsl_code)
|
|
except "dsl_compilation_error" as e, msg
|
|
print("DSL Error:", msg)
|
|
end
|
|
```
|
|
|
|
### Performance Issues
|
|
```berry
|
|
# Limit number of simultaneous animations
|
|
engine.clear() # Remove all animations
|
|
engine.add_animation(new_animation) # Add just one
|
|
|
|
# Use longer periods for smoother performance
|
|
animation pulse_slow = pulse(solid(red), 5s, 50%, 100%) # 5 seconds instead of 1
|
|
```
|
|
|
|
## Next Steps
|
|
|
|
- **[DSL Reference](.kiro/specs/berry-animation-framework/dsl-specification.md)** - Complete DSL syntax
|
|
- **[API Reference](API_REFERENCE.md)** - Berry API documentation
|
|
- **[Examples](EXAMPLES.md)** - More complex examples
|
|
- **[User Functions](.kiro/specs/berry-animation-framework/USER_FUNCTIONS.md)** - Create custom functions
|
|
- **[Event System](.kiro/specs/berry-animation-framework/EVENT_SYSTEM.md)** - Interactive animations
|
|
|
|
Happy animating! 🎨✨ |