#include <Keypad.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(10, 11, 6, 7, 8, 9);
const int RELAY_IN = 13;
const int buttonPin = 12;
int buttonState = 0;
int keynum = 0;
int buttonCount = 0;
bool start = false;
String key = "";
String time = "";
int timeset = 0;
bool endless = false;
const byte ROWS = 4;
const byte COLS = 4;
char hexaKeys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {5, 4, 3, 2}; //к каким выводам подключаем управление строками
byte colPins[COLS] = {A1, A2, A3, A4}; //к каким выводам подключаем управление столбцами
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
void lcdstart(){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Enter the number");
lcd.setCursor(0, 1);
lcd.print("of repetitions:");
}
void setup() {
lcd.begin(16, 2);
pinMode(RELAY_IN, OUTPUT);
pinMode(buttonPin, INPUT);
Serial.begin(9600);
lcdstart();
}
void loop() {
char customKey = customKeypad.getKey();
buttonState = digitalRead(buttonPin);
if (customKey){
if (customKey == '*'){
start = true;
lcd.clear();
lcd.print("Enter the delay:");
time += customKey;
timeset += time.toInt();
}
else if (customKey == '*' && start == true) {
customKey = "";
lcd.clear();
lcd.print("Repet. count:");
}
else if (customKey == 'A') {
lcd.clear();
lcd.print("You've started");
lcd.setCursor(0, 1);
lcd.print("the endless cycle");
delay(2000);
lcd.clear();
lcd.print("Repet. count:");
endless = true;
}
else if (customKey == '#'){
start = false;
digitalWrite(RELAY_IN, LOW);
key = "";
keynum = 0;
buttonCount = 0;
endless = false;
lcdstart();
}
else if (customKey == 'B' && customKey == 'C' && customKey == 'D'){
lcd.clear();
lcd.print ("Invalid number.");
delay(2000);
lcd.clear();
lcd.print("Press the '#'.");
}
else if (customKey != 'A', 'B', 'C', 'D'){
key += customKey;
keynum = key.toInt();
Serial.println(keynum);
Serial.println(key);
lcd.clear();
lcd.print("The number of");
lcd.setCursor(0, 1);
lcd.print("repetitions: " + key);
}
}
if (endless == true){
if (buttonState == HIGH){
digitalWrite(RELAY_IN, LOW);
delay(500);
buttonCount += 1;
lcd.setCursor(0, 1);
lcd.print(buttonCount);
}
else digitalWrite(RELAY_IN, HIGH);
}
if (buttonState == HIGH && start == true){
digitalWrite(RELAY_IN, LOW);
delay(500);
buttonCount += 1;
lcd.setCursor(0, 1);
lcd.print(buttonCount);
Serial.println(buttonCount);
}
else if (buttonCount >= keynum && start == true){
start = false;
lcd.clear();
lcd.print("The cycle is");
lcd.setCursor(0, 1);
lcd.print("completed");
delay(2000);
lcd.clear();
lcd.print("Press the '#'");
}
else if (start == true) {
digitalWrite(RELAY_IN, HIGH);
}
}