#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
// Definirea pinilor keypad-ului
const byte ROWS = 4; // numărul de rânduri ale keypad-ului
const byte COLS = 4; // numărul de coloane ale keypad-ului
char keys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6}; // pinii pentru rândurile keypad-ului
byte colPins[COLS] = {5, 4, 3, 2}; // pinii pentru coloanele keypad-ului
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS); // initializarea keypad-ului
String inputString;
long inputInt;
// Definirea LCD-ului I2C
LiquidCrystal_I2C lcd(0x27, 16, 2); // adresa I2C și dimensiunea LCD-ului
enum MenuOption {
MANUAL_INPUT,
BURST_TEST,
NUM_MENU_OPTIONS
};
MenuOption currentOption = MANUAL_INPUT; // opțiunea curentă din meniu
bool stopFlag = false; // indicator pentru oprirea execuției
// Declarația funcției pentru scriptul 2
void runScript2();
void setup() {
lcd.begin(16, 2); // inițializarea LCD-ului
lcd.backlight(); // activarea iluminării LCD-ului
// Afisarea optiunilor din meniu
lcd.setCursor(0, 0);
lcd.print("1. Manual Input");
lcd.setCursor(0, 1);
lcd.print("2. Burst Test");
}
void loop() {
char key = keypad.getKey(); // citirea valorii introduse prin keypad
if (key != NO_KEY) {
switch (key) {
case 'A': // Navigare sus în meniu
currentOption = static_cast<MenuOption>((currentOption - 1 + NUM_MENU_OPTIONS) % NUM_MENU_OPTIONS);
updateMenuDisplay();
break;
case 'B': // Navigare jos în meniu
currentOption = static_cast<MenuOption>((currentOption + 1) % NUM_MENU_OPTIONS);
updateMenuDisplay();
break;
case 'C': // Selectare opțiune
if (currentOption == MANUAL_INPUT) {
lcd.clear();
lcd.print("Input Value:");
runScript2(); // Apelul către scriptul 2 (funcția runScript2())
}
else if (currentOption == BURST_TEST) {
lcd.clear();
lcd.print("Selected: Burst");
// Aici puteți insera codul pentru opțiunea "Burst Test"
}
break;
case 'D': // Stop și întoarcere la meniul anterior
if (stopFlag) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("1. Manual Input");
lcd.setCursor(0, 1);
lcd.print("2. Burst Test");
currentOption = MANUAL_INPUT;
stopFlag = false;
} else {
lcd.clear();
lcd.print("Test Stopped");
stopFlag = true;
}
break;
}
}
}
void updateMenuDisplay() {
lcd.setCursor(0, 0);
if (currentOption == MANUAL_INPUT) {
lcd.print(">");
} else {
lcd.print(" ");
}
lcd.print("1. Manual Input");
lcd.setCursor(0, 1);
if (currentOption == BURST_TEST) {
lcd.print(">");
} else {
lcd.print(" ");
}
lcd.print("2. Burst Test");
}
// Implementarea funcției pentru scriptul 2
void runScript2() {
lcd.clear();
lcd.print("Input Value:");
lcd.setCursor(1, 1);
String inputString;
long inputInt;
while (true) {
char key = keypad.getKey();
if (key) {
lcd.print(key);
if (key >= '0' && key <= '9') { // doar pentru taste numerice
inputString += key;
} else if (key == '#') {
if (inputString.length() > 0) {
inputInt = inputString.toInt();
inputString = "";
lcd.clear();
lcd.print("Test Started: ");
lcd.print(inputInt);
// Aici puteți adăuga codul specific pentru scriptul 2,
// folosind valoarea inputInt pentru a-l utiliza în script
//delay(2000);
lcd.clear();
lcd.print("Test Completed");
delay(2000);
break; // întreruperea buclei while
}
} else if (key == '*') {
inputString = "";
lcd.clear();
lcd.print("Test Canceled");
delay(2000);
break; // întreruperea buclei while
}
}
}
}
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
keypad:R1
keypad:R2
keypad:R3
keypad:R4
keypad:C1
keypad:C2
keypad:C3
keypad:C4
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL