#include <FastLED.h>
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif

int button = 2;
int buttonState = 0;
int pin = 5; // digital pin used
int NUMPixels = 120; // mumber of neopixels in the strip


int mode = 0; //   1- off   0- magicRainbow


int whichColor = 0;


Adafruit_NeoPixel pixels(NUMPixels, pin, NEO_GRB + NEO_KHZ800);

void setup() {
  pinMode(button, INPUT);

  Serial.begin(9600);
  pixels.begin();
  pixels.setBrightness(255); // intensity of the neopixels

}

void loop() {

  buttonState = digitalRead(button);
  if (buttonState == 1) {
    mode = 1;
  } else {
    mode = 0;
  }

  switch (mode) {

    case 0: magicRainbow(); break;

    case 1: off(); break ;

  }
}

void magicRainbow() {
  for (int i = 0; i < NUMPixels; i++) {
    pixels.setPixelColor(i, Wheel(whichColor));
  }
  pixels.show();
  whichColor = (whichColor + 1) % 256;
}

void off() {
  for (int i = 0; i <= NUMPixels; i++) {
    pixels.setPixelColor(i, pixels.Color(0, 0, 0));
  }
  pixels.show();
}

uint32_t Wheel(byte ledStrip) {
  if (ledStrip < 85) {
    return pixels.Color(ledStrip * 3, 255 - ledStrip * 3, 0);
  }
  else if (ledStrip < 170) {
    ledStrip -= 85;
    return pixels.Color(255 - ledStrip * 3, 0, ledStrip * 3);
  }
  else {
    ledStrip -= 170;
    return pixels.Color(0, ledStrip * 3, 255 - ledStrip * 3);
  }

}
