Tiny-WS2812  1.0.0
A tiny cross-platform WS2812 LED Strip driver
Macros | Functions | Variables
blink_loop.c File Reference

Blinks one or more WS2812 devices using a more memory efficient method than the blink_array.c example. More...

#include <Arduino.h>
#include <ws2812.h>
Include dependency graph for blink_loop.c:

Go to the source code of this file.

Macros

#define N_LEDS   8
 Number of LEDs on your WS2812 device(s)
 
#define DATA_PINS   {8, 9}
 Arduino pin(s) used to program the WS2812 device(s). Must share same port! (See https://www.arduino.cc/en/Reference/PortManipulation)
 
#define RESET_TIME   50
 Reset time in microseconds (50us recommended by datasheet)
 
#define COLOR_ORDER   grb
 Color order of your WS2812 LEDs (Typically grb or rgb)
 

Functions

void setup ()
 
void loop ()
 

Variables

uint8_t pins [] = DATA_PINS
 Data pins.
 
ws2812 ws2812_dev
 Device struct.
 
ws2812_rgb white = {255,255,255}
 
ws2812_rgb black = {0, 0 ,0}
 

Detailed Description

Blinks one or more WS2812 devices using a more memory efficient method than the blink_array.c example.

Author
Patrick Pedersen
Date
2021-04-09

The following example showcases how the Tiny-WS2812 library can be used on AVR platforms supporting the Arduino framework to blink an entire WS2812 device in white. Unlike the other blink example, we do not allocate a memory expensive array for every single LED here, but instead loop the transmission of a single RGB value until all WS2812 LEDs have been set.

The advantage of this method is that we can save allot of memory, the disadvantage is that this method is more prone to programming mistakes.

Note
Please ensure that the WS2812_TARGET_PLATFORM_ARDUINO_AVR macro is defined during compilation. This can either be done by specifying -DWS2812_TARGET_PLATFORM_ARDUINO_AVR in the build flags, or by uncommenting the #define WS2812_TARGET_PLATFORM_ARDUINO_AVR directive at the top of this file.

Definition in file blink_loop.c.

Function Documentation

◆ loop()

void loop ( )

Continously blinks the entire WS2812 device in white.

Definition at line 82 of file blink_loop.c.

83 {
84  // Prepare to transmit data
86 
87  // Program all LEDs to white
88  for (unsigned int i = 0; i < N_LEDS; i++) {
89  ws2812_tx(&ws2812_dev, &white, sizeof(white)/sizeof(ws2812_rgb));
90  // THIS LOOP NEEDS TO RUN UNINTERRUPTED!
91  }
92 
93  // Close transmission
95 
96  // Wait 500ms
97  delay(500);
98 
99  // Prepare to transmit data
101 
102  // Program all LEDs to black (off)
103  for (unsigned int i = 0; i < N_LEDS; i++) {
104  ws2812_tx(&ws2812_dev, &black, sizeof(black)/sizeof(ws2812_rgb));
105  // THIS LOOP NEEDS TO RUN UNINTERRUPTED!
106  }
107 
108  // Close transmission
110 
111  // Wait 500ms
112  delay(500);
113 }
Data structure to hold RGB color values.
Definition: ws2812_common.h:67
void ws2812_close_tx(ws2812 *dev)
Closes a WS2812 transmission.
Definition: ws2812_avr.c:275
void ws2812_prep_tx(ws2812 *dev)
Prepares the host device for data transmission.
Definition: ws2812_avr.c:159
void ws2812_tx(ws2812 *dev, ws2812_rgb *leds, size_t n_leds)
Transmits RGB values to the provided WS2812 device.
Definition: ws2812_avr.c:264

◆ setup()

void setup ( )

Configures a WS2812 device struct.

Definition at line 63 of file blink_loop.c.

64 {
65  ws2812_cfg cfg; // Device config
66 
67  // Configure the WS2812 device struct
68  cfg.pins = pins;
69  cfg.rst_time_us = RESET_TIME;
70  cfg.order = COLOR_ORDER;
71  cfg.n_dev = sizeof(pins); // Number of devices driven by this struct
72 
73  if (ws2812_config(&ws2812_dev, &cfg) != 0) {
74  // HANDLE ERROR HERE
75  void;
76  }
77 }
ALL PLATFORMS: Data structure to configure a WS2812 device struct.
Definition: ws2812_avr.h:64
uint8_t n_dev
Number of WS2812 device to drive.
Definition: ws2812_avr.h:78
uint8_t rst_time_us
Time required for the WS2812 device(s) to reset in us.
Definition: ws2812_avr.h:76
ws2812_order order
CoColor order of the WS2812 device(s) (ex. rgb, grb, bgr...)
Definition: ws2812_avr.h:77
uint8_t * pins
Array of pins used to program WS2812 devices (Must share the same PORT! (ex. PB0, PB1,...
Definition: ws2812_avr.h:69
uint8_t ws2812_config(ws2812 *dev, ws2812_cfg *cfg)
Configures a WS2812 device struct.
Definition: ws2812_avr.c:126