MATLAB Examples

Control Two Adafruit NeoPixels Simultaneously

This example shows how to use the MATLAB® Support Package for Arduino® Hardware to control two Adafruit NeoPixel LED Strips simultaneously.


Hardware Requirements

  • Arduino Uno board
  • Adafruit NeoPixel RGB Strip with 30 pixels
  • Adafruit NeoPixel RGBW Strip with 60 pixels
  • External 5V power supply
  • 1000uF capacitor

Hardware Setup

  • Connect DIN pin on NeoPixel RGB strip to D6 on Arduino board.
  • Connect DIN pin on NeoPixel RGBW strip to D7 on Arduino board.
  • Connect VCC, GND pin to external 5V power supply (recommended current rating of 5 Amp or more for this example).
  • Connect 1000uF capacitor between the power supply terminals to supress voltage spikes.

Create Arduino Instance

Create Arduino object

a = arduino('COM10', 'Uno', 'Libraries', 'Adafruit/NeoPixel')
a = 

  arduino with properties:

                    Port: 'COM10'
                   Board: 'Uno'
           AvailablePins: {'D2-D13', 'A0-A5'}
               Libraries: {'Adafruit/NeoPixel'}

Create NeoPixel objects

neostrip1 = addon(a, 'Adafruit/NeoPixel', 'D6', 30, 'NeoPixelType', 'GRB')
neostrip2 = addon(a, 'Adafruit/NeoPixel', 'D7', 60, 'NeoPixelType', 'GRBW')
neostrip1 = 

  NeoPixel with properties:

               Pins: 'D6'
          NumPixels:  30
       NeoPixelType: 'GRB'
         Brightness:  0.250

neostrip2 = 

  NeoPixel with properties:

               Pins: 'D7'
          NumPixels:  60
       NeoPixelType: 'GRBW'
         Brightness:  0.250

Write the Colors to Produce Gradient Effect

Define desired colorMaps

The colormap returns an array of RGB values that represent gradually changing colors from one color to another. The use of the hsv function creates a rainbow effect, while the lines function has various contrast colors. Note that we must append zeros to colors2 because the second strip is a RGBW strip, while the colormap function returns RGB values only.

colors1 = hsv(255);
colors2 = [lines(255), zeros([255, 1])];

Iteratively update colors

As the number of pixels (30 or 60) is less than the number of selected colors (i.e. 255), using circshift we can show all the colors from colors1 and colors2 on respective NeoPixel strips by circularly shifting the color window.

for idx = 1:25
    % Perform a circular shift the colors
    colors1 = circshift(colors1, [1, 0]);
    colors2 = circshift(colors2, [1, 0]);

    % Write colors to neoPixel strips
    writeColor(neostrip1, 1:neostrip1.NumPixels, colors1(1:neostrip1.NumPixels, :));
    writeColor(neostrip2, 1:neostrip2.NumPixels, colors2(1:neostrip2.NumPixels, :));

Clean Up

clear neostrip2
clear neostrip1
clear a