#include <LiquidCrystal_I2C.h>
#define Row 4
#define Column 16
#define Adress 0x27
LiquidCrystal_I2C lcd(Adress, Column, Row);
const uint8_t buttonPins[] = { 2, 3, 4, 5, 6,};
const char* MenuSelected[] = { "Main", "Option", "About"};
const int numMainMenuOptions = 3;
int buttonNum;
int SelectedMenuIndex = 0;
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.setCursor(2,0);
lcd.print("Position control");
lcd.setCursor(7,2);
lcd.print("v0.0.1");
delay(2000);
lcd.clear();
for (int i=2; i <= 6; i++)
{
pinMode(i, INPUT_PULLUP);
}
}
void loop() {
delay(500);
if (SelectedMenuIndex < 2)
{
if (readButton() == "UP")
{
SelectedMenuIndex ++;
displayMainMenu();
}
}
if (SelectedMenuIndex > 0)
{
if (readButton() == "DOWN")
{
SelectedMenuIndex --;
displayMainMenu();
}
}
if (readButton() == "ENTER")
{
displayMainMenu();
}
}
String readButton()
{
while (true)
{
for (byte i=0; i < 5; i++)
{
if (digitalRead(buttonPins[i]) == LOW)
{
switch (buttonPins[i])
{
case 2: return "ENTER"; break;
case 3: return "RIGHT"; break;
case 4: return "UP"; break;
case 5: return "DOWN"; break;
case 6: return "LEFT"; break;
}
}
}
}
}
void displayMainMenu()
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print("Main");
lcd.setCursor(1,1);
lcd.print("Option");
lcd.setCursor(1,2);
lcd.print("About");
for(int i=0; i < numMainMenuOptions; i++)
{
if (i == SelectedMenuIndex)
{
lcd.setCursor(0,i);
lcd.print(">");
}
else
{
lcd.print(" ");
}
}
}