#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_LEDBackpack.h>
#include <Adafruit_HT16K33.h>
#include <Bounce2.h>
// Пины для кнопки и светодиода
const byte BUTTON_PIN = 2;
const byte LED_PIN = 4;
const byte BUZZER_PIN = 3;
// Адрес семисегментного индикатора
const uint8_t SEVEN_SEGMENT_ADDRESS = 0x70;
// Объекты для семисегментного индикатора и кнопки
Adafruit_7segment sevenSegment(SEVEN_SEGMENT_ADDRESS);
Bounce debouncer = Bounce();
// Переменные для хранения времени
unsigned long startTime = 0;
unsigned long timerDuration = 0;
// Флаги для управления таймером
bool timerRunning = false;
bool timerFinished = false;
void setup() {
// Инициализация семисегментного индикатора
Wire.begin();
sevenSegment.begin();
sevenSegment.clear();
sevenSegment.writeDisplay();
sevenSegment.setBrightness(15); // Яркость индикатора
// Инициализация кнопки
pinMode(BUTTON_PIN, INPUT_PULLUP);
debouncer.attach(BUTTON_PIN);
debouncer.interval(5); // Интервал дебаунса
// Инициализация светодиода и пьезоэлемента
pinMode(LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
}
void loop() {
// Обновляем состояние кнопки
debouncer.update();
// Обработчик кнопки
if (debouncer.fell()) {
if (timerRunning == false) {
// Запуск таймера
timerRunning = true;
startTime = millis();
timerDuration = 30000; // Таймер на 30 секунд (пример)
} else {
// Остановка таймера
timerRunning = false;
timerFinished = false;
digitalWrite(LED_PIN, LOW);
noTone(BUZZER_PIN);
}
}
// Отображаем оставшееся время
if (timerRunning) {
unsigned long elapsedTime = millis() - startTime;
unsigned long remainingTime = timerDuration - elapsedTime;
if (remainingTime <= 0) {
// Завершение таймера
timerRunning = false;
timerFinished = true;
sevenSegment.print(0000);
sevenSegment.writeDisplay();
digitalWrite(LED_PIN, HIGH);
tone(BUZZER_PIN, 1000, 2000); // Звук на 2 секунды
} else {
sevenSegment.print(remainingTime / 1000); // Показываем секунды
sevenSegment.writeDisplay();
}
}
// Ожидание завершения таймера
if (timerFinished) {
delay(2000); // Ждем 2 секунды перед сбросом
timerFinished = false;
digitalWrite(LED_PIN, LOW);
}
}