Button LED Animation Code Help

Hey everyone, having a problem getting a button to select a specific led animation. The button is being used as an interrupt, and the button presses are being counted. Then, a switch case is used to select the animation by the button press number. However, my code isn’t working. The first button press, from using the spectrum analyzer to led animation 1, is working. Then, the button presses don’t work, i am guessing because the code is looping rather than paying attention to button presses. Help?

#include <LEDPixels.h>

////Example to control RGB LED Modules with Spectrum Analyzer
//Bliptronics.com
//Ben Moyes 2010
//Use this as you wish, but please give credit, or at least buy some of my LEDs!


LEDPixels LP;  //LEDPixels library
   
//For spectrum analyzer shield, these three pins are used.
//You can move pinds 4 and 5, but you must cut the trace on the shield and re-route from the 2 jumpers. 
int spectrumReset = 5;
int spectrumStrobe = 4;
int spectrumAnalog = 0;  //0 for left channel, 1 for right.

const int spectrumPower = 10;  //pin used to power the spectrum analyzer on/off

const int buttonPower = 7;  //pin used to power the button on/off
const int buttonPin = 6;  //button read pin
int buttonPushCounter = 0;  // counter for the number of button presses
int buttonState = 0;  // current state of the button
int lastButtonState = 0;  // previous state of the button

//This holds the 15 bit RGB values for each LED.
//You'll need one for each LED, we're using 25 LEDs here.
//Note you've only got limited memory, so you can only control 
//Several hundred LEDs on a normal arduino. Double that on a Duemilanove.

const int ledCount = 92;
int MyDisplay[ledCount];

byte bgColor[] = {0, 0, 31};

const int gridWidth = 23;
const int gridHeight = 4;

const int updateDelay = 30;

// Spectrum analyzer read values will be kept here.
int Spectrum[1];

int xx;
int yy;

void setup() {
  
  attachInterrupt(1, increment, RISING);
  Serial.begin(9600);
  
  /*___ Power ___*/
  pinMode(spectrumPower, OUTPUT);  //Makes spectrum shield power an output pin
  digitalWrite(spectrumPower, HIGH);  //Turns the spectrum shield on
  
  pinMode(buttonPower, OUTPUT);  //Makes button power an output pin
  digitalWrite(buttonPower, HIGH);  //Brings power to the button
  
  /*___ Button Setup ___*/
  pinMode(buttonPin, INPUT); //Reads the power from the button
  
  /*___ LED Setup ___*/
  byte Counter;

  //Initialize the LEDPixels library.
  //            (refresh delay, address of data, number of LEDs, clock pin, data pin)
  LP.initialize(25, &MyDisplay[0], 92, 9, 8);

  // Setup the grid in the LEDPixels library to the setFastxxx calls work
  LP.gridWidth = gridWidth;
  LP.gridHeight = gridHeight;

  //Setup pins to drive the spectrum analyzer. 
  pinMode(spectrumReset, OUTPUT);
  pinMode(spectrumStrobe, OUTPUT);

  //Init spectrum analyzer
  digitalWrite(spectrumStrobe,LOW);
    delay(1);
  digitalWrite(spectrumReset,HIGH);
    delay(1);
  digitalWrite(spectrumStrobe,HIGH);
    delay(1);
  digitalWrite(spectrumStrobe,LOW);
    delay(1);
  digitalWrite(spectrumReset,LOW);
    delay(5);
  // Reading the analyzer now will read the lowest frequency.
  
  // Turn all LEDs off.
  LP.setRange(0,91,LP.color(0,0,0));
  LP.show();                             //Write out display to LEDs
  
}

void loop() {
  
  /*___ Button Loop ___*/
  buttonCall();
  
  /*___ Button Case Loop ___*/
  switch (buttonPushCounter) {
    case 0:
      LP.setRange(0,91,LP.color(0,0,31));
      LP.show();
      showSpectrum();
      break;
    case 1:
      makeBlack();
      break;
    case 2:  //Color Wipes Animation
      makeBlack();
      MoveLines(LP.color(random(0,31),random(0,31),random(0,31)));  
      break;
    case 3:  //Fading Animation
      makeBlack();
      for(xx=0;xx<32;xx++) { //Fade up from color
        LP.setRange(0,91,LP.color(xx,xx,xx));  
        LP.show();
        delay(30);
      }
      for(xx=31;xx>0;xx--) {  //Fade down from color
        LP.setRange(0,91,LP.color(xx,xx,xx));  
        LP.show();
        delay(30);
      }
      break;
    case 4:
      makeBlack();
      for(xx=0;xx<23;xx++) {
        LP.setPixel(0,xx,LP.color(0,31,0));
        LP.setPixel(1,4-xx,LP.color(0,0,31));
        LP.setPixel(2,xx,LP.color(0,31,0));
        LP.setPixel(3,4-xx,LP.color(0,0,31));
        LP.setPixel(4,xx,LP.color(0,31,0));

        LP.show();
        delay(200);
      }
      break;
  }      

delay(updateDelay);

}

