int segmentPins[] = {2, 3, 4, 5, 6, 7, 8};
int commonCathodePin = 9;
int btn = 10;
int prev = 0;
int state = 0;
int digit [10] = {
B00111111, //0
B00000110, //1
B01011011, //2
B01001111, //3
B01100110, //4
B01101101, //5
B01111101, //6
B00000111, //7
B01111111, //8
B01101111 //9
};
void setup() {
Serial.begin(115200);
Serial.println("start");
pinMode(btn, INPUT_PULLUP);
for (int i = 0; i < 7; i++) {
pinMode(segmentPins[i], OUTPUT);
}
pinMode(commonCathodePin, OUTPUT);
for (int i = 0; i < 7; i++) {
digitalWrite(segmentPins[i], bitRead(digit[0], i));
}
delay(1000);
}
int lastButtonState = HIGH;
int i = 1;
void loop() {
int buttonState = digitalRead((btn));
if (buttonState != lastButtonState)
{
if (buttonState == LOW) {
state ++;
Serial.println(state);
}
}
lastButtonState = buttonState;
//Перше натискання - старт секундоміра
if (state == 1) {
if (millis() - prev >= 1000) {
if (i == 10)
{
i = 0;
}
prev = millis();
displayDigit(i);
i++;
}
}
//друге натискання - зупинка секундоміра
//обробника не потребує
//третє натискання - скидання секундоміра на 0
if (state == 3) {
i = 1;
state = 0;
displayDigit(0);
}
}
void displayDigit(int number) {
digitalWrite(commonCathodePin, LOW);
for (int i = 0; i <7; i++) {
digitalWrite(segmentPins[i], bitRead(digit[number], i));
}
digitalWrite(commonCathodePin, HIGH);
}