#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 20, 4);

int upButton = 2;
int downButton = 3;
int selectButton = 4;
int backButton = 5;
int inPin = A1;
int vout = 8;
int menu = 1;
int stop = 0;
//int sensorValue = analogRead(A0);
float voltage = 0.0;

void setup() {
  Serial.begin(9600);
  lcd.init();
  lcd.backlight();
  lcd.setCursor(5,1);
  lcd.print(" Pressure ");
  lcd.setCursor(7,2);
  lcd.print("Tester");
  delay(1500);
  pinMode(upButton, INPUT_PULLUP);
  pinMode(downButton, INPUT_PULLUP);
  pinMode(selectButton, INPUT_PULLUP);
  pinMode(backButton, INPUT_PULLUP);
  pinMode(inPin, INPUT);
  
  updateMenu();
}

void loop() {
   int sensorvalue = analogRead(A1);
  voltage = (sensorvalue * 5.0 )/1024.0;
  if (voltage < 0.1){
    voltage = 0.0;
  }

    if (!digitalRead(downButton)){
    menu++;
    updateMenu();
    delay(100);
    while (!digitalRead(downButton));
  }
  if (!digitalRead(upButton)){
    menu--;
    updateMenu();
    delay(100);
    while(!digitalRead(upButton));
  }
  if (!digitalRead(selectButton)){
    executeAction();
    //updateMenu();
    delay(100);
    while (!digitalRead(selectButton));
  }
  if (!digitalRead(backButton)){
    if (!stop) {
      stop = 1;
      lcd.clear();
      lcd.setCursor(6,1);
      lcd.print("Test");
      lcd.setCursor(5,2);
      lcd.print("Stopped");
      
    }
    else {
      stop = 0;
      updateMenu();
    }
    delay(100);
    while (!digitalRead(backButton));
  }

}

void updateMenu() {
  switch (menu) {
    case 0:
      menu = 1;
      break;
    case 1:
      lcd.clear();
      lcd.print(">25 mBar Test");
      lcd.setCursor(0, 1);
      lcd.print(" 50 mBar Test");
      lcd.setCursor(0,2);
      lcd.print(" 100 mBar Test");
      lcd.setCursor(0,3);
      lcd.print(" Burst Test");
      break;
    case 2:
      lcd.clear();
      lcd.print(" 25 mBar Test");
      lcd.setCursor(0, 1);
      lcd.print(">50 mBar Test");
      lcd.setCursor(0,2);
      lcd.print(" 100 mBar Test");
      lcd.setCursor(0,3);
      lcd.print(" Burst Test");
      break;
    case 3:
      lcd.clear();
      lcd.print(" 25 mBar Test");
      lcd.setCursor(0, 1);
      lcd.print(" 50 mBar Test");
      lcd.setCursor(0,2);
      lcd.print(">100 mBar Test");
      lcd.setCursor(0,3);
      lcd.print(" Burst Test");
      break;
    case 4:
      lcd.clear();
      lcd.print(" 25 mBar Test");
      lcd.setCursor(0, 1);
      lcd.print(" 50 mBar Test");
      lcd.setCursor(0,2);
      lcd.print(" 100 mBar Test");
      lcd.setCursor(0,3);
      lcd.print(">Burst Test");
      break;
    case 5:
      menu = 4;
      break;
  }
}

void executeAction() {
  switch (menu) {
    case 1:
      action1();
      break;
    case 2:
      action2();
      break;
    case 3:
      action3();
      break;
    case 4:
      action4();
      break;
  }
}

void action1() {
  lcd.clear();
  lcd.print("25mBar test run");
  lcd.setCursor(0,1);
  lcd.print("P.read= ");
  lcd.print(voltage);
  lcd.print("mBar");
}
void action2() {
  lcd.clear();
  lcd.print("50mBar test run");
  lcd.setCursor(0,1);
  lcd.print("P.read= ");
  lcd.print(analogRead(inPin));
  lcd.print("mBar");
  millis();
}
void action3() {
  lcd.clear();
  lcd.print("100mBar test run");
  lcd.setCursor(0,1);
  lcd.print("P.read= ");
  lcd.print(voltage);
  lcd.print("mBar");
  delay(10);
  
}
void action4() {
  lcd.clear();
  lcd.print("Burst test run");
  lcd.setCursor(0,1);
  lcd.print("P.read= ");
  lcd.print(voltage);
  lcd.print("mBar");
  
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
btn2:1.l
btn2:2.l
btn2:1.r
btn2:2.r
btn3:1.l
btn3:2.l
btn3:1.r
btn3:2.r
btn4:1.l
btn4:2.l
btn4:1.r
btn4:2.r
led1:A
led1:C
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL