#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#include <driver/gpio.h>
#include "esp_timer.h"
#include <stdio.h>
volatile BaseType_t f_led = 0;
volatile int contador = 0;
volatile int64_t last_time = 0;
void IRAM_ATTR button_isr();
void mostrar_num(int num);
void config_portas();
// [G,F,A,B,C,D,E]
int mtx[10][7] = {
{1,0,0,0,0,0,0}, // 0
{1,1,1,0,0,1,1}, // 1
{0,1,0,0,1,0,0}, // 2
{0,1,0,0,0,0,1}, // 3
{0,0,1,0,0,1,1}, // 4
{0,0,0,1,0,0,1}, // 5
{0,0,0,1,0,0,0}, // 6
{1,1,0,0,0,1,1}, // 7
{0,0,0,0,0,0,0}, // 8
{0,0,0,0,0,0,1}, // 9
};
int pin[7] = {4, 5, 6, 7, 8, 9, 10};
void app_main() {
gpio_set_direction(GPIO_NUM_0, GPIO_MODE_INPUT);
gpio_set_pull_mode(GPIO_NUM_0, GPIO_PULLUP_DISABLE);
gpio_set_intr_type(GPIO_NUM_0, GPIO_INTR_POSEDGE);
gpio_install_isr_service(0);
gpio_isr_handler_add(GPIO_NUM_0, button_isr, NULL);
config_portas();
mostrar_num(contador);
while(true){
if(f_led){
f_led=0;
int agora = esp_timer_get_time();
if(agora - last_time > 200000){
last_time = agora;
contador++;
if(contador > 9) contador = 0;
mostrar_num(contador);
}
}
vTaskDelay(1000/portTICK_PERIOD_MS);
}
}
void config_portas(){
for (int i = 0; i < 7; i++){
gpio_reset_pin(pin[i]);
gpio_set_direction(pin[i], GPIO_MODE_OUTPUT);
}
}
void mostrar_num(int num){
// mapeamento de pinos
for (int i = 0; i < 7; i++){
gpio_set_level(pin[i], mtx[num][i]);
}
}
void IRAM_ATTR button_isr()
{
f_led=1;
}
Loading
esp32-s3-devkitc-1
esp32-s3-devkitc-1