void increment() {
    buttonPushCounter++;
      
  if (buttonPushCounter == 5) {  //Reset the counter when it exceeds a certain number
    buttonPushCounter = 0;
    }
}

void buttonCall(){
  buttonState = digitalRead(buttonPin);
  if (buttonState != lastButtonState) {
    // if the state has changed, increment the counter
    while (buttonState == HIGH) {
      // if the current state is HIGH then the button
      // went from off to on:
      buttonPushCounter++;
      Serial.println("on");
      Serial.print("number of button pushes:  ");
      Serial.println(buttonPushCounter);
    }
  }
    else {
      // if the current state is LOW then the button
      // wend from on to off:
      Serial.println("off"); 
    }

  if (buttonPushCounter == 5) {  //Reset the counter when it exceeds a certain number
    buttonPushCounter = 0;
  }
  // save the current state as the last state, 
  //for next time through the loop
  lastButtonState = buttonState;
}

// Read 7 band equalizer.
void readSpectrum() {
  // Band 0 = Lowest Frequencies.
  byte Band;
  for(Band=0;Band < 1; Band++) {
    Spectrum[Band] = (analogRead(spectrumAnalog) + analogRead(spectrumAnalog) ) >>1; //Read twice and take the average by dividing by 2
    digitalWrite(spectrumStrobe,HIGH);
    digitalWrite(spectrumStrobe,LOW);     
  }
}


void showSpectrum() {
  //No I don't use any floating point numbers - all integers to keep it zippy. 
   readSpectrum();
   byte Band, BarSize, MaxLevel;
   static unsigned int  Divisor = 80, ChangeTimer=0, PullTimer = 0; //, ReminderDivisor,
   static boolean Idle = false;
   unsigned int works, Remainder;
  
  MaxLevel = 0; 
  Idle = Divisor < 23;
        
  for(Band=0;Band<4;Band++)//We only graph the lowest 5 bands here, there is 2 more unused!
  {
  //If value is 0, we don't show anything on graph
     works = Spectrum[Band]/Divisor;	//Bands are read in as 10 bit values. Scale them down to be 0 - 5
     if(works > MaxLevel) { //Check if this value is the largest so far.
       MaxLevel = works;  
     }
   
     for(BarSize=1;BarSize <=23; BarSize++)  
        {
           if(	works > BarSize) {
              LP.setLEDFast(LP.Translate(Band,BarSize-1), 0, 31, 0);
           }
            else { 
              LP.setLEDFast(LP.Translate(Band,BarSize-1), 31, 0, 0);
           }
        }
  }
  
  LP.show();

 // Adjust the Divisor if levels are too high/low.
 // If  below 4 happens 20 times, then very slowly turn up.
  if (MaxLevel >= 23)
  {
    Divisor=Divisor+1;
    ChangeTimer=0;
    PullTimer=0;
  }
  else if(MaxLevel < 22)
    {
      if(Divisor > 0)
        if(ChangeTimer++ > 10 || PullTimer > 10)
        {
          Divisor--;
          ChangeTimer = 0;
          PullTimer++;
          
          if(PullTimer > 15) {
                    Divisor--;
          }
        }
    }
    else
    {
      ChangeTimer=0; 
    }
}

//Set all LEDS and wait 1 second.
void All(unsigned int color) {
    LP.setRange(0,91,color);  
    LP.show();
    delay(1000);
}


void MoveLines(int yy) {
  //Draws 5 vertical lines in the requested color.
  //Then follow them with 5 black lines for a wipe effect.
      for(xx=0;xx<23;xx++)
        {
        LP.line(0,xx,4,xx,yy );
        LP.show();
        delay(50);
        }
   
      for(xx=0;xx<23;xx++)
        {
        LP.line(0,xx,4,xx,0 );
        LP.show();
        delay(50);
        }
}

void makeBlack() { // Set LEDs to black.
      // Set LEDs to black.
    LP.setRange(0,91,LP.color(0,0,0));
    LP.show(); //Send out data to LEDs.
}