#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
int upButton = 2;
int downButton = 3;
int selectButton = 4;
int backButton = 5;
int analogPin = A3;
int val = 0;
int menu = 1;
int stop = 0;
int Led_1 = 12;
int Led_2 = 13;
int Led_3 = 8;
// debounce variables
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
int lastUpButtonState = HIGH;
int lastDownButtonState = HIGH;
int lastSelectButtonState = HIGH;
int lastBackButtonState = HIGH;
void setup() {
pinMode(Led_1, OUTPUT);
lcd.init();
lcd.backlight();
lcd.setCursor(3,0);
lcd.print(" Pressure ");
lcd.setCursor(3,1);
lcd.print("Controller");
delay(1500);
pinMode(upButton, INPUT_PULLUP);
pinMode(downButton, INPUT_PULLUP);
pinMode(selectButton, INPUT_PULLUP);
pinMode(backButton, INPUT_PULLUP);
updateMenu();
}
void loop() {
//val = analogRead(analogPin);
//Serial.println(val);
int upButtonState = digitalRead(upButton);
int downButtonState = digitalRead(downButton);
int selectButtonState = digitalRead(selectButton);
int backButtonState = digitalRead(backButton);
// debounce the buttons
if (millis() - lastDebounceTime > debounceDelay) {
// update the last button states
lastUpButtonState = upButtonState;
lastDownButtonState = downButtonState;
lastSelectButtonState = selectButtonState;
lastBackButtonState = backButtonState;
if (!lastDownButtonState){
menu++;
updateMenu();
while (!digitalRead(downButton));
}
if (!lastUpButtonState){
menu--;
updateMenu();
while(!digitalRead(upButton));
}
if (!lastSelectButtonState){
executeAction();
delay(100);
while (!digitalRead(selectButton));
}
if (!lastBackButtonState){
if (stop==1) {
lcd.clear();
lcd.setCursor(1,0);
lcd.print("Test Stopped");
digitalWrite(Led_1, LOW);
digitalWrite(Led_2, LOW);
digitalWrite(Led_3, LOW);
lcd.setCursor(1,1);
lcd.print("Last Read:");
stop=0;
}
else
{
updateMenu();
}
delay(100);
while (!digitalRead(backButton));
}
// reset the debounce timer
lastDebounceTime = millis();
}
}
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");
break;
case 2:
lcd.clear();
lcd.print(" 25 mBar Test");
lcd.setCursor(0, 1);
lcd.print("->50 mBar Test");
break;
case 3:
lcd.clear();
lcd.print("->100 mBar Test");
lcd.setCursor(0, 1);
lcd.print(" Burst Test");
break;
case 4:
lcd.clear();
lcd.print(" 100 mBar Test");
lcd.setCursor(0, 1);
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");
val = analogRead(A3);
digitalWrite(Led_1, HIGH);
// read the input pin
// debug value
lcd.setCursor(1,1);
lcd.print("P:");
lcd.print(val) and lcd.print("mBar");
stop=1;
}
void action2() {
lcd.clear();
digitalWrite(Led_2, HIGH);
lcd.print("Executing #2");
stop=1;
}
void action3() {
lcd.clear();
digitalWrite(Led_3, HIGH);
lcd.print("Executing #3");
stop=1;
}
void action4() {
lcd.clear();
digitalWrite(Led_1, HIGH);
digitalWrite(Led_2, HIGH);
digitalWrite(Led_3, HIGH);
lcd.print("Executing #4");
stop=1;
}