#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// Definiciones de la pantalla OLED
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// Pines para los botones
const int buttonUp = 2;
const int buttonSelect = 3;
const int buttonDown = 4;
// Variables para controlar el menú
int currentOption = 0;
const char *menuOptions[] = {"Voltaje", "Resistencia", "Capacitancia", "Inductancia"};
const int totalOptions = sizeof(menuOptions) / sizeof(menuOptions[0]);
bool buttonPressed = false;
void setup() {
// Inicialización de los botones
pinMode(buttonUp, INPUT_PULLUP);
pinMode(buttonSelect, INPUT_PULLUP);
pinMode(buttonDown, INPUT_PULLUP);
// Inicialización de la pantalla OLED
//display.begin(SSD1306_I2C_ADDRESS, 0x3C);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.display();
// Mostrar la primera opción al inicio
showMenu();
}
void loop() {
if (digitalRead(buttonUp) == LOW && !buttonPressed) {
buttonPressed = true;
currentOption = (currentOption - 1 + totalOptions) % totalOptions;
showMenu();
} else if (digitalRead(buttonDown) == LOW && !buttonPressed) {
buttonPressed = true;
currentOption = (currentOption + 1) % totalOptions;
showMenu();
} else if (digitalRead(buttonSelect) == LOW && !buttonPressed) {
buttonPressed = true;
executeOption(currentOption);
}
if (digitalRead(buttonUp) == HIGH && digitalRead(buttonDown) == HIGH && digitalRead(buttonSelect) == HIGH) {
buttonPressed = false;
}
}
void showMenu() {
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
for (int i = 0; i < totalOptions; i++) {
if (i == currentOption) {
display.setTextColor(SSD1306_BLACK, SSD1306_WHITE); // Invertido
} else {
display.setTextColor(SSD1306_WHITE, SSD1306_BLACK);
}
display.setCursor(10, i * 10);
display.println(menuOptions[i]);
}
display.display();
}
void executeOption(int option) {
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(10, 20);
display.print("Seleccionado: ");
display.println(menuOptions[option]);
display.display();
delay(1000); // Pausa para mostrar el mensaje
showMenu();
}