mirror of
https://github.com/1technophile/OpenMQTTGateway.git
synced 2026-03-03 05:54:23 +01:00
* [LED] Add LED STRIP macros and a third Addressable pin --------- Co-authored-by: Florian <1technophile@users.noreply.github.com>
135 lines
4.0 KiB
Markdown
135 lines
4.0 KiB
Markdown
# LEDManager Library
|
|
|
|
## Overview
|
|
|
|
The LEDManager library provides a flexible and easy-to-use interface for controlling LEDs in projects. It supports both addressable LED strips and individual non-addressable LEDs, offering various modes of operation such as static, blinking, and pulsing. The library is designed to work seamlessly with PlatformIO and can be easily configured using build flags.
|
|
|
|
## Features
|
|
|
|
- Support for both addressable LED strips and individual non-addressable LEDs
|
|
- Multiple operation modes: OFF, STATIC, BLINK, and PULSE
|
|
- Individual control of LEDs within each strip (for addressable LEDs)
|
|
- Global brightness control
|
|
- Queueing of LED states for complex sequences
|
|
- Automatic return to previous state after temporary modes
|
|
- Compatible with PlatformIO build flags for easy configuration
|
|
- Customizable color schemes
|
|
|
|
## Installation
|
|
|
|
1. Clone this repository or download the ZIP file.
|
|
2. Extract the contents to your PlatformIO project's `lib` directory.
|
|
|
|
## Configuration
|
|
|
|
Configure the LEDManager library using build flags in your `platformio.ini` file:
|
|
|
|
```ini
|
|
build_flags =
|
|
; For addressable LEDs:
|
|
-DLED_ADDRESSABLE=true
|
|
; For non-addressable LEDs, comment out the line above
|
|
|
|
; If the Addressable LED requires power
|
|
-DLED_ADDRESSABLE_POWER=15
|
|
|
|
; Optional timing configurations:
|
|
-DBLINK_INTERVAL=500
|
|
-DPULSE_INTERVAL=30
|
|
-DFADE_AMOUNT=5
|
|
```
|
|
|
|
## Usage
|
|
|
|
Here's a basic example of how to use the LEDManager library:
|
|
|
|
```cpp
|
|
#include "LEDManager.h"
|
|
|
|
LEDManager ledManager;
|
|
|
|
void setup() {
|
|
|
|
#ifdef LED_ADDRESSABLE
|
|
ledManager.addLEDStrip(5, 30); // Add addressable LED strip on pin 5 with 30 LEDs
|
|
#else
|
|
ledManager.addLEDStrip(5, 1); // Add non-addressable LED on pin 5
|
|
ledManager.addLEDStrip(6, 1); // Add non-addressable LED on pin 6
|
|
#endif
|
|
|
|
ledManager.setBrightness(128); // Set global brightness to 50%
|
|
}
|
|
|
|
void loop() {
|
|
#ifdef LED_ADDRESSABLE
|
|
// Set all LEDs on the first strip to static green
|
|
ledManager.setMode(0, -1, LEDManager::STATIC, LED_COLOR_GREEN);
|
|
|
|
// Blink first 5 LEDs red for 3 times on the first strip
|
|
for (int i = 0; i < 5; i++) {
|
|
ledManager.setMode(0, i, LEDManager::BLINK, LED_COLOR_RED, 3);
|
|
}
|
|
#else
|
|
// Set first LED to static green
|
|
ledManager.setMode(0, 0, LEDManager::STATIC, LED_COLOR_GREEN);
|
|
|
|
// Blink second strip LED red
|
|
ledManager.setMode(1, 0, LEDManager::BLINK, LED_COLOR_RED, 3);
|
|
#endif
|
|
|
|
ledManager.update();
|
|
delay(100);
|
|
}
|
|
```
|
|
|
|
## API Reference
|
|
|
|
### Initialization and Setup
|
|
|
|
```cpp
|
|
LEDManager ledManager;
|
|
ledManager.addLEDStrip(int pin, int numLeds);
|
|
```
|
|
|
|
### Setting LED Mode
|
|
|
|
```cpp
|
|
ledManager.setMode(int stripIndex, int ledIndex, Mode mode, uint32_t color, int durationOrBlinkCount = -1);
|
|
```
|
|
|
|
- `stripIndex`: Index of the LED strip (0-based)
|
|
- `ledIndex`: LED index within the strip (0-based) or -1 for all LEDs in the strip (addressable LEDs only)
|
|
- `mode`: `LEDManager::OFF`, `LEDManager::STATIC`, `LEDManager::BLINK`, or `LEDManager::PULSE`
|
|
- `color`: Color value (use predefined colors from LEDColorDefinitions.h or custom 24-bit RGB values)
|
|
- `durationOrBlinkCount`: Duration for STATIC mode (in milliseconds), blink/pulse count for BLINK/PULSE modes (-1 for infinite)
|
|
|
|
### Setting Brightness
|
|
|
|
```cpp
|
|
ledManager.setBrightness(brightness);
|
|
```
|
|
|
|
- `brightness`: Global brightness value (0-255)
|
|
|
|
### Updating LEDs
|
|
|
|
Call this method in your main loop to update LED states:
|
|
|
|
```cpp
|
|
ledManager.update();
|
|
```
|
|
## Advanced Configuration
|
|
|
|
You can customize the behavior of the LEDManager by defining the following build flags:
|
|
|
|
- `BLINK_INTERVAL`: Sets the interval (in milliseconds) between blink states (default: 500)
|
|
- `PULSE_INTERVAL`: Sets the interval (in milliseconds) between pulse updates (default: 30)
|
|
- `FADE_AMOUNT`: Sets the increment/decrement value for pulsing (default: 5)
|
|
|
|
## Contributing
|
|
|
|
Contributions to the LEDManager library are welcome! Please feel free to submit a Pull Request.
|
|
|
|
## License
|
|
|
|
This library is released under the LGPL V3 License. |