LED Fade Loop Inturruption with Push Button

This is the v2.0, using an RGB LED:

/*
1.1b 12/9/16  Finalmente funziona tutto! Avevo anche avuto il problema che, facendo scrivere qualcosa dalla 
              seriale per le prove, andava a "premere" il pulsante che stava sulla porta 1!!!
2.0  12/9/16  Versione con LED RGB: Sfuma dal bianco verso il rosso. R, G e B deboli e poi intensi vengono  
              anche usati per indicare il tempo.
2.0a 14/9/16  Ho abbassato l'intensità dei lampi iniziali e velocizzato la scala del tempo preimpostato.
 */

#include<avr/sleep.h>
#include<EEPROM.h>
#define LEDR 3
#define LEDV 5
#define LEDB 6
#define SW 10

byte TEST=0;
byte B=0;
int X=0; int Y=0; int Z=0;
byte n=0; 
byte minuti=10; // Durata dello sfumo
byte L=10; // Intensità bassa
byte H=80; // Intensità alta
unsigned long T=0;
unsigned long t0=0;
unsigned long t1=0;
byte S=0; // S=1 indica che è passato per il "set"

void setup()
{
// Serial.begin(9600);
pinMode(LEDR, OUTPUT);
pinMode(LEDV, OUTPUT);
pinMode(LEDB, OUTPUT);
pinMode(SW, INPUT_PULLUP);
if(digitalRead(SW)==LOW){TEST=1; lampR(); lampR(); lampR(); delay(1000);}
                 // Fa 3 lampi rossi per indicare che è in modalità TEST.
                 // 3 red flashes: TEST mode (fast cycle).
lampB();         // Fa 1 lampo blu per indicare che si può impostare il tempo.
t0=millis();     // 1 blue flash: you can set fade time.
while(millis()-t0<2000) {if(digitalRead(SW)==LOW) set();}
} // END Setup



void loop()
{
B=EEPROM.read(0); // Legge i minuti impostati.
if(B==255) EEPROM.update(0,10); // Se nella EEPROM c'è scritto 255, significa
                      // che è vergine o cancellata, perciò imposta 10 minuti.
if(TEST==0) {T=B*60000/255;} // Calcola la durata di ciascun passo.
else T=B*500/255; // In modo TEST va a 120x (5 sec = 10 min).

if(S==0) // Se non è passato dal "set", visualizza la scala di intensità
  {      // fino al tempo precedentemente impostato.
  for(n=1; n<=B/10; n++)
    {
    spegnetutto();  
    switch(n) // Visualizza la scala fino al tempo preimpostato.
      {
      case 1: analogWrite(LEDR,L); break;
      case 2: analogWrite(LEDV,L); break;
      case 3: analogWrite(LEDB,L); break;
      case 4: analogWrite(LEDR,H); break;
      case 5: analogWrite(LEDV,H); break;
      case 6: analogWrite(LEDB,H); break;
      }
    delay(350);
    }
  delay(200);  spegnetutto();  delay(1500);
  }
else{spegnetutto(); delay(1500);} // Se viene dal "set", fa solo 
                                  // 1 secondo di buio.
Y=255; Z=255;                                  
for(X=256; X>0; X--) // Inizia lo sfumo.
  {
  if(Y<0) Y=0; if(Z<0) Z=0;
  analogWrite(LEDR,X-1);
  analogWrite(LEDV,Y);
  analogWrite(LEDB,Z);
  delay(T); Y-=2; Z-=3;
  } // Il tempo è finito: va in Power down.
  
set_sleep_mode(SLEEP_MODE_PWR_DOWN);   // Imposta il modo Power down.
sleep_enable(); // Enables the sleep bit in the mcucr register
                // so sleep is possible. Just a safety pin.
sleep_mode();   // Here the device is actually put to sleep! 
}


void set()
{
S=1; // Memorizza che è passato per il "set".
analogWrite(LEDR,L); minuti=10;

while(digitalRead(SW)==LOW) {delay(100);} // Attende che venga lasciato il pulsante.
t1=millis();
while(millis()-t1<1000)
  {
  if(digitalRead(SW)==LOW) {spegnetutto(); analogWrite(LEDV,L); minuti=20; delay(300); goto due;}
  }                           // I[...] è l'intensità relativa ai minuti impostati.
EEPROM.update(0,10); goto fuori;

due:
while(digitalRead(SW)==LOW) {delay(100);} // Attende che venga lasciato il pulsante
t1=millis();
while(millis()-t1<1000)
  {
  if(digitalRead(SW)==LOW) {spegnetutto(); analogWrite(LEDB,L); minuti=30; delay(300); goto tre;}
  }
EEPROM.update(0,20); goto fuori;

tre:
while(digitalRead(SW)==LOW) {delay(100);} // Attende che venga lasciato il pulsante
t1=millis();
while(millis()-t1<1000)
  {
  if(digitalRead(SW)==LOW) {spegnetutto(); analogWrite(LEDR,H); minuti=40; delay(300); goto quattro;}
  }
EEPROM.update(0,30); goto fuori;

quattro:
while(digitalRead(SW)==LOW) {delay(100);} // Attende che venga lasciato il pulsante
t1=millis();
while(millis()-t1<1000)
  {
  if(digitalRead(SW)==LOW) {spegnetutto(); analogWrite(LEDV,H); minuti=50; delay(300);  goto cinque;}
  }
EEPROM.update(0,40); goto fuori;

cinque:
while(digitalRead(SW)==LOW) {delay(100);} // Attende che venga lasciato il pulsante
t1=millis();
while(millis()-t1<1000)
  {
  if(digitalRead(SW)==LOW) {spegnetutto(); analogWrite(LEDB,H); minuti=60; EEPROM.update(0,60); delay(1000); goto fuori;}
  }
EEPROM.update(0,50); goto fuori;

fuori:
delay(10); // No operation
} // END Set


void lampB()
{
analogWrite(LEDB, H); delay(50);
analogWrite(LEDB, 0); delay(50);
}

void lampR()
{
analogWrite(LEDR, H); delay(50);
analogWrite(LEDR, 0); delay(50);
}



void spegnetutto()
{
digitalWrite(LEDR, LOW);
digitalWrite(LEDV, LOW);
digitalWrite(LEDB, LOW);
}