/*
* https://github.com/circuitsforfun
*
* https://github.com/VasilKalchev/LiquidMenu
*
*/
#include <LiquidCrystal_I2C.h>
#include <LiquidMenu.h>
#include "Button.h"
LiquidCrystal_I2C lcd(0x27, 20, 4);
// Button objects instantiation
const bool pullup = true;
Button next(8, pullup);
Button enter(9, pullup);
Button prev(10, pullup);
LiquidLine lineMainSpeed(0, 1, "SPEED");
LiquidLine lineMainDuration(0, 2, "DURATION");
LiquidLine lineMainCamera(0, 3, "CAMERA CONTROLS");
LiquidLine lineMainStart(0, 4, "START");
LiquidLine lineMainInfo(0, 5, "INFO");
LiquidScreen screenMain(lineMainSpeed,lineMainDuration,lineMainCamera,lineMainStart,lineMainInfo);
LiquidLine lineSpeed1(1, 1, "Speed sub 1");
LiquidScreen screenSpeed(lineSpeed1);
LiquidLine lineDuration1(1, 2, "Duration sub 1");
LiquidScreen screenDuration(lineDuration1);
LiquidLine lineCamera1(1, 3, "Camera Controls Sub 1");
LiquidScreen screenCamera(lineCamera1);
LiquidLine lineStart1(1, 4, "Start sub 1");
LiquidScreen screenStart(lineStart1);
LiquidLine lineInfo1(1, 5, "INFO sub 1");
LiquidScreen screenInfo(lineInfo1);
LiquidMenu menu(lcd);
menu.add_screen(Speed_screen);
menu.add_screen(Duration_screen);
menu.add_screen(Camera_screen);
menu.add_screen(Start_screen);
menu.add_screen(Info_screen);
// Used for attaching something to the lines, to make them focusable.
void DoSpeed() {
Serial.println(F("Speed pressed"));
menu.add_screen(screenSpeed);
return;
}
void DoDuration() {
Serial.println(F("Duration pressed"));
menu.add_screen(screenDuration);
return;
}
void DoCamera() {
Serial.println(F("Camera pressed"));
menu.add_screen(screenCamera);
return;
}
void DoStart() {
Serial.println(F("Start pressed"));
menu.add_screen(screenStart);
return;
}
void DoInfo() {
Serial.println(F("Info pressed"));
menu.add_screen(screenInfo);
return;
}
void DoPlaceholder() {
Serial.println(F("Placeholder Invoked"));
return;
}
void setup() {
Serial.begin(250000);
lcd.begin(20, 4);
// Main Lines
screenMain.add_line(lineMainSpeed);
screenMain.add_line(lineMainDuration);
screenMain.add_line(lineMainCamera);
screenMain.add_line(lineMainStart);
screenMain.add_line(lineMainInfo);
// Speed Lines
screenMain.add_line(lineSpeed1);
// Duration Lines
screenMain.add_line(lineDuration1);
// Camera Lines
screenMain.add_line(lineCamera1);
// Start Lines
screenMain.add_line(lineStart1);
// Info Lines
screenMain.add_line(lineInfo1);
// Attach main functions
lineMainSpeed.attach_function(1, DoSpeed);
lineMainDuration.attach_function(1, DoDuration);
lineMainCamera.attach_function(1, DoCamera);
lineMainStart.attach_function(1, DoStart);
lineMainInfo.attach_function(1, DoInfo);
// Attach Speed functions
lineSpeed1.attach_function(1, DoPlaceholder);
// Attach Duration functions
lineDuration1.attach_function(1, DoPlaceholder);
// Attach Camera functions
lineCamera1.attach_function(1, DoPlaceholder);
// Attach Start functions
lineStart1.attach_function(1, DoPlaceholder);
// Attach Info functions
lineInfo1.attach_function(1, DoPlaceholder);
screenMain.set_displayLineCount(4);
menu.add_screen(screenMain);
// Set the number of decimal places for a "line".
//lineMainSpeed.set_decimalPlaces(5);
menu.update();
}
void loop() {
if (next.check() == LOW) {
Serial.println(F("next button pressed"));
menu.switch_focus();
menu.update();
}
if (enter.check() == LOW) {
menu.call_function(1);
menu.update();
}
if (prev.check() == LOW) {
menu.previous_screen();
menu.update();
}
}
// STAR TRACKER MENU SELECT
//BUTTON 1: SUB MENU UP
//BUTTON 2: ENTER SUB MENU
//BUTTON 3: SUB MENU DOWN
// STAR TRACKING SPEED MENU
//BUTTON 1: SPEED UP
//BUTTON 2: ENTER AND EXIT BACK TO TOP LEVEL MENU
//BUTTON 3: SPEED DOWN
// STAR TRACKING DURATION MENU
//BUTTON 1: SPEED UP
//BUTTON 2: ENTER AND EXIT BACK TO TOP LEVEL MENU
//BUTTON 3: SPEED DOWN
// STAR TRACKER START
//BUTTON 1: EXIT BACK TO TOP LEVEL MENU
//BUTTON 2: START
//BUTTON 3: EXIT BACK TO TOP LEVEL MENU