#include <Adafruit_NeoPixel.h>
#define PIN            4
#define NUMPIXELS      60
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

int LED_HUE = 64;
char LED_BRIT = 180;
char LED_PIX = 60;
char LED_PIX_POS = 0;
char LED_PIX_ANIM = 1;
char LED_PIX_SPEED = 0;
char LED_FADE_SPEED = 0;
char LED_HUE_SPEED = 0;
int anim_phase;
int fade_phase;
int hue_phase;
bool fadegodown;
bool animgoleft;

void setup() {
  pixels.begin();
  pixels.show(); // Initialize all pixels to 'off'
  pixels.setBrightness(255);
  
  
}

void loop() {    //------------------- void loop --------------------------

  if(LED_PIX_ANIM == 0){ pixels.clear(); pixels.show(); }
  if(LED_PIX_ANIM == 1){ noanim(); }
  if(LED_PIX_ANIM == 2){ anim1(); }

  readPots();

}        //------------------- void loop end --------------------------




void noanim(){
  pixels.clear();
  for(int i=0; i<LED_PIX; i++){
    pixels.setPixelColor(i+(60-LED_PIX)/2+LED_PIX_POS, pixels.ColorHSV(LED_HUE*LED_HUE, 255, LED_BRIT));
    readPots();
  }
  pixels.show();
}



void anim1(){
  pixels.clear();
  for(int i=0; i<LED_PIX; i++){
    pixels.setPixelColor(i-LED_PIX+anim_phase, pixels.ColorHSV(hue_phase*hue_phase, 255, fade_phase));
    readPots();
  }
  pixels.show();
  delay(50-LED_PIX_SPEED);
  
  if(fadegodown==0){ fade_phase = fade_phase + LED_FADE_SPEED; fade_phase = constrain(fade_phase,0,255); if(fade_phase>254){fadegodown=1;}}
  else if(fadegodown==1){ fade_phase = fade_phase - LED_FADE_SPEED; fade_phase = constrain(fade_phase,0,255); if(fade_phase<1){fadegodown=0;} }
  
  hue_phase  = hue_phase  + LED_HUE_SPEED;
  if(hue_phase>255){hue_phase=1;}
  
  if(animgoleft==0){ anim_phase = anim_phase + LED_PIX_SPEED/2; if(anim_phase>119-(60-LED_PIX)){animgoleft=1;} }
  else if(animgoleft==1){ anim_phase = anim_phase - LED_PIX_SPEED/2; if(anim_phase<1){animgoleft=0;} }
  
}


void readPots() {
    LED_PIX_ANIM = map(analogRead(A7),0,1023,0,2);
    LED_BRIT = map(analogRead(A6),0,1023,0,255);
    LED_HUE = map(analogRead(A5),0,1023,0,230);
    LED_PIX = map(analogRead(A4),0,1023,0,60);
    
    LED_PIX_POS = map(analogRead(A3),0,1023,0,63);
    LED_FADE_SPEED = map(analogRead(A2),0,1023,0,120); if(LED_FADE_SPEED>0 && LED_FADE_SPEED<10){ LED_FADE_SPEED=10; }
    LED_HUE_SPEED = map(analogRead(A1),0,1023,0,30);
    LED_PIX_SPEED = map(analogRead(A0),0,1023,0,20);
}