Arduino Code

The Arduino code presented below works equally well on all versions of GEMMA: v1, v2 and M0. But if you have an M0 board, consider using the CircuitPython code on the next page of this guide!

The Code

The Gemma is programmed via USB with the Arduino IDE. You can modify and customize the code to fit your setup. For starters, we can easy change the pin outs and number of NeoPixels. In our setup, our tree topper used 36 NeoPixels.

If your new to using the Gemma and the Arduino IDE, check out this guide for the original Gemma  or this guide for the Gemma M0 for setting up. Have some extra time on your hands? Learn how to customize the code to change the animation sequence!

We slightly modified another project’s code to use a single purple color, but you can change it to whatever you like! Look for this line where a hexadecimal color value is listed (around line 10):

Download: file
uint32_t color = 0xA000A0;

Just replace "#A000A0" with whatever hex color value you want, it's that easy!

#include <Adafruit_NeoPixel.h>

#define PIN       1
#define NUM_LEDS 36

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUM_LEDS, PIN);

uint8_t  mode   = 0,        // Current animation effect
         offset = 0;        // Position of spinner animation
uint32_t color  = 0xA000A0; // Purple
uint32_t prevTime;          // Time of last animation mode switch

void setup() {
  pixels.begin();
  pixels.setBrightness(255); // Full brightness
  prevTime = millis();       // Starting time
}

void loop() {
  uint8_t  i;
  uint32_t t;

  switch(mode) {

   case 0: // Random sparkles - just one LED on at a time!
    i = random(NUM_LEDS);           // Choose a random pixel
    pixels.setPixelColor(i, color); // Set it to current color
    pixels.show();                  // Refresh LED states
    // Set same pixel to "off" color now but DON'T refresh...
    // it stays on for now...both this and the next random
    // pixel will be refreshed on the next pass.
    pixels.setPixelColor(i, 0);
    delay(10);                      // 10 millisecond delay
    break;
 
   case 1: // Spinny wheel
    for(i=0; i<NUM_LEDS; i++) {    // For each LED...
      uint32_t c = 0;              // Assume pixel will be "off" color
      if(((offset + i) & 7) < 2) { // For each 8 pixels, 2 will be...
        c = color;                 // ...assigned the current color
      }
      pixels.setPixelColor(i, c);  // Set color of pixel 'i'
    }
    pixels.show();                 // Refresh LED states
    delay(90);                     // 90 millisecond delay
    offset++;                      // Shift animation by 1 pixel on next frame
    break;

    // More animation modes could be added here!
  }

  t = millis();                    // Current time in milliseconds
  if((t - prevTime) > 8000) {      // Every 8 seconds...
    mode++;                        // Advance to next animation mode
    if(mode > 1) {                 // End of modes?
      mode = 0;                    // Start over from beginning
    }
    pixels.clear();                // Set all pixels to 'off' state
    prevTime = t;                  // Record the time of the last mode change
  }
}

Test Code

Once you have the code loaded to the Gemma from the Arduino IDE, it should automatically run and make the Gemma to light up the NeoPixel strip. If your having problems or issues getting it to work, check your connections and be sure to skim the Gemma and NeoPixel guides.

This guide was first published on Dec 06, 2013. It was last updated on Dec 06, 2013. This page (Arduino Code) was last updated on Jul 15, 2019.