Project 5.01 Cycling Colors with a Button

The goal of this project is to change the color of the Neopixels every time SW1 is pressed. The colors will cycle between red, green and blue.

Project Code:

/////////////////////////////////////////////////
// 5.01 Cycling Colors With a Button

#include <Adafruit_NeoPixel.h>

byte dataPin = 10;
byte numberOfPixels = 2;
byte brightness = 10;
byte LEDSetting = 0;

byte SW1 = 1;
byte buttonState = 0;
bool pressed = 0;

Adafruit_NeoPixel pixels(numberOfPixels, dataPin, NEO_GRB + NEO_KHZ800);
void setup() {
  pinMode(SW1, INPUT);

  pixels.begin();
  pixels.setBrightness(brightness);
  pixels.show();
}

void loop() {
  buttonState = digitalRead(SW1);

  if (buttonState == pressed) {
    LEDSetting++;

    if (LEDSetting > 2) { 
      LEDSetting = 0;
    }

    if (LEDSetting == 0) {
      pixels.setPixelColor(0, pixels.Color(255, 0, 0)); 
      pixels.setPixelColor(1, pixels.Color(255, 0, 0)); 
    }
    else if (LEDSetting == 1) {
      pixels.setPixelColor(0, pixels.Color(0, 255, 0)); 
      pixels.setPixelColor(1, pixels.Color(0, 255, 0)); 

    }
    else {
      pixels.setPixelColor(0, pixels.Color(0, 0, 255)); 
      pixels.setPixelColor(1, pixels.Color(0, 0, 255)); 

    }
    pixels.show();

    delay(250);
  }
}
///////////////////////////////////////////////////

*If you’re copying and pasting the code, or typing from scratch, delete everything out of a new Arduino sketch and paste / type in the above text.

In the loop() function,  the first thing we do is check to see if a SW1 is being pressed.

buttonState = digitalRead(SW1);

if (buttonState == pressed) {

In this example a variable called LEDSetting is used to keep track of which color should be displayed. Every time the button is pressed, this variable is incremented by 1.

LEDSetting++;     

After incrementing that variable, it needs to be checked to see if it is out of the settings range (0 - 2).  If it is, it is reset to 0.

if (LEDSetting > 2) { 
  LEDSetting = 0;
}

Next, the appropriate colors are loaded into the Neopixels based on the LEDSetting variable according to the table below:

LEDSetting Value Neopixel Color
0 Red
1 Green
2 Blue
if (LEDSetting == 0) {
  pixels.setPixelColor(0, pixels.Color(255, 0, 0)); 
  pixels.setPixelColor(1, pixels.Color(255, 0, 0)); 
}
else if (LEDSetting == 1) {
  pixels.setPixelColor(0, pixels.Color(0, 255, 0)); 
  pixels.setPixelColor(1, pixels.Color(0, 255, 0)); 
}
else {
  pixels.setPixelColor(0, pixels.Color(0, 0, 255)); 
  pixels.setPixelColor(1, pixels.Color(0, 0, 255)); 
}

To display the new color we have to update the Neopixels using the show() function.

pixels.show();

Lastly, a crude debounce is used to prevent more than one press being read at a time.

    delay(250);
  }
}
///////////////////////////////////////////////////
Previous
Previous

Project 5.02 Using ColorHSV

Next
Next

Project 5.00 Using the Neopixels