// Incompleta
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/queue.h"
#include "driver/gpio.h"
#include "esp_log.h"
#define STCP_pin GPIO_NUM_7 // Latch
#define SHCP_pin GPIO_NUM_6 // Clock
#define DS_pin GPIO_NUM_5 // Data
#define delay(value) vTaskDelay( value/portTICK_PERIOD_MS )
void clock(void);
void configure_ci_setup(void);
void write_output(int8_t);
int8_t return_bin_in_display(int);
/*
*/
void app_main(void) {
configure_ci_setup();
for (;;) {
for (int i = 0 ; i <= 9 ; i++) {
write_output( return_bin_in_display(i) );
delay(1000);
}
for (int i = 8 ; i >= 1 ; i--) {
write_output( return_bin_in_display(i) );
delay(1000);
}
}
}
/*
*/
// 7654321
// ABCDEFG -> sequencia de escrita
int8_t return_bin_in_display(int num) {
switch (num) {
case 0:
return 0b11111100;
case 1:
return 0b01100000;
case 2:
return 0b11011010;
case 3:
return 0b11110010;
case 4:
return 0b01100110;
case 5:
return 0b10110110;
case 6:
return 0b10111110;
case 7:
return 0b11100000;
case 8:
return 0b11111111;
case 9:
return 0b11110111;
default:
exit(1);
}
}
void write_output(int8_t num) {
gpio_set_level(STCP_pin, GPIO_NUM_0);
for (int8_t i = 7 ; i >= 0 ; i--) {
if ( num & (1 << i) ) {
gpio_set_level(DS_pin, GPIO_NUM_0);
clock();
} else {
gpio_set_level(DS_pin, GPIO_NUM_1);
clock();
}
}
gpio_set_level(STCP_pin, GPIO_NUM_1);
}
void configure_ci_setup(void) {
gpio_pad_select_gpio(STCP_pin);
gpio_pad_select_gpio(SHCP_pin);
gpio_pad_select_gpio(DS_pin);
gpio_set_direction(STCP_pin, GPIO_MODE_OUTPUT);
gpio_set_direction(SHCP_pin, GPIO_MODE_OUTPUT);
gpio_set_direction(DS_pin, GPIO_MODE_OUTPUT);
}
void clock(void) {
gpio_set_level(SHCP_pin, GPIO_NUM_1);
gpio_set_level(SHCP_pin, GPIO_NUM_0);
}