firmware-base/docs-c/components/LEDFeedback.md
2025-06-04 13:45:12 +02:00

122 lines
3.9 KiB
Markdown

---
title: "LED Feedback Component Documentation"
description: "Documentation for the LED Feedback component providing visual status indicators using addressable LED strips"
keywords: "LED Feedback, NeoPixel, WS2812B, SK6812, ESP32, visual indicator"
---
## LED Feedback
**Path**: [`src/LEDFeedback.cpp`](../src/LEDFeedback.cpp)
**Revision History**: Initial documentation
The LED Feedback component provides visual status indication through addressable LED strips (NeoPixel compatible). It offers multiple display modes including fading effects, level indicators, and tri-color blinking patterns that can be controlled via Modbus.
## REQUIREMENTS
- Digital output pin connected to WS2812B/SK6812 compatible LED strip
- 5V power supply for the LED strip (separate from microcontroller logic)
- Modbus TCP connection for remote control
## FEATURES
- Multiple display modes:
- OFF: All LEDs turned off
- FADE_R_B: Smooth color transition between red and blue
- RANGE: Level indicator (0-100%) using lit LEDs
- TRI_COLOR_BLINK: Three-section traffic light style blinking (red, yellow, green)
- Modbus control interface for mode selection and parameters
- Adjustable update rate for animations
- Configurable pixel count to support different strip lengths
## DEPENDENCIES
- [Adafruit_NeoPixel](https://github.com/adafruit/Adafruit_NeoPixel) - Library for controlling addressable LED strips
- [ArduinoLog](https://github.com/thijse/Arduino-Log) - Logging functionality
- [ModbusTCP](../src/modbus/ModbusTCP.h) - For Modbus communication
```mermaid
graph TD
LEDFeedback --> Component
LEDFeedback --> Adafruit_NeoPixel
LEDFeedback --> ModbusTCP
LEDFeedback --> ArduinoLog
LEDFeedback --> Bridge
```
## BEHAVIOUR
```mermaid
stateDiagram-v2
[*] --> OFF
OFF --> FADE_R_B: Modbus write mode=1
OFF --> RANGE: Modbus write mode=2
OFF --> TRI_COLOR_BLINK: Modbus write mode=3
FADE_R_B --> OFF: Modbus write mode=0
FADE_R_B --> RANGE: Modbus write mode=2
FADE_R_B --> TRI_COLOR_BLINK: Modbus write mode=3
RANGE --> OFF: Modbus write mode=0
RANGE --> FADE_R_B: Modbus write mode=1
RANGE --> TRI_COLOR_BLINK: Modbus write mode=3
RANGE: Update level via Modbus
TRI_COLOR_BLINK --> OFF: Modbus write mode=0
TRI_COLOR_BLINK --> FADE_R_B: Modbus write mode=1
TRI_COLOR_BLINK --> RANGE: Modbus write mode=2
```
## TODOS
### PERFORMANCE
- Consider power consumption optimization for battery-powered applications
- Investigate using DMA-based LED control to reduce CPU usage
- Add brightness control via Modbus to manage power usage
### SECURITY
- Validate Modbus values more strictly to prevent unexpected behavior
- Consider adding access control for mode changes
### COMPLIANCE
- Verify EMC compliance when LEDs change rapidly (potential for EMI)
- Ensure ADA compliance for visual indicators in public/commercial settings
### RECOMMENDATIONS
- Use adequate power supply for LED strips (60mA per pixel at full brightness)
- Consider adding a level-shifting circuit when connecting 3.3V microcontrollers to 5V LED strips
- Add physical protection for LEDs in industrial environments
- Implement custom modes for specific application requirements
## EXAMPLE
This example shows how to initialize and mount an LED Feedback component in an application:
```cpp
#ifdef PIN_LED_FEEDBACK_0
ledFeedback_0 = new LEDFeedback(
this, // owner
PIN_LED_FEEDBACK_0, // pin
LED_PIXEL_COUNT_0, // pixelCount
ID_LED_FEEDBACK_0, // id
LED_FEEDBACK_0_MB_ADDR // modbusAddress
);
if (ledFeedback_0)
{
components.push_back(ledFeedback_0);
Log.infoln(F("LEDFeedback_0 initialized. Pin:%d, Count:%d, ID:%d, MB:%d"),
PIN_LED_FEEDBACK_0, LED_PIXEL_COUNT_0,
ID_LED_FEEDBACK_0, LED_FEEDBACK_0_MB_ADDR);
}
else
{
Log.errorln(F("LEDFeedback_0 initialization failed."));
}
#endif
```
### References