#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "rom/gpio.h"
#define decoder_A0 23 // Segmento A do display de 7 segmentos
#define decoder_A1 22 // Segmento B do display de 7 segmentos
#define decoder_A2 21 // Segmento C do display de 7 segmentos
#define decoder_A3 19 // Segmento D do display de 7 segmentos
#define decoder_ctr0 4
#define decoder_ctr1 0
#define decoder_ctr2 2
#define decoder_ctr3 15
uint8_t display[4] = { decoder_A0, decoder_A1, decoder_A2, decoder_A3 };
uint8_t display_ctr[4] = { decoder_ctr0, decoder_ctr1, decoder_ctr2, decoder_ctr3 };
void app_main(void)
{
uint16_t tmp, contador;
uint8_t nro[4]={0,0,0,0} ;
// configura o segmento como saída digital
for ( int index = 0 ; index <4 ; index++){
gpio_pad_select_gpio( display[index] );
gpio_set_direction ( display[index], GPIO_MODE_OUTPUT );
gpio_pad_select_gpio( display_ctr[index] );
gpio_set_direction ( display_ctr[index], GPIO_MODE_OUTPUT );
}
for (int index = 0; index< 4; index++){
gpio_set_level( display_ctr[index] , 1);
}
vTaskDelay(50 / portTICK_PERIOD_MS);
contador = 0;
while (true){
tmp = contador;
for ( uint8_t index=0; index<4; index++){
nro[index] = tmp % 10;
tmp = tmp /10;
}
for (uint8_t repete =0 ; repete<5 ; repete++){
for ( uint8_t digito=0; digito<4; digito++){
for (int index = 0; index< 4; index++){
gpio_set_level( display[index] , (nro[digito]>>index) & 1);
}
gpio_set_level( display_ctr[digito] , 0);
vTaskDelay(20 / portTICK_PERIOD_MS);
gpio_set_level( display_ctr[digito] , 1);
vTaskDelay(2 / portTICK_PERIOD_MS);
}
}
contador++;
if (contador >20){
contador = 0;
}
}
}