Да я знаю что можно было сделать компактнее
#include <GyverTM1637.h>
#include <GyverButton.h>
#define CLK A1
#define DIO A2
GyverTM1637 disp(CLK, DIO);
byte sec = 50;
byte mins = 58;
byte hours = 23;
byte day = 29;
byte month = 12;
byte alarm_min;
byte alarm_hour = 8;
#define buzer 9
#define mode 0
GButton butt1(3, LOW_PULL, NORM_OPEN);
GButton butt2(3, LOW_PULL, NORM_OPEN);
GButton butt3(3, LOW_PULL, NORM_OPEN);
GButton butt4(3, LOW_PULL, NORM_OPEN);
unsigned long timer;
unsigned long halfsec;
boolean baner_flag = 0;
byte day_flag = 0;
boolean set_flag;
boolean dots;
byte TIME[4];
byte DATE[4];
byte ALARM[4];
void setup() {
pinMode(A4, INPUT);
pinMode(A3, OUTPUT);
pinMode(A5, OUTPUT);
pinMode(buzer, OUTPUT);
digitalWrite(A3, false);
digitalWrite(A5, true);
digitalWrite(buzer, false);
butt1.setDebounce(150);
butt1.setTimeout(4000);
butt2.setDebounce(150);
butt2.setTimeout(4000);
butt3.setDebounce(150);
butt4.setDebounce(150);
Serial.begin(9600);
}
void scrollClock(){
disp.displayClockScroll(hours, mins, 70);
}
void loop() {
int analog = analogRead(7);
butt1.tick(analog < 925 && analog > 860);
butt2.tick(analog < 1015 && analog > 970);
butt3.tick(analog < 540 && analog > 370);
butt4.tick(analog < 750 && analog > 680);
Serial.println(day_flag);
//--------------------------------------------------------------------------------------------------------------------------
if(baner_flag == 0){
byte welcome_baner[] = {_H, _E, _L, _L, _O, _empty, _empty, _empty, _empty, _L, _O, _A, _d, _1, _N, _G, 0x40, 0x40, 0x40,
0x0c, 0x42, 0x03, 0x44, 0x0c, 0x42, 0x03, 0x44, 0x0c, 0x42, 0x03, 0x44, 0x08, 0x08, 0x08};
disp.runningString(welcome_baner, sizeof(welcome_baner), 250);
}
baner_flag = 1;
//--------------------------------------------------------------------------------------------------------------------------
int val = analogRead(4);
val = map(val, 0, 1023, 0, 7);
val = constrain(val, 0, 7);
disp.brightness(val);
//--------------------------------------------------------------------------------------------------------------------------
// ОБОЗНАЧЕНИЕ ВРЕМЕНИ
//--------------------------------------------------------------------------------------------------------------------------
if(millis() - timer > 1000){
sec++;
timer = millis();
}
if(sec == 60){
mins++;
sec = 0;
}
if(mins == 60){
hours++;
mins = 0;
}
if(mins == 255){
mins = 59;
}
if(hours == 24){
day++;
hours = 0;
}
if(hours == 255){
hours = 23;
}
if(month == 13){
month = 1;
}
if(month == 0){
month = 12;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if(day == 32 && month == 1){
month++;
day = 1;
}
if(day == 32 && month == 3) {
day = 1;
month++;
}
if(day == 32 && month == 5) {
day = 1;
month++;
}
if(day == 32 && month == 7) {
day = 1;
month++;
}
if(day == 32 && month == 8) {
day = 1;
month++;
}
if(day == 32 && month == 10) {
day = 1;
month++;
}
if(day == 32 && month == 12) {
day = 1;
month = 1;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if(day == 31 && month == 4){
month++;
day = 1;
}
if(day == 31 && month == 6){
month++;
day = 1;
}
if(day == 31 && month == 9){
month++;
day = 1;
}
if(day == 31 && month == 11){
month++;
day = 1;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if(day == 29 && month == 2){
month++;
day = 1;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if(alarm_min == 60){
alarm_min = 0;
}
if(alarm_min == 255){
alarm_min = 59;
}
if(alarm_hour == 24){
alarm_hour = 0;
}
if(alarm_hour == 255){
alarm_hour = 23;
}
if(day == 0 && month == 1){
day = 31;
}
if(day == 0 && month == 3){
day = 31;
}
if(day == 0 && month == 5){
day = 31;
}
if(day == 0 && month == 7){
day = 31;
}
if(day == 0 && month == 8){
day = 31;
}
if(day == 0 && month == 10){
day = 31;
}
if(day == 0 && month == 12){
day = 31;
}
if(day == 32 && month == 1){
day = 1;
}
if(day == 32 && month == 3){
day = 1;
}
if(day == 32 && month == 5){
day = 1;
}
if(day == 32 && month == 7){
day = 1;
}
if(day == 32 && month == 8){
day = 1;
}
if(day == 32 && month == 10){
day = 1;
}
if(day == 32 && month == 12){
day = 1;
}
if(day == 0 && month == 4){
day = 30;
}
if(day == 0 && month == 6){
day = 30;
}
if(day == 0 && month == 9){
day = 30;
}
if(day == 0 && month == 11){
day = 30;
}
if(day == 31 && month == 4){
day = 1;
}
if(day == 31 && month == 6){
day = 1;
}
if(day == 31 && month == 9){
day = 1;
}
if(day == 31 && month == 11){
day = 1;
}
//------------------------------------------------------------------------------------------
// УСЛОВИЯ ПРОСМОТРА
//------------------------------------------------------------------------------------------
if(butt1.isPress() && day_flag == 0){
day_flag = 1;
}
if(butt1.isPress() && day_flag == 1){
day_flag = 2;
}
if(butt1.isPress() && day_flag == 2){
day_flag = 0;
}
if(butt1.isHolded() && day_flag >= 0 && day_flag <= 2){
day_flag = 3;
}
if(butt1.isPress() && day_flag == 3){
day_flag = 4;
}
if(butt1.isPress() && day_flag == 4){
day_flag = 5;
}
if(butt1.isPress() && day_flag == 5){
day_flag = 3;
}
if(butt1.isHolded () && day_flag >=3){
day_flag = 0;
}
//-------------------------------------------------------------------------------------------
// ПЕРЕКЛЮЧЕНИЕ НАСТРОЯК
//-------------------------------------------------------------------------------------------
if(day_flag >= 3 && butt2.isPress() && set_flag == 0){
set_flag = 1;
disp.point(1);
}
if(day_flag >= 3 && butt2.isPress() && set_flag == 1){
set_flag = 0;
disp.point(0);
}
//------------------------------------------------------------------------------------------
// ПРОСМОТР РЕЖИМОВ
//------------------------------------------------------------------------------------------
if(day_flag == 0 && mode == 0){
TIME[0] = hours / 10;
TIME[1] = hours % 10;
TIME[2] = mins / 10;
TIME[3] = mins % 10;
disp.display(TIME);
if(millis() - halfsec > 500){
dots = !dots;
halfsec = millis();
}
disp.point(dots);
}
else if(day_flag == 0 && mode == 1){
scrollClock();
if (millis() - halfsec > 500) { // если прошло полсекунды
halfsec = millis(); // сбросить таймер
dots = !dots; // переключить точки
if (dots) disp.point(0); // выключить точки
else disp.point(1);
}
}
}