#include <fDigitsSegtPin.h> // Подключаем библиотеку fDigitsSegtPin
// Инициализируем объект-4-х разрядный индикатор, передаём использованные
// для подключения контакты на: (E, D, H, C, G, 4, B, 3, 2, F, A, 1)
fDigitsSegtPin Display(6, 5, 9, 4, 8, 13, 3, 12, 11, 7, 2, 10);
const int buttonStart = A0; //кнопка Start/Stop подключена к контакту A0
int lastButtonStart = LOW; //предыдущее состояние кнопки
int curButtonStart = LOW; //Текущее состояние кнопки
const int buttonReset = A1; //кнопка "Сброс секундомера" подключена к контакту A1
int lastButtonReset = LOW; //предыдущее состояние кнопки
int curButtonReset = LOW; //Текущее состояние кнопки
int debounceStartButton (int last)
{
int current = digitalRead(buttonStart);
if(last != current) //если состояние изменилось
{
delay(5);
current = digitalRead(buttonStart);
}
return current;
}
int debounceResetButton (int last)
{
int current = digitalRead(buttonReset);
if(last != current) //если состояние изменилось
{
delay(5);
current = digitalRead(buttonReset);
}
return current;
}
// Объявление переменных для секундомера
long previousTime = 0;
long currentTime = 0;
long elapsedTime = 0;
bool timerRunning = false;
void setup()
{
Display.begin();
pinMode(buttonStart, INPUT);
digitalWrite(buttonStart, HIGH);
pinMode(buttonReset, INPUT);
digitalWrite(buttonReset, HIGH);
}
void loop()
{
curButtonStart = debounceStartButton (lastButtonStart);
if(lastButtonStart == HIGH && curButtonStart == LOW) //условие нажатия
{
timerRunning = !timerRunning;
if (timerRunning)
{
previousTime = millis();
}
}
lastButtonStart = curButtonStart;
curButtonReset = debounceResetButton (lastButtonReset);
if(lastButtonReset == HIGH && curButtonReset == LOW) //условие нажатия
{
if(timerRunning == false) {
elapsedTime = 0;
}
}
lastButtonReset = curButtonReset;
// Обновление секундомера
if (timerRunning)
{
currentTime = millis();
elapsedTime += currentTime - previousTime;
previousTime = currentTime;
}
Display.print(elapsedTime / 1000);
}