#include <Arduino.h>
#include <GyverSegment.h>
#include <EncButton.h>
#define CLK 2
#define DIO 3
#define LED 12
#define BUTTON 4
Disp1637Colon disp(DIO, CLK);
Button bt(BUTTON);
int8_t hour = 20, minute = 15, second, flag;
// эмуляция времени
unsigned long previousMillis = 0;
const unsigned long interval = 1000;
void time() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
second++;
}
if(second > 59) {
second = 0;
minute++;
if (minute > 59) {
minute = 0;
hour++;
if (hour > 23) hour = 0;
}
}
}
void setup() {
disp.clear();
disp.brightness(5);
pinMode(LED, OUTPUT);
}
void loop() {
bt.tick();
if (bt.holding()) set_time();
if (bt.click()) {
disp.setCursor(0);
disp.print("hold");
disp.update();
disp.delay(1000);
}
disp_show();
time();
}
void disp_show() {
disp.setCursor(0);
if (hour < 10) {
disp.print(0);
}
disp.print(hour);
disp.setCursor(2);
if (minute < 10) {
disp.print(0);
}
disp.print(minute);
disp.colon(true);
disp.update();
}
void set_time() {
flag = 0;
disp.setCursor(0);
disp.print("time");
disp.update();
disp.delay(1000);
while (true) {
bt.tick();
if (flag == 0) {
if (bt.click()) {
hour++;
if (hour > 23) hour = 0;
}
}
if (flag == 1) {
if (bt.click()) {
minute++;
if (minute > 59) minute = 0;
}
}
if (bt.holding()) {
flag++;
if (flag == 1) {
disp.setCursor(2);
disp.print("__");
}
disp.update();
disp.delay(1000);
if (flag == 2) {
second = 0;
disp.setCursor(0);
disp.print("set_");
disp.update();
disp.delay(1000);
break;
}
}
disp.setCursor(0);
if (hour < 10) {
disp.print(0);
}
disp.print(hour);
disp.setCursor(2);
if (minute < 10) {
disp.print(0);
}
disp.print(minute);
disp.colon(true);
disp.update();
}
}