contar el tiempo que esta pulsado un boton

Resuelto la anterior duda, ahora tengo un problema para poder realizar un contador para saber cuanto tiempo esta pulsado un boton y depende el tiempo hacer una cosa u otra.
estoy usando la funcion millis pero poniendo if (estadoboton1 == HIGH) entra una vez y sale, no se como lo podria hacer, alguna ayuda porfa.

Pon todo el código y si pones algunos comentarios para que podamos entenderlo pues mejor :smiley:

Resuelto lo anterior, ahora no se como hacer el contador de la pulsacion para ahorrarme un par de botones y segun el tiempo que este pulsado hacer una funciones u otras.
A ver si alguien me puede hechar una manilla.
Gracias de antemano.

se me ocurre lo siguiente:

-cuando detectes que alguien pulsa el botón guarda el tiempo (millis())
-espera a que lo deje de pulsar y guarda el tiempo
-Si la diferencia es mayor que X que se ejecute la función AA
-Sino que se ejecute la función BB

Pon tu codigo, sino tenemos que escribirte el codigo desde cero y eso no ayuda.

Dandole vueltas en el trabajo sobre papel creo q ya lo tengo solucionado, no se si sera la manera mas limpia pero creo q funciona. Seria algo asi, falta por pulir las condiciones pero ya estaria.

void loop() {
estadoboton1 = digitalRead(boton1);
if(estadoboton1 == HIGH) { 
tiempo=millis();
    while(estadoboton1 == HIGH) { 
tiempo2=millis();
estadoboton1 = digitalRead(boton1);

}
tiempo3=tiempo2-tiempo;

Serial.println(tiempo3);
if(tiempo3<1000 ){
 Serial.println("mola"); 
}
else{ Serial.println("no mola"); }
}
}

mírate la función pulsein()

http://arduino.cc/es/Reference/PulseIn

saludos

Jaja, reduce todo mi codigo a una linea. Cuando llegue a casa lo pruebo, almenos he sacado una manera alternativa, xdd

Menuda función, esa si que mola, hace exactamente lo que quieres.

Pongo aqui un pequeño aporte, ya que este foro me ha ayudado mucho en el poco tiempo que llevo con arduino. Asique copio aqui un pequeño codigo que he hecho para sacar la media de tiempo que esta un boton pulsado.

Yo lo he usado por ejemplo para calcular un delay para un pulsador.

int pulPin=53; 

float tm=0,t=0,t_suma=0; // Variables para medida de tiempo m: medio
int n_muestras=20,cont=0; // Numero de muestras (20) para sacar la media

void setup(){

  pinMode(pulPin,INPUT);
  Serial.begin(9600);
  
}

void loop(){

  t=pulseIn(pulPin,HIGH);
  if (t!=0){ 
    cont++;
    Serial.print("cont=");
    Serial.println(cont);

  }
  t_suma+=t;

  if (cont==n_muestras){
    tm=t_suma/n_muestras;
    Serial.print("El tiempo medio es (microsegundos):");
    Serial.println(tm);

    Serial.print("El tiempo medio es (milisegundos):");
    Serial.println(tm/1000);

    Serial.print("El tiempo medio es (segundos):");
    Serial.println(tm/1000000);
    cont=0;
    delay(4000);
  }
  delay(250); // Un pequeño Delay para evitar que se cuenten varias pulsaciones
              // como una sola.
}

saludos!

Dandole vueltas en el trabajo sobre papel creo q ya lo tengo solucionado, no se si sera la manera mas limpia pero creo q funciona. Seria algo asi, falta por pulir las condiciones pero ya estaria.

void loop() {
estadoboton1 = digitalRead(boton1);
if(estadoboton1 == HIGH) { 
tiempo=millis();
    while(estadoboton1 == HIGH) { 
tiempo2=millis();
estadoboton1 = digitalRead(boton1);

}
tiempo3=tiempo2-tiempo;

Serial.println(tiempo3);
if(tiempo3<1000 ){
 Serial.println("mola"); 
}
else{ Serial.println("no mola"); }
}
}

Hilo del 2011 con aporte en 2013.
De ningún modo se permite revivirlo.
Crea un hilo nuevo y cuando veas algo como WARNING este hilo no ha tenido moviemientos en los ultimos 120 dias hazle caso por favor!!