Contador de pulsos con tiempo

Buenos dias, estoy tratando de hacer un código que cuente un número definidos de parpadeos de un led y al mismo tiempo cuente cuanto tiempo tardo en realizar los parpadeos el led, posteriormente realizar unos calculos matematicos... para que al final me arroje el resultado en una pantalla, hasta ahorita solo tengo el siguiente codigo y la verdad no se si voy bien, soy nuevo en esto de programar y necesito ayuda, muchas gracias de antemano

#define sensor 7
float constante = 3.6;
int kh = 1;
int revoluciones = 0;
float pretotal = 0;
unsigned long tiempo = 0;
unsigned long tiempoS = 0;
float total = 0;

void setup (){
  pinMode(sensor,INPUT);
  Serial.begin(9600);
  tiempo = millis();
}

void loop(){
 int estado=digitalRead(sensor);
 if(estado==HIGH){
  revoluciones++;{
  }
  if (revoluciones > (revoluciones + 10)){
    tiempoS = tiempo/1000;
   }
 }
 {
  pretotal = revoluciones * kh * constante;
  total = pretotal / tiempoS;
Serial.print(total);
Serial.println("El valor es:");
}```

TRANSLATED….
Good morning, I am trying to make a code that counts a defined number of flashes of a led and at the same time counts how long it takes for the led to flash, then perform some mathematical calculations... so that in the end it gives me the result on a screen, until now I only have the following code and the truth is I don't know if I'm doing well, I'm new to programming and I need help, thank you very much in advance

NOT REALLY A TUTORIAL ?!

Perdon, no vi en que seccion puse la pregunta, es una pregunta de programacion

:warning:
Código corregido

Tu publicación fue ** MOVIDA ** a su ubicación actual ya que es más adecuada.

¿Podría también tomarse unos minutos para Aprenda a usar el foro .

Moderador:
Por favor, lee las Normas del foro.
Si posteas en el foro en inglés usa idioma inglés para expresarte.
Si escribes en español debes usar el foro Arduino en español.

No dices con qué sensor pretendes leer los parpadeos, o es simplemente un medidor de RPM?

 if (revoluciones > (revoluciones + 10)){
    tiempoS = tiempo/1000;
   }

En un vistazo rápido:
Ahí nunca entrará dado que "revoluciones" nunca puede ser mayor que "revoluciones + 10"

Pues lo siento pero creo que no vas bien, el efecto de estas instruciones:

int estado=digitalRead(sensor);
 if(estado==HIGH){
  revoluciones++;{
  }

Puede no ser el deseado. ¿Cuanto tiempo esta el sesor en HIGH?. El Arduino es muy rapido y ante el paso de un objeto puedes tener multiples "revoluciones++;" dandote un calculo erroneo.

Para evitar esto tienes que usar interrupciones que ignoran el tiempo que el sensor esta en alto o bajo, de esta forma revoluciones solo aumentara una vez por activacion del sensor.
Y para lograr esto has de usar interrupciones. Si no sabes lo que son léete el siguiente tutorial:
Qué son y cómo usar interrupciones en Arduino (luisllamas.es)
Y asi comprenderas la siguiente "plantilla" y como terminarla o corregirla correctamente.

#define sensor 2

volatile int revoluciones = 0;

void setup () {
  pinMode(sensor, INPUT);
  Serial.begin(9600);
}

void loop() {
  attachInterrupt(digitalPinToInterrupt(sensor), lectura, RISING);
  delay ( ?? ?? ); //  segundos de medicion. Se puede cambiar segun necesidades
  detachInterrupt(digitalPinToInterrupt(sensor));
  calculo ();
  revoluciones = 0;
}

void calculo () {
  /*
    Aqui realizaras los calculos necesarios y su
    muestra en pantalla, teniendo en cuenta que el sensor
    se ha activado revoluciones veces en el tiempo fijado en
    delay (????)
  */
}

// funcion que se ejecutara cada vez que se active el sensor que provocara una interrupcion
void lectura () {
  revoluciones ++;
}

Gente, no exageren. EL hilo viene del foro en inglés, dejen que el interesado responda porque suelen quedar estos hilos huérfanos.

O trabajar con uno de los flancos (comparar con el estado anterior y tal, ya sabes...).

Saludos

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.