int red = 10;
int blue = 9;
int green = 11;
int button = 3;
int led = 2;
int lastButtonPress = 0;
int paused = false;
int fadeDelay = 30;

void setup()
{
  pinMode(red,OUTPUT);
  pinMode(green,OUTPUT);
  pinMode(blue,OUTPUT);
  pinMode(led,OUTPUT);
  pinMode(button,INPUT);
  digitalWrite(led,LOW);
  attachInterrupt(1,interrupt,FALLING);
}

void loop()
{
  // start with blue
  analogWrite(blue, 255);
  delay(1000);

  // fade in red
  fadeIn(red, 0, 255);
  delay(1000);

  // fade out blue
  fadeOut(blue, 255, 0);
  delay(1000);

  // fade in green
  fadeIn(green, 0, 255);
  delay(1000);

  // fade out red
  fadeOut(red, 255, 0);
  delay(1000);

  // fade in blue
  fadeIn(blue, 0, 255);
  delay(1000);

  // fade out green
  fadeOut(green, 255, 0);
  delay(1000);
}

void fadeIn(int pin, int start, int end)
{
  for(int value = start; value <= end; value += 1)
  {
    while(paused) {
      digitalRead(button);
    }
    analogWrite(pin, value);
    delay(fadeDelay);
  }
}

void fadeOut(int pin, int start, int end)
{
  for(int value = start; value >= end; value -= 1)
  {
    while(paused) {
      digitalRead(button);
    }
    analogWrite(pin, value);
    delay(fadeDelay);
  }
}

void interrupt() {
  if(lastButtonPress - millis() < 250) {
    return;
  } 
  else {
    lastButtonPress = millis();
  }
  paused = !paused;
  if(paused) {
    digitalWrite(led,HIGH);
  }
  else {
    digitalWrite(led,LOW);
  }
}
