#include <stdio.h>
#include "pico/stdlib.h"
#include "hardware/i2c.h"
#include "ssd1306.h"
// Definição dos pinos do joystick
#define JOY_X 26
#define JOY_Y 27
#define JOY_BTN 28
// Inicialização do display OLED
#define I2C_PORT i2c0
#define I2C_SDA 16
#define I2C_SCL 17
ssd1306_t oled;
// Menu e Submenu
const char *menu_inicio[] = {"LED ON", "LED OFF", "Submenu"};
const char *menu_submenu[] = {"Alarme", "Brilho", "Voltar"};
const char **menu_atual = menu_inicio;
int menu_size = 3;
int menu_index = 0;
bool submenu = false;
// Função para desenhar o menu no OLED
void draw_menu() {
ssd1306_clear(&oled);
for (int i = 0; i < menu_size; i++) {
if (i == menu_index) {
ssd1306_draw_string(&oled, 5, i * 10, ">"); // Indica item selecionado
}
ssd1306_draw_string(&oled, 15, i * 10, menu_atual[i]);
}
ssd1306_show(&oled);
}
// Função principal
int main() {
stdio_init_all();
// Inicializa GPIOs do joystick
gpio_init(JOY_X);
gpio_init(JOY_Y);
gpio_init(JOY_BTN);
gpio_set_dir(JOY_X, GPIO_IN);
gpio_set_dir(JOY_Y, GPIO_IN);
gpio_set_dir(JOY_BTN, GPIO_IN);
gpio_pull_up(JOY_BTN);
// Inicializa OLED
i2c_init(I2C_PORT, 400 * 1000);
gpio_set_function(I2C_SDA, GPIO_FUNC_I2C);
gpio_set_function(I2C_SCL, GPIO_FUNC_I2C);
gpio_pull_up(I2C_SDA);
gpio_pull_up(I2C_SCL);
ssd1306_init(&oled, 128, 64, I2C_PORT, 0x3C);
while (1) {
draw_menu();
if (!gpio_get(JOY_X)) { // Direita (próximo item)
menu_index = (menu_index + 1) % menu_size;
sleep_ms(200);
}
if (!gpio_get(JOY_Y)) { // Seleciona item
if (!submenu && menu_index == 2) { // Entra no submenu
menu_atual = menu_submenu;
menu_size = 3;
submenu = true;
} else if (submenu && menu_index == 2) { // Voltar ao menu principal
menu_atual = menu_inicio;
menu_size = 3;
submenu = false;
} else {
printf("Selecionado: %s\n", menu_atual[menu_index]);
}
sleep_ms(200);
}
}
}