#include <Arduino.h>
#include <U8g2lib.h>
#include <Bounce2.h>
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0,U8X8_PIN_NONE);
byte button_pins[]={12,13,15};
#define NUMBUTTONS sizeof(button_pins)
Bounce *buttons=new Bounce[NUMBUTTONS];
#define MENU_SIZE 5
char *menu[MENU_SIZE]={"Option1","Option2","Option3","Option4","Option5"};
int cursor=1;
void setup(void) {
u8g2.begin();
Serial.begin(9600);
for(int i=0;i<NUMBUTTONS;i++){
buttons[i].attach(button_pins[i],INPUT_PULLUP);
buttons[i].interval(25);
}
u8g2.firstPage();
do {
u8g2.setFont(u8g2_font_helvR08_tr);
showMenu();
} while ( u8g2.nextPage() );
}
bool selected=false;
int selectCursor;
void loop(void) {
for(int i=0;i<NUMBUTTONS;i++){
if(buttons[i].update() && buttons[i].fell()){
if(i==2) {
selected=true;
selectCursor=cursor;
displaySelect();
Serial.println("rst button");
}
if(i==0){
cursor++;
if(cursor>5) cursor=1;
displayMenu();
Serial.println("up button");
}
if(i==1){
cursor--;
if(cursor<1) cursor=5;
displayMenu();
Serial.println("down button");
}
}
}
}
void displaySelect()
{
u8g2.firstPage();
do {
u8g2.setFont(u8g2_font_helvR08_tr);
showMenu();
showSelect();
} while ( u8g2.nextPage() );
}
void displayMenu()
{
u8g2.firstPage();
do {
u8g2.setFont(u8g2_font_helvR08_tr);
showMenu();
if(selected) showSelectCursor();
} while ( u8g2.nextPage() );
}
void showMenu()
{
// u8g2.clearDisplay();
for(int i=0;i<MENU_SIZE;i++){
u8g2.drawStr(20, (i+1)*10, menu[i]);
// u8g2.sendBuffer();
}
u8g2.setCursor(14, 10*cursor);
u8g2.print('>');
}
void showSelect()
{
u8g2.setCursor(4, 10*6+2);
u8g2.print(">> select: ");
u8g2.print(menu[cursor-1]);
}
void showSelectCursor()
{
u8g2.setCursor(4, 10*6+2);
u8g2.print(">> select: ");
u8g2.print(menu[selectCursor-1]);
}
void executeChoice(int choice) {
switch(choice) {
case 0 :
Serial.print("Execute choice "); Serial.print(choice); Serial.print(" - "); Serial.println(menu[choice]);
break;
case 1 :
Serial.print("Execute choice "); Serial.print(choice); Serial.print(" - "); Serial.println(menu[choice]);
break;
case 2 :
Serial.print("Execute choice "); Serial.print(choice); Serial.print(" - "); Serial.println(menu[choice]);
break;
case 3 :
Serial.print("Execute choice "); Serial.print(choice); Serial.print(" - "); Serial.println(menu[choice]);
break;
case 4 :
Serial.print("Execute choice "); Serial.print(choice); Serial.print(" - "); Serial.println(menu[choice]);
break;
default :
Serial.print("Execute choice "); Serial.print(choice); Serial.print(" - "); Serial.println(menu[choice]);
break;
}
}