#include "SevSeg.h"
// настройки кнопок
const int BUTTON_S = A0;
int lastButtonS = LOW;
int curButtonS = LOW;
const int BUTTON_R = A1;
int lastButtonR = LOW;
int curButtonR = LOW;
// настройки индикатора
SevSeg sevseg;
unsigned long lastRenewTime = 0;
float deciSeconds = 0; //время, отображаемое на индикаторе
bool running = false;
bool buttonSisStart = true;
void setup() {
Serial.begin(9600);
// кнопки
pinMode(BUTTON_S, INPUT);
pinMode(BUTTON_R, INPUT);
digitalWrite(BUTTON_S, HIGH);
digitalWrite(BUTTON_R, HIGH);
// индикатор
byte numDigits = 4;
byte digitPins[] = {10, 11, 12, 13};
byte segmentPins[] = {2, 3, 4, 5, 6, 7, 8, 9};
bool resistorsOnSegments = false; // 'false' means resistors are on digit pins
byte hardwareConfig = COMMON_ANODE; // See README.md for options
bool updateWithDelays = false; // Default 'false' is Recommended
bool leadingZeros = false; // Use 'true' if you'd like to keep the leading zeros
bool disableDecPoint = false; // Use 'true' if your decimal point doesn't exist or isn't connected
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments,
updateWithDelays, leadingZeros, disableDecPoint);
sevseg.setBrightness(90);
}
void loop() {
// обработка нажатия кнопки Start/Stop
curButtonS = debounce(lastButtonS, BUTTON_S);
if (lastButtonS == HIGH && curButtonS == LOW) {
if (buttonSisStart) {
running = true;
buttonSisStart = false;
} else {
running = false;
buttonSisStart = true;
}
}
lastButtonS = curButtonS;
// обработка нажатия кнопки Reset
curButtonR = debounce(lastButtonR, BUTTON_R);
if (lastButtonR == HIGH && curButtonR == LOW) {
if (!running) {
deciSeconds = 0;
}
}
lastButtonR = curButtonR;
if (millis() - lastRenewTime >= 100) //прошло 100 мс
{
lastRenewTime = millis();
if (running) {
deciSeconds += 0.1; // 100 мс = 0,1 сек
}
if (deciSeconds >= 1000) // выход из диапазона
{
deciSeconds = 0;
}
sevseg.setNumber(deciSeconds, 100);
}
Serial.println(deciSeconds);
sevseg.refreshDisplay(); // Must run repeatedly
}
int debounce(int last, int button) {
int current = digitalRead(button);
if (last != current) {
delay(5);
current = digitalRead(button);
}
return current;
}