¡Gracias por leer mi post!
Hola a todos, he estado metido en un proyecto, pero me surge un problema; necesito hacer un contador de pulsos, pero que a su vez detecte el tiempo que lleva sin presionarse, en mi codigo principal necesito poner eso en un bucle externo, pues en ese momento no hace parte del bucle loop, la variable conta no suma, asi pulse muchas veces, no suma, luego termina el tiempo y sale, dejo el codigo que tengo.
int conta = 0;
int tiempo_corrido=0; int tiempo_necesario= 5000;
int PGM=HIGH;
void setup()
{
Serial.begin(9600);
pinMode(2,INPUT);
}
//------------------------------------
//Funcion ciclicla
//------------------------------------
void loop()
{
while(PGM==HIGH) // bucle adicional, este es llamado por otra funcion externa
{
delay(1);
// Si el pulsador esta oprimido
if(digitalRead(2) == HIGH)
{
// Si el pulsador no esta oprimido, flanco de bajada
if(digitalRead(2) == LOW)
{
conta++;
Serial.print("Se presion ");//Incrementa el contador
Serial.println(conta); //Imprime el valor por consola
delay (100); // Retardo
tiempo_corrido =0;
}
}
if(tiempo_corrido == tiempo_necesario)
{
Serial.print(conta);
PGM=LOW;
break;
}
tiempo_corrido++;
}
Serial.print("SALIO DEL BUCLE \n");
delay(1000);
}
Quedo en espera de alguna buena respuesta, gracias
A ver si esto funciona?
int conta = 0;
int tiempo_corrido = 0;
int tiempo_necesario = 5000;
int PGM = HIGH;
bool pulsa;
bool pulsaAnt= false;
void setup() {
Serial.begin(9600);
pinMode(2,INPUT);
}
//------------------------------------
//Funcion ciclicla
//------------------------------------
void loop() {
while (PGM) { // bucle adicional, este es llamado por otra funcion externa
delay(1);
// Tomo el valor del pulsador
pulsa = digitalRead(2);
if (!pulsa && pulsaAnt) { // SI estoy en flanco de bajada sumo
conta++;
Serial.print("Se presion ");//Incrementa el contador
Serial.println(conta); //Imprime el valor por consola
// delay (100); // Retardo
tiempo_corrido = 0;
}
if (tiempo_corrido >= tiempo_necesario) {
Serial.print(conta);
PGM = LOW;
// tiempo_corrido = 0; // no debería ponerse a 0?
break;
}
tiempo_corrido++;
}
Serial.print("SALIO DEL BUCLE \n");
delay(1000);
}
Hola, gracias por reponder, te informo que no funcionó, estuve cambiando algunas cosas y cada vez que quito el delay, puedo contar los pulsos, pero no el tiempo, no sé cómo hacerlo, tal vez con millis() pero no sé como funciona, sigo en espera, ¡Gracias!
Explicate un poco mejor.
QUe es lo que ingresa por el pin 2?
Estoy haciendo una programación de un temporizador para un led, es decir, por el pin 2 ingresa el pulsador, por el cual cada vez que yo lo pulse, suma uno, y asi infinitamente, hasta que pasen 5 o 10 segundos sin presionar nada y en ese momento, se salga del bucle, guardando obviamente el dato de las pulsaciones.
Olvidé algo
corrige
void loop() {
while (PGM) { // bucle adicional, este es llamado por otra funcion externa
delay(1);
// Tomo el valor del pulsador
pulsa = digitalRead(2);
if (!pulsa && pulsaAnt) { // SI estoy en flanco de bajada sumo
conta++;
Serial.print("Se presion ");//Incrementa el contador
Serial.println(conta); //Imprime el valor por consola
// delay (100); // Retardo
tiempo_corrido = 0;
}
pulsaAnt = pulsa;
if (tiempo_corrido >= tiempo_necesario) {
Serial.print(conta);
PGM = LOW;
tiempo_corrido = 0; // no debería ponerse a 0?
break;
}
tiempo_corrido++;
}
Serial.print("SALIO DEL BUCLE \n");
delay(1000);
}
surbyte:
Olvidé algo
corrige
void loop() {
while (PGM) { // bucle adicional, este es llamado por otra funcion externa
delay(1);
// Tomo el valor del pulsador
pulsa = digitalRead(2);
if (!pulsa && pulsaAnt) { // SI estoy en flanco de bajada sumo
conta++;
Serial.print("Se presion ");//Incrementa el contador
Serial.println(conta); //Imprime el valor por consola
// delay (100); // Retardo
tiempo_corrido = 0;
}
pulsaAnt = pulsa;
if (tiempo_corrido >= tiempo_necesario) {
Serial.print(conta);
PGM = LOW;
tiempo_corrido = 0; // no debería ponerse a 0?
break;
}
tiempo_corrido++;
}
Serial.print("SALIO DEL BUCLE \n");
delay(1000);
}
Muchas gracias amigo, ya lo probé y funcionó a la perfección muchas gracias por la ayuda, SOLUCIONADO.
GRACIAS<3