How To: Smart LED Strip
The Smart LED Strip provides you an easy way to show values like temperature as a color range, blinking etc.
You need to use a Power Module that takes care of power and communication between Core Module and the LED Strip.
References
Available Colors
LEDs featured on our strip are RGBW. This means they include a separate light source for Red, Green, Blue and White (warm white) colors.
To get almost cool white light, you have to set every single color to the same value as the other ones.
Example
In this example, you will set 35 first LEDs each 5 points brighter than the previous one. The blue color will be used.
The _led_strip_buffer
is mandatory for the LED strip to work. It is basically a description of the LED strip for the Core Module.
To set the color of the pixel(LED on the strip) you will have to provide some information. This is done with the twr_led_strip_set_pixel_rgbw(twr_led_strip_t *self, int position, uint8_t r, uint8_t g, uint8_t b, uint8_t w)
. The arguments of the function are:
*self
- an instance of the LED strip, most likely&led_strip
position
- pixel (LED) on the strip that should be set (starts from 0, not 1)r, g, b, w
- representation of how strongly every color should shine, values must be between 0 (minimum) and 255 (maximum)
For the changes to take effect, you have to call twr_led_strip_write(&led_strip);
. If you don't do that, nothing will happen on the strip.
Set Few LEDs Code Example
#include <application.h>
twr_led_strip_t led_strip;
static uint32_t _dma_buffer[144 * 4 * 2]; // count * type * 2
const twr_led_strip_buffer_t _led_strip_buffer =
{
.type = TWR_LED_STRIP_TYPE_RGBW,
.count = 144,
.buffer = _dma_buffer
};
void application_init(void)
{
twr_module_power_init();
twr_led_strip_init(&led_strip, twr_module_power_get_led_strip_driver(), &_led_strip_buffer);
uint8_t blue = 0;
for (int i = 0; i < 35; ++i) {
twr_led_strip_set_pixel_rgbw(&led_strip, i, 0, 0, blue, 0);
blue += 5;
}
twr_led_strip_write(&led_strip);
}
You can limit maximum brightness of the entire led strip with function twr_led_strip_set_brightness(twr_led_strip_t *self, uint8_t brightness)
.
LED Strip Effects
There are several effect functions available.
These effects look great and you can maybe use them for some signalization without the need of coding them yourself.
If you want to try out these effects, there is a skeleton code for the 144 LEDs strip.
LED Strip Effects Skeleton Code Example
#include <application.h>
twr_led_strip_t led_strip;
static uint32_t _dma_buffer[144 * 4 * 2]; // count * type * 2
const twr_led_strip_buffer_t _led_strip_buffer =
{
.type = TWR_LED_STRIP_TYPE_RGBW,
.count = 144,
.buffer = _dma_buffer
};
void application_init(void)
{
twr_module_power_init();
twr_led_strip_init(&led_strip, twr_module_power_get_led_strip_driver(), &_led_strip_buffer);
// place examples here
}
Test Effect
This is a simple effect that you can just use to check if all the colors of the LED strip work well
twr_led_strip_effect_test(&led_strip);
Rainbow Effect
The LED strip will light up in the color of a rainbow and will fluently change these colors in circles (what ends on one side of the strip starts on the other side).
The second parameter represents the speed of change. Lower number = quicker changes.
twr_led_strip_effect_rainbow_cycle(&led_strip, 100);
There is also a function twr_led_strip_effect_rainbow(&led_strip, 100);
which acts almost the same, but it takes a while before color appears on one end of a strip after disappearing from another.
Color Wipe Effect
Fills the entire strip pixel by pixel with one color
twr_led_strip_effect_color_wipe(&led_strip, 0x10000000, 20);
The first parameter takes color in hex format (this particular is red color) and the second parameter is speed. The lower, the quicker.
Theater Effect
Cause the LEDs to switch in the pattern shown below: -
means that LED is off, X
means that LED is on.
twr_led_strip_effect_color_wipe(&led_strip, 0x10000000, 20);
Pattern:
X–X–X–X–X–X -X–X–X–X–X– –X–X–X–X–X- X–X–X–X–X–X
The first parameter is a color in hex format (stored in `uint32_t), and the second one is the speed of changes. The lower, the quicker.
Stroboscope Effect
ICicle Effect
Pulse Color Effect
Thermometer Effect
Effect Stop
You can easily stop the effect with this function
twr_led_strip_effect_stop(&led_strip);
Stop LED Strip Effect Code Example
#include <application.h>
twr_led_strip_t led_strip;
static uint32_t _dma_buffer[144 * 4 * 2]; // count * type * 2
const twr_led_strip_buffer_t _led_strip_buffer =
{
.type = TWR_LED_STRIP_TYPE_RGBW,
.count = 144,
.buffer = _dma_buffer
};
void stop_effect(void* param) {
(void) param;
twr_led_strip_effect_stop(&led_strip);
}
void application_init(void)
{
twr_module_power_init();
twr_led_strip_init(&led_strip, twr_module_power_get_led_strip_driver(), &_led_strip_buffer);
twr_led_strip_effect_theater_chase_rainbow(&led_strip, 100);
twr_scheduler_register(stop_effect, NULL, twr_tick_get() + 3000);
}