LED Fade Loop Inturruption with Push Button

This is a night LED controller i wrote a year and a half ago, when I was doing my first experiences with Arduino. It is a fading LED of which you can set fade time between 10 and 60 minutes pushing the button at power on:

#include<avr/sleep.h>
#include<EEPROM.h>
#define LED 10
#define SW 4

byte B=0;
int X=0;
byte n=0; 
byte minuti=10; // Durata dello sfumo
unsigned long T=0;
unsigned long t0=0;
unsigned long t1=0;
byte S=0; // S=1 indica che è passato per il "set"
int I[]={0,20,40,70,120,180,255}; // I[minuti/10] indica l'intensità del LED 
               // per indicare le diverse durate, I[0] è 0 poiché non lo uso.

void setup()
{
Serial.begin(9600);
pinMode(LED, OUTPUT);
pinMode(SW, INPUT);
pinMode(SW, HIGH); // Pullup
lamp();
t0=millis();

while(millis()-t0<2000)
  {
  if(digitalRead(SW)==LOW) set();
  }

} // END Setup



void loop()
{
inizia:
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.
T=B*60000/255; // Calcola la durata di ciascun passo.

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++)
    {
    analogWrite(LED,I[n]); // Visualizza la scala fino al tempo preimpostato.
    delay(600);
    }
  delay(400);
  digitalWrite(LED,0);
  delay(1000);
  }
else{digitalWrite(LED,0); delay(1000);} // Se viene dal "set", fa solo 
                                        // 1 secondo di buio.
for(X=256; X>0; X--) // Inizia lo sfumo.
  {
  analogWrite(LED,X-1);
  delay(T);
  } // 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(LED,I[1]); minuti=10;

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

due:
while(digitalRead(SW)==LOW); // Attende che venga lasciato il pulsante
t1=millis();
while(millis()-t1<1000)
  {
  if(digitalRead(SW)==LOW) {analogWrite(LED,I[3]); minuti=30; delay(300); goto tre;}
  }
EEPROM.update(0,20); Serial.println("20 Update!"); goto fuori;

tre:
while(digitalRead(SW)==LOW); // Attende che venga lasciato il pulsante
t1=millis();
while(millis()-t1<1000)
  {
  if(digitalRead(SW)==LOW) {analogWrite(LED,I[4]); minuti=40; delay(300); goto quattro;}
  }
EEPROM.update(0,30); Serial.println("30 Update!"); goto fuori;

quattro:
while(digitalRead(SW)==LOW); // Attende che venga lasciato il pulsante
t1=millis();
while(millis()-t1<1000)
  {
  if(digitalRead(SW)==LOW) {analogWrite(LED,I[5]); minuti=50; delay(300);  goto cinque;}
  }
EEPROM.update(0,40); Serial.println("40 Update!"); goto fuori;

cinque:
while(digitalRead(SW)==LOW); // Attende che venga lasciato il pulsante
t1=millis();
while(millis()-t1<1000)
  {
  if(digitalRead(SW)==LOW) {analogWrite(LED,I[6]); minuti=60; EEPROM.update(0,60); Serial.println("60 Update!"); goto fuori;}
  }
EEPROM.update(0,50); Serial.println("50 Update!"); goto fuori;

fuori:
Serial.print(minuti); Serial.print(" minuti   ");Serial.println(I[int(minuti/10)]);
delay(10); // No operation
} // END Set



void lamp()
{
digitalWrite(LED,1);
delay(50);
digitalWrite(LED,0);
delay(50);
}