#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
#include <elapsedMillis.h>
//Setup different timers
elapsedMillis defTimer;
//Define OLED display
#define OLED_WIDTH 128
#define OLED_HEIGHT 64
#define OLED_ADDR 0x3C
Adafruit_SSD1306 display(OLED_WIDTH, OLED_HEIGHT);
//Define analog joystick pins and store variables
#define joyX A0 //Joystick Horizontal
#define joyY A1 //Joystick Vertical
#define joyP 2 //Joystick Push
int xValue, yValue, pValue; //Varibles to store current data
void setup() {
//Setup OLED display
display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);
display.clearDisplay();
display.display();
//Setup analog joystick push btn
pinMode(2, INPUT);
//Display welcome msg
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(23, 25);
display.print("W"); display.display();
defTimer = 0;
while(true) {
switch(defTimer) {
case 300: display.print("e"); display.display(); break;
case 600: display.print("l"); display.display(); break;
case 900: display.print("c"); display.display(); break;
case 1200: display.print("o"); display.display(); break;
case 1500: display.print("m"); display.display(); break;
case 1800: display.print("e"); display.display(); break;
case 4000: //After 4s open main menu
display.clearDisplay();
display.display();
mainMenu();
break;
}
}
}
void mainMenu() {
//Menu nav variables
int selectedMenu = 1;
bool buttonHold = false;
//Defaulte 1. menu RECORD
display.setTextSize(2);
display.setTextColor(WHITE);
display.fillRect(0, 0, 128, 31, WHITE);
display.drawRect(0, 33, 128, 31, WHITE);
display.setTextColor(BLACK);
display.setCursor(-1, 9);
display.write(0x10);
display.setCursor(32, 9);
display.print("RECORD");
display.setTextColor(WHITE);
display.setCursor(18, 41);
display.print("PLAYBACK");
display.display();
//Menu select with joyY
while(true) {
//Read joy current pos
xValue = analogRead(joyX);
yValue = analogRead(joyY);
pValue = digitalRead(joyP);
//Re enamble button action when joyY released
if(yValue < 900 && yValue > 100) { buttonHold = false; }
if(yValue > 900 && selectedMenu == 2 && buttonHold == false) { //1. menu RECORD from PLAYBACK
selectedMenu = 1;
buttonHold = true;
display.clearDisplay();
display.display();
display.setTextSize(2);
display.setTextColor(WHITE);
display.fillRect(0, 0, 128, 31, WHITE);
display.drawRect(0, 33, 128, 31, WHITE);
display.setTextColor(BLACK);
display.setCursor(-1, 9);
display.write(0x10);
display.setCursor(32, 9);
display.print("RECORD");
display.setTextColor(WHITE);
display.setCursor(18, 41);
display.print("PLAYBACK");
display.display();
}
if(yValue < 100 && selectedMenu == 1 && buttonHold == false) { //2. menu PLAYBACK from RECOD
selectedMenu = 2;
buttonHold = true;
display.clearDisplay();
display.display();
display.setTextSize(2);
display.setTextColor(WHITE);
display.drawRect(0, 0, 128, 31, WHITE);
display.fillRect(0, 33, 128, 31, WHITE);
display.setTextColor(WHITE);
display.setCursor(32, 8);
display.print("RECORD");
display.setTextColor(BLACK);
display.setCursor(-1, 42);
display.write(0x10);
display.setCursor(18, 41);
display.print("PLAYBACK");
display.display();
}
if(yValue < 100 && selectedMenu == 2 && buttonHold == false) { //3. menu SETUP from PLAYBACK
selectedMenu = 3;
buttonHold = true;
display.clearDisplay();
display.display();
display.setTextSize(2);
display.setTextColor(WHITE);
display.drawRect(0, 0, 128, 31, WHITE);
display.fillRect(0, 33, 128, 31, WHITE);
display.setTextColor(WHITE);
display.setCursor(18, 8);
display.print("PLAYBACK");
display.setTextColor(BLACK);
display.setCursor(-1, 42);
display.write(0x10);
display.setCursor(35, 41);
display.print("SETUP");
display.display();
}
if(yValue > 900 && selectedMenu == 3 && buttonHold == false) { //2. menu PLAYPACK from SETUP
selectedMenu = 2;
buttonHold = true;
display.clearDisplay();
display.display();
display.setTextSize(2);
display.setTextColor(WHITE);
display.drawRect(0, 0, 128, 31, WHITE);
display.fillRect(0, 33, 128, 31, WHITE);
display.setTextColor(WHITE);
display.setCursor(32, 8);
display.print("RECORD");
display.setTextColor(BLACK);
display.setCursor(-1, 42);
display.write(0x10);
display.setCursor(18, 41);
display.print("PLAYBACK");
display.display();
}
//Enter current selected menu when analog joy pressed
if(pValue == 1) {
switch(selectedMenu) {
case 1: recordMenu(); break;
case 2: playbackMenu(); break;
case 3: setupMenu(); break;
}
break;
}
}
}
void recordMenu() {
display.clearDisplay();
display.display();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.print("RECORD");
display.display();
}
void displayInputValues() {}
void recordSetup() {
//
//Change dmx record range
//
//
//DMX pass thru or input only
//
}
void recordDMX() {
//
//Ask single record or cue playback
//
//
//Ask for new save or overwrite existing
//
}
void playbackMenu() {
display.clearDisplay();
display.display();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.print("PLAYBACK");
display.display();
}
void setupMenu() {
display.clearDisplay();
display.display();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.print("SETUP");
display.display();
}
void loop() {}