/*********
Rui Santos
Complete project details at https://randomnerdtutorials.com
*********/
#include <ezButton.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 32 // OLED display height, in pixels
ezButton btn_left(4);
ezButton btn_right(5);
bool btn_left_long = false;
bool btn_left_short = false;
int cursor_y = 0;
//menus variables
enum MenuState {
MENU_MAIN,
MENU_OPTION_1,
MENU_OPTION_2,
MENU_OPTION_3,
MENU_OPTION_4
};
MenuState currentMenu = MENU_MAIN;
//Timing Variables
unsigned long StartTime = millis();
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
Serial.begin(115200);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
display.clearDisplay();
}
void loop() {
btn_left.loop();
btn_right.loop();
display.clearDisplay();
switch (currentMenu) {
case MENU_MAIN:
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println(" Listen");
display.println(" Speak");
display.println(" Jam");
display.println(" Settings");
cursor(cursor_y);
break;
case MENU_OPTION_1:
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("Receiver : ON");
display.println("Emitter : OFF");
display.println("");
display.println("(<- signal ->)");
break;
case MENU_OPTION_2:
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("You are in Option 2");
break;
case MENU_OPTION_3:
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("You are in Option 3");
break;
case MENU_OPTION_4:
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("You are in Option 4");
break;
}
btn_left_read();
if (btn_left_short) {
cursor_y+=8;
if (cursor_y >= 32) {
cursor_y = 0;
}
}
if (btn_left_long) {
Serial.println(cursor_y);
if (currentMenu == MENU_MAIN) {
if(cursor_y == 0) {
currentMenu = MENU_OPTION_1;
}
if(cursor_y == 8) {
currentMenu = MENU_OPTION_2;
}
if(cursor_y == 16) {
currentMenu = MENU_OPTION_3;
}
if(cursor_y == 24) {
currentMenu = MENU_OPTION_4;
}
}
else {
currentMenu = MENU_MAIN;
}
}
btn_reset();
display.display();
}
void cursor(int cursor_y) {
display.setCursor(0, cursor_y);
display.println("->");
}
void btn_left_read() {
if (btn_left.isPressed()) {
StartTime = millis();
}
if (btn_left.isReleased()){
unsigned long CurrentTime = millis();
unsigned long ElapsedTime = CurrentTime - StartTime;
if (ElapsedTime < 1000){
btn_left_short = true;
}
if (ElapsedTime > 1000){
btn_left_long = true;
}
}
}
void btn_reset() {
btn_left_short = false;
btn_left_long = false;
}