122 lines
3.9 KiB
Markdown
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 |