#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);
    }
}
BOOTSELLED1239USBRaspberryPiPico©2020RP2-8020/21P64M15.00TTT