#include <stdio.h>
#include "pico/stdlib.h"
#include "hardware/gpio.h"
#define FIRST_GPIO 2
#define DIGIT1_GPIO 10
#define DIGIT2_GPIO 11
#define DIGIT3_GPIO 12
#define DIGIT4_GPIO 13
#define CLICK_BUTTON_GPIO 1
int num[100] = {
// Decenas
0b0000001, 0b1001111, 0b0010010, 0b0000110, 0b1001100, 0b0100100, 0b0100000, 0b0001111, 0b0000000, 0b0001100, // 0-9
// Unidades
0b0000001, 0b1001111, 0b0010010, 0b0000110, 0b1001100, 0b0100100, 0b0100000, 0b0001111, 0b0000000, 0b0001100, // 10-19
0b0000001, 0b1001111, 0b0010010, 0b0000110, 0b1001100, 0b0100100, 0b0100000, 0b0001111, 0b0000000, 0b0001100, // 20-29
0b0000001, 0b1001111, 0b0010010, 0b0000110, 0b1001100, 0b0100100, 0b0100000, 0b0001111, 0b0000000, 0b0001100, // 30-39
0b0000001, 0b1001111, 0b0010010, 0b0000110, 0b1001100, 0b0100100, 0b0100000, 0b0001111, 0b0000000, 0b0001100, // 40-49
0b0000001, 0b1001111, 0b0010010, 0b0000110, 0b1001100, 0b0100100, 0b0100000, 0b0001111, 0b0000000, 0b0001100, // 50-59
0b0000001, 0b1001111, 0b0010010, 0b0000110, 0b1001100, 0b0100100, 0b0100000, 0b0001111, 0b0000000, 0b0001100, // 60-69
0b0000001, 0b1001111, 0b0010010, 0b0000110, 0b1001100, 0b0100100, 0b0100000, 0b0001111, 0b0000000, 0b0001100, // 70-79
0b0000001, 0b1001111, 0b0010010, 0b0000110, 0b1001100, 0b0100100, 0b0100000, 0b0001111, 0b0000000, 0b0001100, // 80-89
0b0000001, 0b1001111, 0b0010010, 0b0000110, 0b1001100, 0b0100100, 0b0100000, 0b0001111, 0b0000000, 0b0001100 // 90-99
};
void display_digit(int digit, int value) {
for (int i = 0; i < 7; i++) {
gpio_put(FIRST_GPIO + i, (num[value] >> (6 - i)) & 1);
}
// Enable the current digit
gpio_put(digit, 1);
sleep_ms(5);
// Disable the current digit
gpio_put(digit, 0);
}
void display_value(int value) {
int digits[4] = {0};
// Split the value into individual digits
for (int i = 0; i < 4; i++) {
digits[i] = value % 10;
value /= 10;
}
// Display each digit
display_digit(DIGIT1_GPIO, digits[3]);
display_digit(DIGIT2_GPIO, digits[2]);
display_digit(DIGIT3_GPIO, digits[1]);
display_digit(DIGIT4_GPIO, digits[0]);
}
int main() {
stdio_init_all();
for (int gpio = FIRST_GPIO; gpio < FIRST_GPIO + 7; gpio++) {
gpio_init(gpio);
gpio_set_dir(gpio, GPIO_OUT);
}
// Initialize the digit control GPIOs
gpio_init(DIGIT1_GPIO);
gpio_set_dir(DIGIT1_GPIO, GPIO_OUT);
gpio_init(DIGIT2_GPIO);
gpio_set_dir(DIGIT2_GPIO, GPIO_OUT);
gpio_init(DIGIT3_GPIO);
gpio_set_dir(DIGIT3_GPIO, GPIO_OUT);
gpio_init(DIGIT4_GPIO);
gpio_set_dir(DIGIT4_GPIO, GPIO_OUT);
// Initialize the buttons
gpio_init(CLICK_BUTTON_GPIO);
gpio_set_dir(CLICK_BUTTON_GPIO, GPIO_IN);
gpio_pull_down(CLICK_BUTTON_GPIO);
int val = 0;
bool click_button_pressed = false;
while (true) {
if (gpio_get(CLICK_BUTTON_GPIO)) {
if (!CLICK_button_pressed) {
CLICK_button_pressed = true;
if (val == 99) {
val = 0;
} else {
val += 1;
}
}
} else {
CLICK_button_pressed = false;
}
display_value(val);
}
}