#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
int upButton = 10;
int downButton = 11;
int selectButton = 12;
int menuLevel = 5;
int menuIndex0 = 0;
int menuIndex1 = 0;
int menuIndex2 = 0;
int menuIndex3 = 0;
int menuIndex4 = 0;
int menuIndex5 = 0;
int T1 = 25;
int T2 = 25;
int T3 = 25;
int T4 = 25;
int T5 = 25;
int T6 = 25;
int T7 = 25;
int T8 = 25;
float O1 = 0.00;
float O2 = 0.00;
float O3 = 0.00;
float O4 = 0.00;
float O5 = 0.00;
float O6 = 0.00;
float O7 = 0.00;
float O8 = 0.00;
// Define blink parameters
const unsigned long blinkInterval = 400; // Blink interval in milliseconds
unsigned long previousMillis = 0; // Previous time the text was updated
bool isTextVisible = true; // Flag to track text visibility
void setup() {
lcd.init();
lcd.backlight();
pinMode(upButton, INPUT_PULLUP);
pinMode(downButton, INPUT_PULLUP);
pinMode(selectButton, INPUT_PULLUP);
updateMenu();
}
void loop() {
if (!digitalRead(downButton)) {
if (menuLevel == 0) {
menuIndex0++;
}
else if (menuLevel == 1) {
menuIndex1++;
}
else if (menuLevel == 2) {
menuIndex2++;
}
else if (menuLevel == 3) {
menuIndex3++;
}
else if (menuLevel == 4) {
menuIndex4++;
}
else if (menuLevel == 5) {
}
else if (menuLevel == 6) {
T1++;
}
else if (menuLevel == 7) {
T2++;
}
else if (menuLevel == 8) {
T3++;
}
else if (menuLevel == 9) {
T4++;
}
else if (menuLevel == 10) {
T5++;
}
else if (menuLevel == 11) {
T6++;
}
else if (menuLevel == 12) {
T7++;
}
else if (menuLevel == 13) {
T8++;
}
else if (menuLevel == 14) {
O1 += 0.10;
}
else if (menuLevel == 15) {
O2 += 0.10;
}
else if (menuLevel == 16) {
O3 += 0.10;
}
else if (menuLevel == 17) {
O4 += 0.10;
}
else if (menuLevel == 18) {
O5 += 0.10;
}
else if (menuLevel == 19) {
O6 += 0.10;
}
else if (menuLevel == 20) {
O7 += 0.10;
}
else if (menuLevel == 21) {
O8 += 0.10;
}
updateMenu();
delay(100);
while (!digitalRead(downButton));
}
if (!digitalRead(upButton)) {
if (menuLevel == 0) {
menuIndex0--;
}
else if (menuLevel == 1) {
menuIndex1--;
}
else if (menuLevel == 2) {
menuIndex2--;
}
else if (menuLevel == 3) {
menuIndex3--;
}
else if (menuLevel == 4) {
menuIndex4--;
}
else if (menuLevel == 5) {
}
else if (menuLevel == 6) {
T1--;
}
else if (menuLevel == 7) {
T2--;
}
else if (menuLevel == 8) {
T3--;
}
else if (menuLevel == 9) {
T4--;
}
else if (menuLevel == 10) {
T5--;
}
else if (menuLevel == 11) {
T6--;
}
else if (menuLevel == 12) {
T7--;
}
else if (menuLevel == 13) {
T8--;
}
else if (menuLevel == 14) {
O1 -= 0.10;
}
else if (menuLevel == 15) {
O2 -= 0.10;
}
else if (menuLevel == 16) {
O3 -= 0.10;
}
else if (menuLevel == 17) {
O4 -= 0.10;
}
else if (menuLevel == 18) {
O5 -= 0.10;
}
else if (menuLevel == 19) {
O6 -= 0.10;
}
else if (menuLevel == 20) {
O7 -= 0.10;
}
else if (menuLevel == 21) {
O8 -= 0.10;
}
updateMenu();
delay(100);
while (!digitalRead(upButton));
}
if (!digitalRead(selectButton)) {
executeAction();
delay(100);
while (!digitalRead(selectButton));
}
// Blink text
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= blinkInterval) {
previousMillis = currentMillis;
isTextVisible = !isTextVisible;
updateMenu();
}
}
void updateMenu() {
if (menuLevel == 0) {
if (menuIndex0 < 0) {
menuIndex0 = 4;
}
if (menuIndex0 > 4) {
menuIndex0 = 0;
}
lcd.clear();
lcd.setCursor(0, 0);
switch (menuIndex0) {
case 0:
lcd.print(">Set");
break;
case 1:
lcd.print(">Calibration");
break;
case 2:
lcd.print(">Fault");
break;
case 3:
lcd.print(">History");
break;
case 4:
lcd.print(">Exit");
break;
}
}
else if (menuLevel == 1) {
if (menuIndex1 < 0) {
menuIndex1 = 8;
}
if (menuIndex1 > 8) {
menuIndex1 = 0;
}
lcd.clear();
lcd.setCursor(0, 0);
switch (menuIndex1) {
case 0:
lcd.print(">>Set T1: ");
lcd.print(T1);
break;
case 1:
lcd.print(">>Set T2: ");
lcd.print(T2);
break;
case 2:
lcd.print(">>Set T3: ");
lcd.print(T3);
break;
case 3:
lcd.print(">>Set T4: ");
lcd.print(T4);
break;
case 4:
lcd.print(">>Set T5: ");
lcd.print(T5);
break;
case 5:
lcd.print(">>Set T6: ");
lcd.print(T6);
break;
case 6:
lcd.print(">>Set T7: ");
lcd.print(T7);
break;
case 7:
lcd.print(">>Set T8: ");
lcd.print(T8);
break;
case 8:
lcd.print(">>Back");
break;
}
}
else if (menuLevel == 2) {
if (menuIndex2 < 0) {
menuIndex2 = 8;
}
if (menuIndex2 > 8) {
menuIndex2 = 0;
}
lcd.clear();
lcd.setCursor(0, 0);
switch (menuIndex2) {
case 0:
lcd.print(">>Offv T1: ");
lcd.print(O1);
break;
case 1:
lcd.print(">>Offv T2: ");
lcd.print(O2);
break;
case 2:
lcd.print(">>Offv T3: ");
lcd.print(O3);
break;
case 3:
lcd.print(">>Offv T4: ");
lcd.print(O4);
break;
case 4:
lcd.print(">>Offv T5: ");
lcd.print(O5);
break;
case 5:
lcd.print(">>Offv T6: ");
lcd.print(O6);
break;
case 6:
lcd.print(">>Offv T7: ");
lcd.print(O7);
break;
case 7:
lcd.print(">>Offv T8: ");
lcd.print(O8);
break;
case 8:
lcd.print(">>Back");
break;
}
}
else if (menuLevel == 3) {
if (menuIndex3 < 0) {
menuIndex3 = 2;
}
if (menuIndex3 > 2) {
menuIndex3 = 0;
}
lcd.clear();
lcd.setCursor(0, 0);
switch (menuIndex3) {
case 0:
lcd.print(">>Last Fault: ");
break;
case 1:
lcd.print(">>Pre Fault: ");
break;
case 2:
lcd.print(">>Back");
break;
}
}
else if (menuLevel == 3) {
if (menuIndex3 < 0) {
menuIndex3 = 2;
}
if (menuIndex3 > 2) {
menuIndex3 = 0;
}
lcd.clear();
lcd.setCursor(0, 0);
switch (menuIndex3) {
case 0:
lcd.print(">>Current Fault: ");
break;
case 1:
lcd.print(">>Pre Fault: ");
break;
case 2:
lcd.print(">>Back");
break;
}
}
else if (menuLevel == 4) {
if (menuIndex4 < 0) {
menuIndex4 = 10;
}
if (menuIndex4 > 10) {
menuIndex4 = 0;
}
lcd.clear();
lcd.setCursor(0, 0);
switch (menuIndex4) {
case 0:
lcd.print(">>T1: ");
break;
case 1:
lcd.print(">>T2: ");
break;
case 2:
lcd.print(">>T3: ");
break;
case 3:
lcd.print(">>T4: ");
break;
case 4:
lcd.print(">>T5: ");
break;
case 5:
lcd.print(">>T6: ");
break;
case 6:
lcd.print(">>T7: ");
break;
case 7:
lcd.print(">>T8: ");
break;
case 8:
lcd.print(">>RPM1: ");
break;
case 9:
lcd.print(">>RPM2: ");
break;
case 10:
lcd.print(">>Back");
break;
}
}
else if (menuLevel == 5) {
if (menuIndex5 < 0) {
menuIndex5 = 1;
}
if (menuIndex5 > 1) {
menuIndex5 = 0;
}
lcd.clear();
lcd.setCursor(0, 0);
switch (menuIndex5) {
case 0:
lcd.print("T1 T2 T3 T4 RPM1");
break;
case 1:
lcd.print("T5 T6 T7 T8 RPM2");
break;
}
}
else if (menuLevel == 6) {
if (T1 < 0) {
T1 = 99;
}
if (T1 > 99) {
T1 = 0;
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(">>Set T1: ");
if (isTextVisible) {
lcd.print(T1);
} else {
lcd.print(" "); // Print empty spaces to hide the text
}
}
else if (menuLevel == 7) {
if (T2 < 0) {
T2 = 99;
}
if (T2 > 99) {
T2 = 0;
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(">>Set T2: ");
if (isTextVisible) {
lcd.print(T2);
} else {
lcd.print(" "); // Print empty spaces to hide the text
}
}
else if (menuLevel == 8) {
if (T3 < 0) {
T3 = 99;
}
if (T3 > 99) {
T3 = 0;
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(">>Set T3: ");
if (isTextVisible) {
lcd.print(T3);
} else {
lcd.print(" "); // Print empty spaces to hide the text
}
}
else if (menuLevel == 9) {
if (T4 < 0) {
T4 = 99;
}
if (T4 > 99) {
T4 = 0;
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(">>Set T4: ");
if (isTextVisible) {
lcd.print(T4);
} else {
lcd.print(" "); // Print empty spaces to hide the text
}
}
else if (menuLevel == 10) {
if (T5 < 0) {
T5 = 99;
}
if (T5 > 99) {
T5 = 0;
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(">>Set T5: ");
if (isTextVisible) {
lcd.print(T5);
} else {
lcd.print(" "); // Print empty spaces to hide the text
}
}
else if (menuLevel == 11) {
if (T6 < 0) {
T6 = 99;
}
if (T6 > 99) {
T6 = 0;
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(">>Set T6: ");
if (isTextVisible) {
lcd.print(T6);
} else {
lcd.print(" "); // Print empty spaces to hide the text
}
}
else if (menuLevel == 12) {
if (T7 < 0) {
T7 = 99;
}
if (T7 > 99) {
T7 = 0;
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(">>Set T7: ");
if (isTextVisible) {
lcd.print(T7);
} else {
lcd.print(" "); // Print empty spaces to hide the text
}
}
else if (menuLevel == 13) {
if (T8 < 0) {
T8 = 99;
}
if (T8 > 99) {
T8 = 0;
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(">>Set T8: ");
if (isTextVisible) {
lcd.print(T8);
} else {
lcd.print(" "); // Print empty spaces to hide the text
}
}
else if (menuLevel == 14) {
if (O1 < -10) {
O1 = 10;
}
if (O1 > 10) {
O1 = -10;
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(">>Offv T1: ");
if (isTextVisible) {
lcd.print(O1);
} else {
lcd.print(" "); // Print empty spaces to hide the text
}
}
else if (menuLevel == 15) {
if (O2 < -10) {
O2 = 10;
}
if (O2 > 10) {
O2 = -10;
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(">>Offv T2: ");
if (isTextVisible) {
lcd.print(O2);
} else {
lcd.print(" "); // Print empty spaces to hide the text
}
}
else if (menuLevel == 16) {
if (O3 < -10) {
O3 = 10;
}
if (O3 > 10) {
O3 = -10;
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(">>Offv T3: ");
if (isTextVisible) {
lcd.print(O3);
} else {
lcd.print(" "); // Print empty spaces to hide the text
}
}
else if (menuLevel == 17) {
if (O4 < -10) {
O4 = 10;
}
if (O4 > 10) {
O4 = -10;
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(">>Offv T4: ");
if (isTextVisible) {
lcd.print(O4);
} else {
lcd.print(" "); // Print empty spaces to hide the text
}
}
else if (menuLevel == 18) {
if (O5 < -10) {
O5 = 10;
}
if (O5 > 10) {
O5 = -10;
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(">>Offv T5: ");
if (isTextVisible) {
lcd.print(O5);
} else {
lcd.print(" "); // Print empty spaces to hide the text
}
}
else if (menuLevel == 19) {
if (O6 < -10) {
O6 = 10;
}
if (O6 > 10) {
O6 = -10;
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(">>Offv T6: ");
if (isTextVisible) {
lcd.print(O6);
} else {
lcd.print(" "); // Print empty spaces to hide the text
}
}
else if (menuLevel == 20) {
if (O7 < -10) {
O7 = 10;
}
if (O7 > 10) {
O7 = -10;
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(">>Offv T7: ");
if (isTextVisible) {
lcd.print(O7);
} else {
lcd.print(" "); // Print empty spaces to hide the text
}
}
else if (menuLevel == 21) {
if (O8 < -10) {
O8 = 10;
}
if (O8 > 10) {
O8 = -10;
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(">>Offv T8: ");
if (isTextVisible) {
lcd.print(O8);
} else {
lcd.print(" "); // Print empty spaces to hide the text
}
}
}
void executeAction() {
if (menuLevel == 0) {
switch (menuIndex0) {
case 0:
menuLevel = 1;
menuIndex1 = 0;
updateMenu();
break;
case 1:
menuLevel = 2;
menuIndex2 = 0;
updateMenu();
break;
case 2:
menuLevel = 3;
menuIndex3 = 0;
updateMenu();
break;
case 3:
menuLevel = 4;
menuIndex4 = 0;
updateMenu();
break;
case 4:
menuLevel = 5;
menuIndex5 = 0;
updateMenu();
break;
}
}
else if (menuLevel == 1) {
switch (menuIndex1) {
case 0:
menuLevel = 6;
T1;
updateMenu();
break;
case 1:
menuLevel = 7;
T2;
updateMenu();
break;
case 2:
menuLevel = 8;
T3;
updateMenu();
break;
case 3:
menuLevel = 9;
T4;
updateMenu();
break;
case 4:
menuLevel = 10;
T5;
updateMenu();
break;
case 5:
menuLevel = 11;
T6;
updateMenu();
break;
case 6:
menuLevel = 12;
T7;
updateMenu();
break;
case 7:
menuLevel = 13;
T8;
updateMenu();
break;
case 8:
menuLevel = 0;
menuIndex0 = 0;
updateMenu();
break;
}
}
else if (menuLevel == 2) {
switch (menuIndex2) {
case 0:
menuLevel = 14;
O1;
updateMenu();
break;
case 1:
menuLevel = 15;
O2;
updateMenu();
break;
case 2:
menuLevel = 16;
O3;
updateMenu();
break;
case 3:
menuLevel = 17;
O4;
updateMenu();
break;
case 4:
menuLevel = 18;
O5;
updateMenu();
break;
case 5:
menuLevel = 19;
O6;
updateMenu();
break;
case 6:
menuLevel = 20;
O7;
updateMenu();
break;
case 7:
menuLevel = 21;
O8;
updateMenu();
break;
case 8:
menuLevel = 0;
menuIndex0 = 1;
updateMenu();
break;
}
}
else if (menuLevel == 3) {
switch (menuIndex3) {
case 0:
updateMenu();
break;
case 1:
updateMenu();
break;
case 2:
menuLevel = 0;
menuIndex0 = 2;
updateMenu();
break;
}
}
else if (menuLevel == 4) {
switch (menuIndex4) {
case 0:
updateMenu();
break;
case 1:
updateMenu();
break;
case 2:
updateMenu();
break;
case 3:
updateMenu();
break;
case 4:
updateMenu();
break;
case 5:
updateMenu();
break;
case 6:
updateMenu();
break;
case 7:
updateMenu();
break;
case 8:
updateMenu();
break;
case 9:
updateMenu();
break;
case 10:
menuLevel = 0;
menuIndex0 = 3;
updateMenu();
break;
}
}
else if (menuLevel == 5) {
switch (menuIndex5) {
case 0:
menuLevel = 0;
menuIndex0 = 0;
updateMenu();
break;
case 1:
menuLevel = 0;
menuIndex0 = 0;
updateMenu();
break;
}
}
else if (menuLevel == 6) {
if (!digitalRead(selectButton)) {
menuLevel = 1;
menuIndex1 = 0;
updateMenu();
while (!digitalRead(selectButton));
}
}
else if (menuLevel == 7) {
if (!digitalRead(selectButton)) {
menuLevel = 1;
menuIndex1 = 1;
updateMenu();
while (!digitalRead(selectButton));
}
}
else if (menuLevel == 8) {
if (!digitalRead(selectButton)) {
menuLevel = 1;
menuIndex1 = 2;
updateMenu();
while (!digitalRead(selectButton));
}
}
else if (menuLevel == 9) {
if (!digitalRead(selectButton)) {
menuLevel = 1;
menuIndex1 = 3;
updateMenu();
while (!digitalRead(selectButton));
}
}
else if (menuLevel == 10) {
if (!digitalRead(selectButton)) {
menuLevel = 1;
menuIndex1 = 4;
updateMenu();
while (!digitalRead(selectButton));
}
}
else if (menuLevel == 11) {
if (!digitalRead(selectButton)) {
menuLevel = 1;
menuIndex1 = 5;
updateMenu();
while (!digitalRead(selectButton));
}
}
else if (menuLevel == 12) {
if (!digitalRead(selectButton)) {
menuLevel = 1;
menuIndex1 = 6;
updateMenu();
while (!digitalRead(selectButton));
}
}
else if (menuLevel == 13) {
if (!digitalRead(selectButton)) {
menuLevel = 1;
menuIndex1 = 7;
updateMenu();
while (!digitalRead(selectButton));
}
}
else if (menuLevel == 14) {
if (!digitalRead(selectButton)) {
menuLevel = 2;
menuIndex2 = 0;
updateMenu();
while (!digitalRead(selectButton));
}
}
else if (menuLevel == 15) {
if (!digitalRead(selectButton)) {
menuLevel = 2;
menuIndex2 = 1;
updateMenu();
while (!digitalRead(selectButton));
}
}
else if (menuLevel == 16) {
if (!digitalRead(selectButton)) {
menuLevel = 2;
menuIndex2 = 2;
updateMenu();
while (!digitalRead(selectButton));
}
}
else if (menuLevel == 17) {
if (!digitalRead(selectButton)) {
menuLevel = 2;
menuIndex2 = 3;
updateMenu();
while (!digitalRead(selectButton));
}
}
else if (menuLevel == 18) {
if (!digitalRead(selectButton)) {
menuLevel = 2;
menuIndex2 = 4;
updateMenu();
while (!digitalRead(selectButton));
}
}
else if (menuLevel == 19) {
if (!digitalRead(selectButton)) {
menuLevel = 2;
menuIndex2 = 5;
updateMenu();
while (!digitalRead(selectButton));
}
}
else if (menuLevel == 20) {
if (!digitalRead(selectButton)) {
menuLevel = 2;
menuIndex2 = 6;
updateMenu();
while (!digitalRead(selectButton));
}
}
else if (menuLevel == 21) {
if (!digitalRead(selectButton)) {
menuLevel = 2;
menuIndex2 = 7;
updateMenu();
while (!digitalRead(selectButton));
}
}
}