SK6812 understanding

learned some more about analogRead. pretty much cut and dry. It seems to work but has incredibly slow response time. I understand it will need to make one complete pass through the code before it updates but i put in the print serial command and it's taking 2 trips through the code before it updates. it is put someplace wrong? The code is posted 2 times so i can show the bold where i've made changes.

#include <Adafruit_NeoPixel.h>
#include <EEPROM.h>
#define BRIGHTNESS 5
#define NUM_LEDS 21 
#define PIN 6 
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRBW + NEO_KHZ800);
#define BUTTON 2
byte selectedEffect=0;
int analogPin = 3;
int val;
int fast;


void setup()
{
  strip.begin();
  strip.show(); // Initialize all pixels to 'off'
  digitalWrite (BUTTON, HIGH);  // internal pull-up resistor
  attachInterrupt (digitalPinToInterrupt (BUTTON), changeEffect, CHANGE); // pressed
  strip.setBrightness(BRIGHTNESS);
  Serial.begin(9600);
  
}

// *** REPLACE FROM HERE ***
void loop() { 
  EEPROM.get(0,selectedEffect); 
    if(selectedEffect>8) { 
    selectedEffect=0;
    EEPROM.put(0,0); 
    
  } 
  
  switch(selectedEffect) {
    
    case 1  : { int fast = map(val, 0, 1023, 0, 100);
                // CylonBounce - Color (red, green, blue, white), eye size, speed delay, end pause
                CylonBounce(255, 0, 0, 0, 1, fast, 0);
                
                break;
              }

    case 2  : { int fast = map(val, 0, 1023, 0, 100);
                // CylonBounce - Color (red, green, blue, white), eye size, speed delay, end pause
                CylonBounce(0, 255, 0, 0, 1, fast, 0);
                break;
              }
              
    case 3  : { int fast = map(val, 0, 1023, 0, 100);
                // CylonBounce - Color (red, green, blue, white), eye size, speed delay, end pause
                CylonBounce(0, 0, 255, 0, 1, fast, 0);
                break;
              }

    case 4  : { int fast = map(val, 0, 1023, 0, 100);
                // CylonBounce - Color (red, green, blue, white), eye size, speed delay, end pause
                CylonBounce(0, 0, 0, 255, 1, fast, 0);
                break;
              }
    
    case 5  : { 
                // NewKITT - Color (red, green, blue, white), eye size, speed delay, end pause
                NewKITT(255, 0, 0, 0, 1, 50, 0);
                break;
              }
    case 6  : {
                // NewKITT - Color (red, green, blue, white), eye size, speed delay, end pause
                NewKITT(0, 255, 0, 0, 1, 50, 0);
                break;
              }
    case 7  : {
                // NewKITT - Color (red, green, blue, white), eye size, speed delay, end pause
                NewKITT(0, 0, 255, 0, 1, 50, 0);
                break;
              }
    case 8  : {
                // NewKITT - Color (red, green, blue, white), eye size, speed delay, end pause
                NewKITT(0, 0, 0, 255, 1, 50, 0);
                break;
              }
  }
}

void changeEffect() {
  if (digitalRead (BUTTON) == HIGH) {
    selectedEffect++;
    EEPROM.put(0, selectedEffect);
    asm volatile ("  jmp 0");
  }
}


// *************************
// ** LEDEffect Functions **
// *************************
void CylonBounce(byte red, byte green, byte blue, byte white, int EyeSize, int fast, int ReturnDelay){

  val = analogRead(analogPin);
    Serial.println(fast);
  
  for(int i = 0; i < NUM_LEDS-EyeSize; i++) {
    setAll(0,0,0,0);
    setPixel(i, red/10, green/10, blue/10, white/10);
    for(int j = 1; j == EyeSize; j++) {
    setPixel(i, red, green, blue, white); 
    }
        showStrip();
    delay(fast);
  }

  delay(ReturnDelay);

  for(int i = NUM_LEDS-EyeSize; i > 0; i--) {
    setAll(0,0,0,0);
    for(int j = 1; j == EyeSize; j++) {
     setPixel(i, red, green, blue, white); 
    }
    showStrip();
    delay(fast);
  }
  
  delay(ReturnDelay);
}

void NewKITT(byte red, byte green, byte blue, byte white, int EyeSize, int SpeedDelay, int ReturnDelay){
  OutsideToCenter(red, green, blue, white, EyeSize, SpeedDelay, ReturnDelay);
}
// used by NewKITT
void OutsideToCenter(byte red, byte green, byte blue, byte white, int EyeSize, int SpeedDelay, int ReturnDelay) 
   { 
    for(int i = 0; i <= NUM_LEDS; i++) {
    setAll(0,0,0,0);
    for(int j = 0; j <= 0; j++) {
    setPixel(i+j-1, red, green, blue, white); 
    }
    for(int j = 1; j <= EyeSize+1; j++) {
    setPixel(NUM_LEDS-i, red, green, blue, white); 
    }
    
    showStrip();
    delay(SpeedDelay);
    }
    delay(ReturnDelay);
    }


// ***************************************
// ** FastLed/NeoPixel Common Functions **
// ***************************************

// Apply LED color changes
void showStrip() {
 #ifdef ADAFRUIT_NEOPIXEL_H 
   // NeoPixel
   strip.show();
 #endif
 
}

// Set a LED color (not yet visible)
void setPixel(int Pixel, byte red, byte green, byte blue, byte white) {
 #ifdef ADAFRUIT_NEOPIXEL_H 
   // NeoPixel
   strip.setPixelColor(Pixel, strip.Color(red, green, blue, white));
 #endif
  
}

// Set all LEDs to a given color and apply it (visible)
void setAll(byte red, byte green, byte blue, byte white) {
  for(int i = 0; i < NUM_LEDS; i++ ) {
    setPixel(i, red, green, blue, white); 
  }
  showStrip();
}