#include <stdio.h>
#include "pico/stdlib.h"
#include <string.h>
#include "pico/stdlib.h"
#include "hardware/i2c.h"
#include "pico/binary_info.h"
#include "LCD_i2c.h"
#define canal 2 // entrada do sinal ligado ao GPIO 17
volatile int g_timer_0 = 0;
uint16_t contador, freq_RPM, freq_Hz;
void f_contar();
bool timer_0_callback(repeating_timer_t *rt);
int main() {
// Configuracao
stdio_init_all();
int timer_0_hz = 1;
repeating_timer_t timer_0;
bi_decl(bi_2pins_with_func(PICO_DEFAULT_I2C_SDA_PIN, PICO_DEFAULT_I2C_SCL_PIN, GPIO_FUNC_I2C));
lcd_init( );
if (!add_repeating_timer_us(1000000 / timer_0_hz,
timer_0_callback,
NULL,
&timer_0)) {
printf("Failed to add timer\n");
}
// configura o pino 2 como saída digital
gpio_init( canal );
gpio_set_dir( canal, GPIO_IN);
//gpio_pull_up( btn_verde);
gpio_set_irq_enabled_with_callback ( canal , GPIO_IRQ_EDGE_FALL, true, f_contar);
contador = 0;
char valor[128];
while( true ) {
lcd_set_cursor(0,0);
lcd_string("FREQ:");
sprintf(valor,"%d[RPM]", freq_RPM);
lcd_string(valor);
sleep_ms(500);
lcd_clear();
if(g_timer_0){
g_timer_0 = 0;
}
}
}
void f_contar(){
//printf("Contador: %d\n",contador);
contador++;
}
bool timer_0_callback(repeating_timer_t *rt) {
g_timer_0 = 1;
freq_Hz = contador;
freq_RPM = contador * 60;
printf("Frenquency: %d[Hz] RPM: %d[RPM]\n", freq_Hz, freq_RPM);
contador = 0;
return true; // keep repeating
}