#include <Adafruit_SSD1306.h>
#include <Wire.h>
#include "BFKDefines.h"
#include "BFKRotary.h"
#include "BFKMenu.h"
void MenuClicked(char Option);
MenuItem mainMenu[] =
{
{'1', "First Selection", MenuClicked},
{'2', "Second Selection", MenuClicked},
{'3', "Third Selection", MenuClicked},
{'S', "Settings", MenuClicked},
{'X', "Exit", MenuClicked},
};
MenuItem menu2[] =
{
{'A', "segunda uno", MenuClicked},
{'B', "segunda dos", MenuClicked},
{'C', "segunda tres", MenuClicked},
{'D', "segunda cuatro", MenuClicked},
{'E', "segunda cinco", MenuClicked},
{'R', "Volver", MenuClicked},
};
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
Rotary rotary(ROTARY_CLK, ROTARY_DT, ROTARY_SW);
Menu menuPpal(&display, "Menu", &mainMenu[0], 5, 1);
Menu menuSettings(&display, "Settings", &menu2[0], 6, 1);
void CW()
{
Serial.println("CW");
menuPpal.Inc();
menuSettings.Inc();
}
void CCW()
{
Serial.println("CCW");
menuPpal.Dec();
menuSettings.Dec();
}
void Pressed()
{
Serial.println("Pressed");
if(menuPpal.Visible)
{
menuPpal.OptionSelected();
}
else
{
menuPpal.Show();
}
}
void Released()
{
Serial.println("Released");
}
void MainScreen()
{
display.clearDisplay();
display.setCursor(20, 32);
display.print("Pantalla principal");
display.display();
}
void MenuClicked(char Option)
{
Serial.print("Menu ");
Serial.println(Option);
switch(Option)
{
case 'S':
menuPpal.Hide();
menuSettings.Show();
break;
case 'X':
menuPpal.Hide();
MainScreen();
break;
case 'R':
menuSettings.Hide();
menuPpal.Show();
break;
}
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32-S3!");
if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;); // Don't proceed, loop forever
}
display.clearDisplay();
display.setTextSize(SCREEN_TEXT_SIZE);
display.setTextColor(SSD1306_WHITE);
display.print("hola");
display.display();
rotary.Setup();
rotary.OnCW(CW);
rotary.OnCCW(CCW);
rotary.OnPressed(Pressed);
rotary.OnReleased(Released);
menuPpal.Show();
}
void loop() {
// put your main code here, to run repeatedly:
delay(10); // this speeds up the simulation
rotary.Loop();
int ButtonVal = analogRead(ANALOG_BTN);
if(ButtonVal != 0)
{
Serial.print(millis());
Serial.print(" ");
Serial.println(ButtonVal);
}
}