Pulsador activado 3 segundos. SOLUCIONADO¡¡¡¡

Estoy atascado, no se donde meter el inicio=millis(); dentro del while para que no me cambie el valor cada vez que se repite el bucle.

long int tiempo,inicio;
const int pulsador = 7;     

void setup() {
  pinMode(pulsador, INPUT);  
  Serial.begin(9600);      // abre el puerto serie a 9600 bps:  
}

void loop(){

  while(pulsador==HIGH){  
    inicio=millis();  
    if((tiempo=millis()-inicio)>3000){
      Serial.print("Pulsador activado 3 seg");      
      break;
    }
  }
  inicio=0;
  tiempo=0;

}

y si usas usas mejor un delay(3000) ?

porque no pones el inciio= millis justo antes del while???

Flico, pulsador lo inicias a 7 y estas comprobando si vale 1. Nunca va a entrar en el while. Tienes que poner digitalRead(pulsador), suponiendo que es el pin 7.

Por otro lado saca inicio=millis() fuera del while y en la declaración. No reinicies a 0 la variable no tiene sentido.

Siento ser tan escueto, estoy en el móvil dichoso!

long int inicio;
const int pulsador = 7;     

void setup() {
  pinMode(pulsador, INPUT);  
  Serial.begin(9600);      // abre el puerto serie a 9600 bps:  
}

void loop(){
  inicio=millis();
  while(digitalRead(pulsador)){
    if(millis()-inicio>3000){
      Serial.print("Pulsador activado 3 seg");      
      break;
    }
  }
}

se me adelantó chiva, justo como pone él debe funcionar correctamente.

Lógicamente la captura de millis de inicio debe ir antes del while, puesto que ese valor debe mantenerse fijo para ir comprobando la amplitud del intervalo, si vas actualizando el millis inicial simplemente vas a desplazar el intervalo y no variará.

Un saludo.

while(pulsador==HIGH)

@fm con tantas pruebas y tanto cortar-pegar se me había colado esta prueba.

@fm,@chiva,@segegsx y @Ixreb gracias por la solución, me había hecho una paja mental y pensaba que no funcionaria porque siempre estaria cambiando el valor de la variable inicio cada vez que pasara el loop y estuviera activado el pulsador, no se si me explico.

Como dice @Ixreb

..si vas actualizando el millis inicial simplemente vas a desplazar el intervalo y no variará.