#include <Keypad.h>
#define SEG_A A2
#define SEG_B A3
#define SEG_C 3
#define SEG_D 4
#define SEG_E 5
#define SEG_F A1
#define SEG_G A0
#define SEG_DP 2
const byte COLS = 4;
const byte ROWS = 4;
char keypadKeys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte colPins[COLS] = {9, 8, 7, 6};
byte rowPins[ROWS] = {13, 12, 11, 10};
Keypad customKeypad = Keypad(makeKeymap(keypadKeys), rowPins, colPins, ROWS, COLS);
int soundPin = A4;
int currentState = 0;
int firstInput = -1, secondInput = -1;
int timerValue = -1;
unsigned long lastTick = 0;
void setup() {
Serial.begin(9600);
pinMode(SEG_A, OUTPUT);
pinMode(SEG_B, OUTPUT);
pinMode(SEG_C, OUTPUT);
pinMode(SEG_D, OUTPUT);
pinMode(SEG_E, OUTPUT);
pinMode(SEG_F, OUTPUT);
pinMode(SEG_G, OUTPUT);
pinMode(SEG_DP, OUTPUT);
pinMode(soundPin, OUTPUT);
showDigit(0);
Serial.println("Введите два числа и нажмите 'A'");
}
void showDigit(int digit) {
switch (digit) {
case 0: displayZero(); break;
case 1: displayOne(); break;
case 2: displayTwo(); break;
case 3: displayThree(); break;
case 4: displayFour(); break;
case 5: displayFive(); break;
case 6: displaySix(); break;
case 7: displaySeven(); break;
case 8: displayEight(); break;
case 9: displayNine(); break;
}
}
void displayZero() {
digitalWrite(SEG_A, LOW);
digitalWrite(SEG_B, LOW);
digitalWrite(SEG_C, LOW);
digitalWrite(SEG_D, LOW);
digitalWrite(SEG_E, LOW);
digitalWrite(SEG_F, LOW);
digitalWrite(SEG_G, HIGH);
digitalWrite(SEG_DP, HIGH);
}
void displayOne() {
digitalWrite(SEG_A, HIGH);
digitalWrite(SEG_B, LOW);
digitalWrite(SEG_C, LOW);
digitalWrite(SEG_D, HIGH);
digitalWrite(SEG_E, HIGH);
digitalWrite(SEG_F, HIGH);
digitalWrite(SEG_G, HIGH);
digitalWrite(SEG_DP, HIGH);
}
void displayTwo() {
digitalWrite(SEG_A, LOW);
digitalWrite(SEG_B, LOW);
digitalWrite(SEG_C, HIGH);
digitalWrite(SEG_D, LOW);
digitalWrite(SEG_E, LOW);
digitalWrite(SEG_F, HIGH);
digitalWrite(SEG_G, LOW);
digitalWrite(SEG_DP, HIGH);
}
void displayThree() {
digitalWrite(SEG_A, LOW);
digitalWrite(SEG_B, LOW);
digitalWrite(SEG_C, LOW);
digitalWrite(SEG_D, LOW);
digitalWrite(SEG_E, HIGH);
digitalWrite(SEG_F, HIGH);
digitalWrite(SEG_G, LOW);
digitalWrite(SEG_DP, HIGH);
}
void displayFour() {
digitalWrite(SEG_A, HIGH);
digitalWrite(SEG_B, LOW);
digitalWrite(SEG_C, LOW);
digitalWrite(SEG_D, HIGH);
digitalWrite(SEG_E, HIGH);
digitalWrite(SEG_F, LOW);
digitalWrite(SEG_G, LOW);
digitalWrite(SEG_DP, HIGH);
}
void displayFive() {
digitalWrite(SEG_A, LOW);
digitalWrite(SEG_B, HIGH);
digitalWrite(SEG_C, LOW);
digitalWrite(SEG_D, LOW);
digitalWrite(SEG_E, HIGH);
digitalWrite(SEG_F, LOW);
digitalWrite(SEG_G, LOW);
digitalWrite(SEG_DP, HIGH);
}
void displaySix() {
digitalWrite(SEG_A, LOW);
digitalWrite(SEG_B, HIGH);
digitalWrite(SEG_C, LOW);
digitalWrite(SEG_D, LOW);
digitalWrite(SEG_E, LOW);
digitalWrite(SEG_F, LOW);
digitalWrite(SEG_G, LOW);
digitalWrite(SEG_DP, HIGH);
}
void displaySeven() {
digitalWrite(SEG_A, LOW);
digitalWrite(SEG_B, LOW);
digitalWrite(SEG_C, LOW);
digitalWrite(SEG_D, HIGH);
digitalWrite(SEG_E, HIGH);
digitalWrite(SEG_F, HIGH);
digitalWrite(SEG_G, HIGH);
digitalWrite(SEG_DP, HIGH);
}
void displayEight() {
digitalWrite(SEG_A, LOW);
digitalWrite(SEG_B, LOW);
digitalWrite(SEG_C, LOW);
digitalWrite(SEG_D, LOW);
digitalWrite(SEG_E, LOW);
digitalWrite(SEG_F, LOW);
digitalWrite(SEG_G, LOW);
digitalWrite(SEG_DP, LOW);
}
void displayNine() {
digitalWrite(SEG_A, LOW);
digitalWrite(SEG_B, LOW);
digitalWrite(SEG_C, LOW);
digitalWrite(SEG_D, LOW);
digitalWrite(SEG_E, HIGH);
digitalWrite(SEG_F, LOW);
digitalWrite(SEG_G, LOW);
digitalWrite(SEG_DP, HIGH);
}
void loop() {
char keyPressed = customKeypad.getKey();
if (currentState < 2 && keyPressed >= '0' && keyPressed <= '9') {
int number = keyPressed - '0';
if (currentState == 0) {
firstInput = number;
showDigit(firstInput);
currentState = 1;
} else if (currentState == 1) {
secondInput = number;
showDigit(secondInput);
Serial.print("Введено: ");
Serial.print(firstInput);
Serial.println(secondInput);
}
}
if (keyPressed == 'A' && currentState == 1 && firstInput >= 0 && secondInput >= 0) {
timerValue = firstInput * 10 + secondInput;
lastTick = millis();
currentState = 2;
Serial.print("Таймер запущен: ");
Serial.println(timerValue);
}
if (currentState == 2 && timerValue >= 0) {
if (millis() - lastTick >= 1000) {
lastTick = millis();
if (timerValue == 0) {
tone(soundPin, 1000, 1000);
Serial.println("Время истекло!");
currentState = 0;
firstInput = secondInput = -1;
showDigit(0);
return;
}
timerValue--;
Serial.println(timerValue);
showDigit(timerValue % 10);
delay(500);
}
}
if (keyPressed == '#') {
currentState = 0;
firstInput = secondInput = -1;
timerValue = -1;
showDigit(0);
Serial.println("Сброс");
}
}