#define button 0
#define buzzer A0
// segments
#define a 6
#define b 7
#define c 8
#define d 9
#define e 10
#define f 12
#define g 11
#define p 13
// digits
#define d4 5
#define d3 4
#define d2 3
#define d1 2
unsigned long lastTimeUpdate = 0;
unsigned long lastDisplayRefresh = 0;
bool buttonWasPressed = false;
bool showVariant = true; // режим: true - варіант 19, false - секундомір
int variantNumber = 19;
int totalSeconds = 0;
int displayDigits[4] = {0,0,0,0};
int currentDisplayDigit = 1;
void setup() {
pinMode(button, INPUT_PULLUP);
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);
clearAllSegments();
turnOffAllDigits();
lastTimeUpdate = millis();
}
void loop() {
handleButton();
runStopwatch(); // Пункт 2 завдання
updateDisplay(showVariant ? variantNumber : totalSeconds); // Пункт 1 завдання
refreshDisplay();
}
// 3. Реалізація перемикання режимів
void handleButton(){
bool pressed = (digitalRead(button) == LOW);
if(pressed && !buttonWasPressed){
buttonWasPressed = true;
showVariant = !showVariant;
tone(buzzer, 1000, 80);
}
if(!pressed && buttonWasPressed){
buttonWasPressed = false;
}
}
// 2. Функція секундоміра
void runStopwatch(){
unsigned long currentMillis = millis();
while(currentMillis - lastTimeUpdate >= 1000){
lastTimeUpdate += 1000;
totalSeconds++;
if(totalSeconds > 9999) totalSeconds = 0;
}
}
// 1. Універсальна функція відображення будь-якого числа
void updateDisplay(int number){
if(number > 9999) number = 9999;
displayDigits[0] = number / 1000;
displayDigits[1] = (number / 100) % 10;
displayDigits[2] = (number / 10) % 10;
displayDigits[3] = number % 10;
}
void refreshDisplay(){
if(millis() - lastDisplayRefresh < 2) return;
lastDisplayRefresh = millis();
turnOffAllDigits();
clearAllSegments();
displayNumberOnDigit(displayDigits[currentDisplayDigit-1], currentDisplayDigit);
currentDisplayDigit++;
if(currentDisplayDigit > 4) currentDisplayDigit = 1;
}
void displayNumberOnDigit(int number, int digit){
pickDigit(digit);
pickNumber(number);
}
void turnOffAllDigits(){
digitalWrite(d1, HIGH); digitalWrite(d2, HIGH);
digitalWrite(d3, HIGH); digitalWrite(d4, HIGH);
}
void pickDigit(int x){
switch(x){
case 1: digitalWrite(d1, LOW); break;
case 2: digitalWrite(d2, LOW); break;
case 3: digitalWrite(d3, LOW); break;
case 4: digitalWrite(d4, LOW); break;
}
}
void pickNumber(int x){
clearAllSegments();
switch(x){
case 0: 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 clearAllSegments(){
digitalWrite(a, LOW); digitalWrite(b, LOW); digitalWrite(c, LOW);
digitalWrite(d, LOW); digitalWrite(e, LOW); digitalWrite(f, LOW);
digitalWrite(g, LOW); digitalWrite(p, LOW);
}
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,LOW); digitalWrite(e,LOW); digitalWrite(f,HIGH); digitalWrite(g,HIGH); }