// Определение пинов для сегментов семисегментного дисплея
#define A 3
#define B 4
#define C 5
#define D 6
#define E 7
#define F 8
#define G 9
#define BUTTON 10 // Пин для кнопки
#define BUZZER 11 // Пин для зуммера
#define LED 11 // Пин для светодиода (тот же, что и для зуммера)
#define MAX_COUNT 3 // Максимальное значение счетчика
#define DEBOUNCE_DELAY 500 // Задержка для устранения дребезга контактов (в миллисекундах)
// Переменная для хранения текущего значения счетчика
byte count = 0;
// Установите в true для дисплея с общим анодом, в false для дисплея с общим катодом
const bool COMMON_ANODE = true;
// Массив для хранения состояний сегментов для цифр 0-3
// Каждая строка представляет одну цифру, каждый элемент - состояние сегмента (1 - включен, 0 - выключен)
const byte digits[4][7] = {
{1,1,1,1,1,1,0}, // 0
{0,1,1,0,0,0,0}, // 1
{1,1,0,1,1,0,1}, // 2
{1,1,1,1,0,0,1} // 3
};
void setup() {
// Настройка пинов сегментов на выход
pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT);
pinMode(E, OUTPUT);
pinMode(F, OUTPUT);
pinMode(G, OUTPUT);
// Настройка пина кнопки на вход
pinMode(BUTTON, INPUT);
// Настройка пинов для зуммера и светодиода
pinMode(BUZZER, OUTPUT);
pinMode(LED, OUTPUT);
}
// Функция для отображения заданной цифры на семисегментном дисплее
void displayDigit(byte digit) {
for (int i = 0; i < 7; i++) {
int state = digits[digit][i];
if (COMMON_ANODE) {
state = !state; // Инвертируем состояние для общего анода
}
digitalWrite(A + i, state);
}
}
void loop() {
// Отображение текущего значения счетчика
displayDigit(count);
// Проверка нажатия кнопки
if (digitalRead(BUTTON) == HIGH) {
delay(DEBOUNCE_DELAY); // Задержка для устранения дребезга контактов
// Увеличение счетчика
count++;
// Если счетчик достиг максимального значения, сбрасываем его и активируем сигнал
if (count > MAX_COUNT) {
count = 0;
// Активация зуммера и светодиода при сбросе на 0
tone(BUZZER, 1000, 1000); // Звуковой сигнал на 1 секунду
digitalWrite(LED, HIGH);
delay(1000);
digitalWrite(LED, LOW);
noTone(BUZZER);
}
}
}