/* Ejercicio PR3 - frecuencimetro */
const int senyal_output = 23; // pin generacion señal simulación -> en el lab, conectar generador de funciones
const int senyal_entrada = 18; // GPIO pin interrupcion para la entrada de señal
const int sube = 32; // aumenta 1 seg el tiempo de medida, hasta 10 seg.
const int baja = 33; // disminuye 1 seg el tiempo de medida, hasta 1 seg.
volatile float frecmedida = 0;
volatile int nflancos = 0;
int tic=0;
// poner valores entre 1 y 25 Hz para el simulador, en la placa real se pueden elevar los tiempos
// periodo en ms
// incluir las variables globales que se necesiten
// faltan las 3 funciones ISR, 2 botones (sube/baja) y senyal_entrada
void IRAM_ATTR ISR_senyal(){
/// completar
}
void IRAM_ATTR ISR_sube(){
/// completar
}
void IRAM_ATTR ISR_baja(){
nflancos++;
}
// falta completar la funcion de setup()
void setup(){
pinMode(senyal_output, OUTPUT);
// falta completar toda la configuracion
}
unsigned long tp1=0; // control señal frecuencia en el pin 22
unsigned long current_time;
void loop()
{
delay(1); // solo en el simulador, para q no tenga que procesar tantos "if" para nada, y así vaya más rápida
int tac=millis();
// para auto generar la secuencia - senyal encendido/apagado led
if( tac-tic > 4000){
digitalWrite(senyal_output, !digitalRead(senyal_output) );
frecmedida = nflancos/4;
nflancos=0;
Serial.printf("Frecuencia: %f\n", frecmedida);
tic=millis(); // reset a tp1
}
// cada "t_medida" milisegundos hay que realizar el cálculo de frecuencia de la senyal de entrada
// y visualizar la información siguiente
// "Frecuencia señal de entrada medida: XXX.XX Hz , Flancos contados YYYY en ZZZZZ ms\n"
// falta completar el programa
}