Al desconectar y conectar de nuevo Arduino no va el sketch con Pulsein

Hola:

Si cargo este programa en el Arduino, me funciona bien pero si le quito alimentacion y se la vuelvo meter ya no va.
Con otros programas no me pasa eso, es decir, me guarda el programa aunque le quite alimentacion. Solo me falla con la funcion pulsein

El programa es:

#define TcortoMin 100
#define TcortoMax 250
#define TlargoMin 1000
#define TlargoMax 2000
#define Tdelay    150



const byte led            = 13;
const byte boton          = 2;



unsigned long  timeout1 = 3000;
unsigned long  timeout2 = 3000;
unsigned long  timeout3 = 5000;
unsigned long  duracion    = 0;


void setup(){
  Serial.begin(9600);
  pinMode(led, OUTPUT);    
  pinMode(boton, INPUT);  
}
void loop(){
  
   duracion = pulseIn(boton, HIGH, timeout1*1000 )/1000;

  
   if (duracion){
      Serial.print("Se ha pulsado durante ");
      Serial.print(duracion );
      Serial.println(" ms");

      if (duracion > TcortoMin && duracion < TcortoMax) { 
         Serial.println("La duracion entra en margen 1");
         delay (Tdelay);
         duracion = pulseIn(boton, HIGH, timeout2*1000)/1000;
        
         if (duracion){
            Serial.print("Se ha pulsado por segunda vez durante ");
            Serial.print(duracion );
            Serial.println(" ms");

            if (duracion > TcortoMin && duracion < TcortoMax) { 
              Serial.println("La duracion entra en margen 2");
  
              delay (Tdelay);

              duracion = pulseIn(boton, HIGH, timeout3*1000) /1000;

              if (duracion){
                Serial.print("Se ha pulsado por tercera vez durante ");
                Serial.print(duracion );
                Serial.println(" ms");
               
                if (duracion > TlargoMin && duracion < TlargoMax){    //si la duración esta entre los valores establecidos
                  Serial.println("Pulsacion LARGA. Encendemos LED");
                 
                  digitalWrite (led, HIGH);                           //encender led
                  delay (3000);                                       //retardo de 3 segundos
                  digitalWrite (led, LOW);                            //apagamos el led
                } else  Serial.println("Duracion no valida. Salimos!");    
              }else  Serial.println(" No se ha pulsado. Salimos!");
            }else  Serial.println("Duracion no valida. Salimos!");
          }else    Serial.println("Salimos");
      }else  Serial.println("Duracion no valida. Salimos!");
   }//else  Serial.println(" No se ha pulsado. Salimos!");
}

Lo curioso es que juraria que antes no me hacia esto, es decir, que tengo cargado este programa, deconectar y conectar Arduino y todo bien.
No se porque ahora me hace esto. Y lo curioso que solo con este programa.

Alguna idea?

Alguna idea de lo que puede ser, solo me pasa con pulsein.

Porque tienes que usar un timout tan largo de timeout1*1000
si timeout = 3000, estas suponiendo 3.000.000 de useg = 3 segundos

Segun esto

The timing of this function has been determined empirically and will probably show errors in shorter pulses. Works on pulses from 10 microseconds to 3 minutes in length.

esta bien. (me faltó poner!)

Porque no pruebas con valores mas chicos solo para ver si tiene algun efecto o ninguno.