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
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?
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 ++;
}