Go Down

Topic: contar el tiempo que esta pulsado un boton (Read 3718 times) previous topic - next topic

riscking

May 01, 2011, 07:30 pm Last Edit: May 20, 2011, 12:27 am by riscking Reason: 1
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.

ionhs

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

riscking

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.

ionhs

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


Sergegsx

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

riscking

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.

Code: [Select]

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"); }
}
}

SrDonGato

mírate la función pulsein()

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

saludos

riscking

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

ionhs

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

Herone

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.


Code: [Select]

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!

Go Up