Сборка надежного таймера обратного отсчета на Arduino с 7-сегментным дисплеем SparkFun
Компоненты и материалы
- Макетная плата (Breadboard) — 1 шт.
- Провода-перемычки (Jumper wires) — 1 набор
- Последовательный 7-сегментный дисплей SparkFun (красный) — 1 шт. (без разъемной платы)
- Кабель USB-A — Mini-USB — 1 шт.
- Arduino Mega 2560 — 1 шт. (подойдет любая другая плата Arduino)
Программное обеспечение
- Arduino IDE
Описание проекта
Этот проект был создан из-за отсутствия под рукой таймера. Использование крайне простое: загрузите код в Arduino (подойдет любая плата), и обратный отсчет запустится автоматически.
Для изменения общего времени отсчета измените значение переменной n в коде. Важно: 1000 = 1 секунда. Таким образом, 60000 = 60 секунд. Формула: SEК × 1000 даст нужное число для замены 60000. При нажатии кнопки Reset счетчик автоматически перезапускается.
long n = 60000; // начальное время — МОЖНО ИЗМЕНИТЬ НА ЛЮБОЕ ЖЕЛАЕМОЕ
Код
Код управляет 4-разрядным 7-сегментным дисплеем без использования специализированных библиотек, реализуя мультиплексировку вручную.
// Распиновка 7-сегментного дисплея -> Arduino
// pin 11 - A = 12
// pin 7 - B = 10
// pin 4 - C = 8
// pin 2 - D = 7
// pin 1 - E = 6
// pin 10 - F = 11
// pin 5 - G = 9
// pin 3 - Decimal point
const int a = 12, b = 10, c = 8, d = 7, e = 6, f = 11, g = 9;
int p = 0; // decimal point pin
int startStopReset = 13; // кнопка сброса
const int d1 = 1, d2 = 2, d3 = 3, d4 = 4; // управляющие пины разрядов
long n = 60000; // начальное время (мс)
int x = 100;
int del = 55; // задержка мультиплексировки (мкс)
void setup() {
pinMode(d1, OUTPUT); pinMode(d2, OUTPUT); pinMode(d3, OUTPUT); pinMode(d4, OUTPUT);
pinMode(a, OUTPUT); pinMode(b, OUTPUT); pinMode(c, OUTPUT); pinMode(d, OUTPUT);
pinMode(e, OUTPUT); pinMode(f, OUTPUT); pinMode(g, OUTPUT); pinMode(p, OUTPUT);
pinMode(startStopReset, INPUT_PULLUP); // используем встроенный подтягивающий резистор
}
void loop() {
digitalWrite(p, HIGH);
clearLEDs();
pickDigit(1); pickNumber((n/x/1000)%10); delayMicroseconds(del);
clearLEDs();
pickDigit(2); pickNumber((n/x/100)%10); delayMicroseconds(del);
clearLEDs();
pickDigit(3); dispDec(3); pickNumber((n/x/10)%10); delayMicroseconds(del);
clearLEDs();
pickDigit(4); pickNumber(n/x%10); delayMicroseconds(del);
n--; // для секундомера используйте n++
if (digitalRead(startStopReset) == LOW) { // нажатие кнопки сброса
n = 60000; // восстановить исходное время (ИЗМЕНИТЕ НА СВОЁ ЗНАЧЕНИЕ)
}
}
// Активация нужного разряда (общий анод -> LOW включает)
void pickDigit(int x) {
digitalWrite(d1, HIGH); digitalWrite(d2, HIGH); digitalWrite(d3, HIGH); digitalWrite(d4, HIGH);
switch(x) {
case 1: digitalWrite(d1, LOW); break;
case 2: digitalWrite(d2, LOW); break;
case 3: digitalWrite(d3, LOW); digitalWrite(p, HIGH); break; // точка на 3-м разряде
default: digitalWrite(d4, LOW); break;
}
}
// Отображение цифры на активном разряде
void pickNumber(int x) {
switch(x) {
default: zero(); break;
case 1: one(); break; case 2: two(); break; case 3: three(); break;
case 4: four(); break; case 5: five(); break; case 6: six(); break;
case 7: seven(); break; case 8: eight(); break; case 9: nine(); break;
}
}
void dispDec(int x) { digitalWrite(p, LOW); } // включить точку
void clearLEDs() {
digitalWrite(a, LOW); digitalWrite(b, LOW); digitalWrite(c, LOW); digitalWrite(d, LOW);
digitalWrite(e, LOW); digitalWrite(f, LOW); digitalWrite(g, LOW); digitalWrite(p, LOW);
}
// Функции для каждой цифры (сегменты a-g)
void zero() { digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, HIGH); digitalWrite(f, HIGH); digitalWrite(g, LOW); }
void one() { digitalWrite(a, LOW); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, LOW); digitalWrite(e, LOW); digitalWrite(f, LOW); digitalWrite(g, LOW); }
void two() { digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, LOW); digitalWrite(d, HIGH); digitalWrite(e, HIGH); digitalWrite(f, LOW); digitalWrite(g, HIGH); }
void three(){ digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, LOW); digitalWrite(f, LOW); digitalWrite(g, HIGH); }
void four() { digitalWrite(a, LOW); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, LOW); digitalWrite(e, LOW); digitalWrite(f, HIGH); digitalWrite(g, HIGH); }
void five() { digitalWrite(a, HIGH); digitalWrite(b, LOW); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, LOW); digitalWrite(f, HIGH); digitalWrite(g, HIGH); }
void six() { digitalWrite(a, HIGH); digitalWrite(b, LOW); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, HIGH); digitalWrite(f, HIGH); digitalWrite(g, HIGH); }
void seven(){ digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, LOW); digitalWrite(e, LOW); digitalWrite(f, LOW); digitalWrite(g, LOW); }
void eight(){ digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, HIGH); digitalWrite(f, HIGH); digitalWrite(g, HIGH); }
void nine() { digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, LOW); digitalWrite(f, HIGH); digitalWrite(g, HIGH); }
Схема подключения
Используйте приведенную схему для подключения 4-разрядного дисплея к Arduino.

Производственный процесс
- Создание потрясающей системы Ambilight для монитора на Arduino
- Создание классической игры Pong на Arduino UNO с OLED-дисплеем: пошаговый урок
- Детектор аудиочастот на Arduino: измеряем пик громкости с высокочувствительным модулем
- Собираем свой Tamagotchi на Arduino: цифровой питомец своими руками
- Умный беспроводной выключатель света: Arduino-контроллер для удаленного управления
- Крестики-нолики на Arduino с матрицей MAX7219 и картонным корпусом
- Умный водяной пистолет с датчиком движения на Arduino Nano
- Arduino-таймер для мытья рук: простое DIY-устройство для борьбы с COVID‑19
- Arduino Sunflower: электронный подсолнух, следящий за солнцем
- Самодельный RC Porsche на Arduino: Пошаговое руководство