Table of Contents Table of Contents
Previous Page  4 / 24 Next Page
Show Menu
Previous Page 4 / 24 Next Page
Page Background

south-east european




Mix and math

A method for RGBA color mixing using Bluetooth


low energy communications

Namrata Dalvi, Microchip Technology

Controlling the color balance of light-emitting diodes (LEDs) accurately and wirelessly

can be achieved using an 8-bit microcontroller and a Bluetooth


4.1 low energy module

to control the red, green, blue, alpha (RGBA) color space. The demonstration board

shown in Fig. 1 has four LEDs – one each of red, green, blue and amber. The brightness

of each of these LEDs is controlled through a pulse-width modulation (PWM) duty cycle.

This can be achieved using Microchip’s PIC16F1579 microcontroller, which has four

16-bit PWMs that are used to drive the LEDs. The 16-bit PWMs allow for precise control

over the intensity of each color LED and the mixing of different RGBA brightness levels

to create different colors.

Using mTouch


capacitive touch sensing technology enables the operation of two

capacitive touch sliders. The on-board RN4020 Bluetooth module is used for receiving

the PWM values from the Android™ mobile application or desktop program using Blue-

tooth low energy communication. The board is powered by a 1.5V AAA battery.

Bluetooth communications

There are two types of Bluetooth devices – Bluetooth classic and Bluetooth low ener-

gy. A Bluetooth low energy device can only communicate with another BLE device or

Bluetooth dual-mode device, which has both classic and low energy capabilities. Hence,

the master host device must be BLE or Bluetooth dual-mode to communicate with the

RN4020 module used on the RGBA board. The module complies with the Bluetooth

core v4.1 specification and is controlled by the user through input and output lines and a

UART interface. The UART supports ASCII commands to control or configure the mod-

ule for any requirement based on the application.

Application software

When the board is operating in mode two, the desired LED color is selected from the

chromaticity chart in the chromaticity selector application either from the RGBA color

mixing desktop or Android application. The red, blue, green and amber PWM duty cy-

cles are calculated by the application. Duty cycle values are passed on to the board by a

Bluetooth low energy connection. The desktop application used was developed using

Visual Studio C#.NET. The application follows the MVC principle with various classes.

The RGBA view controller class acts as the GUI or view manager and as the controller

of the application. This class is at the top of the hierarchy responsible for making new

objects of classes and performing dependency injection. It also handles all the GUI

events and calls appropriate methods. The RGBA calculation class is responsible for

finding out if the selected point is either inside the RGB or the RGA triangle or outside of

these triangles, and calculates the duty cycle per color for all LEDs. The matrix 3x3 class

implements all 3x3 matrix math operations such as inverse, determinant, transpose, co-

factor and multiply. The Vector 3 class implements a column vector of size three to be

used in matrix maths for the matrix 3x3 class. The RGBA data class is a custom data

type to store the duty cycle values of all colors.

In the wireless communications wrapper class, the interface contains all the methods

required by the wireless communications to implement the RGBA application. This inter-

face can be used by any wireless communications method such as Bluetooth low ener-

gy and Bluetooth classic. The Bluetooth low energy communications are done using the

RN4020 PICtail™ card through RS232 communications by implementing this interface

for the RGBA board. The programmer can make a new class to implement wireless

communications through built-in Bluetooth low energy libraries in Visual Studio or third

party libraries. This interface decouples the implementation of the communications from

the actual controller, so if new communications are implemented, the view controller and

other classes will not change. The RGBA Bluetooth low energy communications via the

RN4020 device class implements the wireless communications wrapper interface for

Bluetooth low energy communications with the RGBA board. The PICtail card is used

and connected to a PC via the UART or RS232 port. The serial communications are

established and commands are sent for Bluetooth low energy communications.

The Bluetooth low energy device information class stores the basic information about

the remote connectivity device - its name, address and supported server service. This

information is used to identify and connect to a remote device. In the search result

delegate class, the delegate services the event from the Bluetooth low energy class

when it finishes the search for devices and the devices are available as a list for the

