#include <TimeLib.h>
#include <GTimer.h>
#include <DS1307RTC.h>
#include <Wire.h>
#define BTN_PIN1 0 //порт кнопка 1 перебора цифр
#define BTN_PIN2 1 //порт кнопка 2 сохранение цифры
#define BTN_PIN3 2 //порт кнопка 3 задание режима
#define ZUM_DIO 3 //порт зуммера
#define LATCH_DIO 4 // линия синхронизации данных, защелка (LCHCLK)
#define CLK_DIO 7 // линия тактирования (SFTCLK)
#define DATA_DIO 8 // линия передачи данных (SDI)
// коды цифр от 0 до 9
const byte seg_digits[] = { 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0X80, 0X90 };
// коды разрядов
const byte seg_num[] = { 0xF1, 0xF2, 0xF4, 0xF8 };
//кнопки
uint8_t k1 = 1; // перебор цифр
uint8_t k2 = 1; //ввод
uint8_t k3 = 1; // смена данных выводить
//uint8_t a;
uint8_t a1; // сколько
uint8_t a2; // через сколько
uint8_t a3; // во сколько
uint8_t b1 = 0; // сколько
uint8_t b2 = 0; // через сколько
uint8_t b3 = 0; // во сколько
//uint8_t s=0;
static uint32_t z = millis();
void setup() {
digitalWrite(ZUM_DIO, 1);
Serial.begin(115200);
//настройка выводов кнопок
pinMode(BTN_PIN1, INPUT_PULLUP);
pinMode(BTN_PIN2, INPUT_PULLUP);
pinMode(BTN_PIN3, INPUT_PULLUP);
// настройка контактов индикатора
pinMode(LATCH_DIO, OUTPUT);
pinMode(CLK_DIO, OUTPUT);
pinMode(DATA_DIO, OUTPUT);
pinMode(ZUM_DIO, OUTPUT);
}
// вывод цифры в заданный разряд
void writeNumber(uint8_t a1, uint8_t a2, uint8_t a3) {
digitalWrite(LATCH_DIO, LOW);
shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, seg_digits[a1]);
shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, seg_num[0]);
digitalWrite(LATCH_DIO, HIGH);
digitalWrite(LATCH_DIO, LOW);
shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, seg_digits[a2]);
shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, seg_num[1]);
digitalWrite(LATCH_DIO, HIGH);
digitalWrite(LATCH_DIO, LOW);
shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, seg_digits[a3 / 10]);
shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, seg_num[2]);
digitalWrite(LATCH_DIO, HIGH);
digitalWrite(LATCH_DIO, LOW);
shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, seg_digits[a3 - ((a3 / 10) * 10)]);
shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, seg_num[3]);
digitalWrite(LATCH_DIO, HIGH);
}
void set_poliv(uint8_t b1, uint8_t b2, uint8_t b3)
//if (s<2)
{
//первый сегмент
while (k2 == 1) {
writeNumber(b1, b2, b3); //вывод цифры на индикатор
if (millis() - z >= 500) {
z = millis();
k1 = digitalRead(BTN_PIN1);
if (b1 <= 4) {
if (k1 == 0) b1++;
} else {
(b1 = 0);
}
}
k2 = digitalRead(BTN_PIN2); //чтение кнопки 2 ВВОД
Serial.println(b1);
}
Serial.println(b1);
//s++;
digitalWrite(ZUM_DIO, 0); //звуковой сигнал
delay(100);
digitalWrite(ZUM_DIO, 1);
delay(300);
//второй сегмент
k2 = 1;
while (k2 == 1) {
writeNumber(b1, b2, b3); //вывод цыфры на индикатор
if (millis() - z >= 500) {
z = millis();
k1 = digitalRead(BTN_PIN1);
if (b2 <= 4) {
if (k1 == 0) b2++;
} else {
(b2 = 0);
}
}
k2 = digitalRead(BTN_PIN2); //чтение кнопки 2 ВВОД
Serial.println(b2);
}
digitalWrite(ZUM_DIO, 0);
delay(100);
digitalWrite(ZUM_DIO, 1);
delay(300);
//третий сегмент
k2 = 1;
while (k2 == 1) {
writeNumber(b1, b2, b3); //вывод цыфры на индикатор
if (millis() - z >= 500) {
z = millis();
k1 = digitalRead(BTN_PIN1);
if (b3 <= 22) {
if (k1 == 0) b3++;
} else {
(b3 = 0);
}
}
k2 = digitalRead(BTN_PIN2); //чтение кнопки 2 ВВОД
Serial.println(b3);
}
// s++;
digitalWrite(ZUM_DIO, 0);
delay(100);
digitalWrite(ZUM_DIO, 1);
delay(300);
//}
}
void loop() {
Serial.println("начало");
set_poliv(b1, b2, b3);
k2 = 0;
a1 = b1;
a2 = b2;
a3 = b3;
writeNumber(a1, a2, a3);
setSyncProvider(RTC.get);
//Serial.println (hour());
delay(5000);
}