Files
Florian 0d338cc5c5 [LED] Add LED STRIP macros and a third Addressable pin (#2063)
* [LED] Add LED STRIP macros and a third Addressable pin

---------

Co-authored-by: Florian <1technophile@users.noreply.github.com>
2024-09-19 20:36:46 -05:00
..

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:

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:

#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

LEDManager ledManager;
ledManager.addLEDStrip(int pin, int numLeds);

Setting LED Mode

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

ledManager.setBrightness(brightness);
  • brightness: Global brightness value (0-255)

Updating LEDs

Call this method in your main loop to update LED states:

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.