#define dsPin 2
#define shcpPin 3
#define stcpPin 4
#define turbinaPin 5
const byte numsBIN[10] = {
0b00000011, // 0
0b10011111, // 1
0b00100101, // 2
0b00001101, // 3
0b10011001, // 4
0b01001001, // 5
0b01000001, // 6
0b00011111, // 7
0b00000001, // 8
0b00001001 // 9
};
const int timer = 1000; // таймер для счёта секунд
uint64_t count; // счётчик миллисекунд
const byte timerMinute = 15; // промежуток срабытывания турбин в минутах
int8_t s = 5; // счётчик секунд
int8_t minute = 0; // счётчик минут
byte unitS; // единицы секунд
byte tenS; // десятки секунд
byte unitMinute; // единицы секунд
byte tenMinute; // десятки секунд
const int timeWork = 5000; // время работы турбины
void setup() {
Serial.begin(9600);
pinMode(dsPin, OUTPUT);
pinMode(shcpPin, OUTPUT);
pinMode(stcpPin, OUTPUT);
}
void loop() {
if(millis() - count > timer) {
count = millis();
s--;
if(s < 0) {
s = 59;
minute--;
}
}
unitS = s % 10;
tenS = s / 10;
unitMinute = minute % 10;
tenMinute = minute / 10;
digitalWrite(stcpPin, HIGH);
shiftOut(dsPin, shcpPin, LSBFIRST, numsBIN[unitS]);
shiftOut(dsPin, shcpPin, LSBFIRST, numsBIN[tenS]);
shiftOut(dsPin, shcpPin, LSBFIRST, numsBIN[unitMinute]);
shiftOut(dsPin, shcpPin, LSBFIRST, numsBIN[tenMinute]);
digitalWrite(stcpPin, LOW);
if(minute <= 0 && s <= 0) {
digitalWrite(stcpPin, HIGH);
shiftOut(dsPin, shcpPin, LSBFIRST, numsBIN[unitS]);
digitalWrite(stcpPin, LOW);
minute = timerMinute;
s = 0;
digitalWrite(turbinaPin, HIGH);
delay(timeWork);
digitalWrite(turbinaPin, LOW);
count = millis();
}
}