user. The necessary time for the search operation is ten seconds. With the connection

state change delegate class, the delegate services the event from the Bluetooth low

energy class to determine if the master PICtail card is connected to a remote device or

not and displays the current connection state to the user. The constants class stores all

the constants required for the application, such as RN4020 module commands and

responses, service and characteristic UUIDs and so on.

The Java™ application class for the Android operating system follows the MVC princi-

ple closely as well, using Android activity classes that are structurally similar to the

desktop application. However, the Android application uses the built-in Bluetooth low

energy hardware of the Android phone. The Android operating system provides all the

necessary libraries for Bluetooth low energy communications with all required events

and call backs. The RGBA view activity class is similar to the view controller class on a

desktop except for the GUI controls, which are defined in an XML file instead of a class.


This article has shown how a 16-bit PWM allows for precise control over the intensity

of each LED. The RGBA LED color mixing board described has slider capacitive touch

buttons for color input and brightness control functions. A Bluetooth 4.1 low energy

module was used for communications so the user could send PWM values to the RGBA

board to output the desired color. The color was selected on a chromaticity selector

application on a Windows desktop or on an Android-based phone.

Fig. 1: RGBA color mixing demonstration board

Fig. 2: CIE 1931 color space with RGBA LED color gamut

Fig. 3: Interfaces between the Bluetooth low energy

module on the left and the microcontroller


The light produced by the LEDs varies due to several factors. The brightness, mea-

sured in lumens, will vary for LEDs of different types, and between LEDs of the same

type. For color LEDs, the specific color measured by the chromaticity values will differ

from one LED to another. Small samples of a particular brand of LEDs were measured to

develop a brightness and chromaticity profile. The values were then used as typical

values in the hardware design and in the software’s chromaticity calculations. This pro-

cess is called color tuning. The resistor values were fixed so that each color produced

the same number of lumens. The LED series resistors are red 820

, blue 400

, green


and amber 500


Operating modes

There are two modes of operation: the first is hue saturation value plus white (HSVW)

and brightness sliders mode; and the second is chromaticity selector using Bluetooth

low energy. The board initially powers-up in mode one. There are two capacitive touch

sliders on the board, one for color input and the other for controlling the brightness

levels. If the first slider is touched while in slider mode, the color selected on the slider is

output on the LEDs. The selected color is displayed until another input is received. The

brightness of a particular color can be controlled with the other slider.

For the second mode, the color values (PWM) are selected using an Android-based

mobile application or Windows-based desktop application. The respective PWM values

are then sent to the board via a Bluetooth connection. The application uses the CIE

1931 XY chromaticity chart, see Fig. 2.

The exact PWM values for the selected color and brightness levels are computed and

sent to the RGBA board over the Bluetooth connection. The Bluetooth module on the

board then receives the PWM values, which are used by the RGBA board firmware to

display the selected color.

The chromaticity selector application GUI consists of the CIE 1931 xy chromaticity

chart. The CIE 1931 color space shows a wide range of colors in terms of chromaticity

(x) and luminance (y). The color and brightness levels of red, green and blue LEDs

mapped onto the CIE color space define a triangle that encompasses all possible

shades that can be generated by the output of three devices; this is known as the

color gamut.

To obtain a better range of colors, an amber LED has been added. The xy data for the

amber LED are mapped onto the CIE 1931 xy color space. This defines another triangle

between the red, amber and green coordinates. Mixing red, amber and green in different

proportions produces the colors within the color gamut in Fig. 2. The PC GUI and the

Android applications used in this mode implement this color-mixing algorithm to calcu-

late the PWM duty cycle values necessary to produce the desired color.

The chromaticity selector application sends the PWM values over a Bluetooth connec-

tion. This connectivity module will be able to communicate with mobile phones and PCs

that contain Bluetooth v4.0 [and higher] transceivers. The module is primarily used for

receiving duty cycle values from master devices that run the chromaticity selector appli-

cation. The pin-to-pin configuration between the microcontroller and the BLE module is

shown in Fig. 3.