101

Re: Часы+будильник на П543 (ИЛЦ5-4/7М)

Проверил. в принципе также. Да. накал от постоянки. Буду делать переменное.

102

Re: Часы+будильник на П543 (ИЛЦ5-4/7М)

Тест авто работает, как и планировали?

103

Re: Часы+будильник на П543 (ИЛЦ5-4/7М)

liman324 пишет:

Тест авто работает, как и планировали?

Да. все как и планировали.
Кстати.  напряжение сеток около 20 вольт. Не стал поднимать. не хочу индикатор нагружать. П543  редкий.   Возможно если еще чуть поднять напряжение круглый значок станет ярче.

104

Re: Часы+будильник на П543 (ИЛЦ5-4/7М)

Тест установки времени

Нажать ПРОГ и удерживая ПЛЮС, на дисплее должно быть на 2 секунды SET1, а после
P0 00 
00 - это ход секунд , если нажать ПЛЮС или МИНУС, то секунды должны сброситься

нажимая ПРОГ переходим к Р1 Р2 что обозначает корректировка минут и часов

// Подключение сетки
#define  C1_SET  0
#define  C2_SET  1
#define  C3_SET  2
#define  C4_SET  3
#define  C5_SET  4
#define  C6_SET  5
// Подключение сегменты-аноды
#define  A_SEG   6
#define  B_SEG   7
#define  C_SEG   8
#define  D_SEG   9
#define  E_SEG  10
#define  F_SEG  11
#define  G_SEG  12
#define  H_SEG  13
// Кнопки
#define  PROG   A0  // ПРОГ
#define  UP     A1  // ПЛЮС
#define  DW     A2  // МИНУС

#include <MsTimer2.h>   // // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip  
#include <Wire.h>
#include <EEPROM.h>
#include <DS3231.h> //https://github.com/jarzebski/Arduino-DS3231/archive/master.zip
#include <SHT21.h>  // http://rcl-radio.ru/wp-content/uploads/2025/03/SHT21-Arduino-Library-master.zip
DS3231 clock;
RTCDateTime DateTime;
SHT21 sht; 

int i,segm,c,segm_dn, ss,mm,hh,dd,mon,gg,wesk,times;
int a[4],s_tic, bud,kolorol, prog, timers;
int fff;
unsigned long times_0, times_1, times_2,times_3;
int temp,humidity;
bool avto,w;
int brig = 500;
int set_time, set_time_prog,gg_reg, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg;


void setup(){
MsTimer2::set(4, to_Timer);MsTimer2::start(); // timer2 period 4 ms
pinMode(C1_SET,OUTPUT); pinMode(C2_SET,OUTPUT);pinMode(C3_SET,OUTPUT);
pinMode(C4_SET,OUTPUT);pinMode(C5_SET,OUTPUT);pinMode(C6_SET,OUTPUT);
pinMode(A_SEG,OUTPUT); pinMode(B_SEG,OUTPUT);pinMode(C_SEG,OUTPUT);
pinMode(D_SEG,OUTPUT);pinMode(E_SEG,OUTPUT);pinMode(F_SEG,OUTPUT);
pinMode(G_SEG,OUTPUT);pinMode(H_SEG,OUTPUT);
pinMode(PROG,INPUT_PULLUP);pinMode(UP,INPUT_PULLUP);pinMode(DW,INPUT_PULLUP);  
Wire.begin();clock.begin();
if(EEPROM.read(100)!=0){for(int i=0;i<101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении  
avto = EEPROM.read(0);
// clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
  }

void loop(){
  // управление режимом авто
  if(digitalRead(PROG)==LOW && digitalRead(UP)==HIGH && digitalRead(DW)==HIGH && avto==0){avto=1;timers=1;EEPROM.update(0,avto);delay(200);}
  if(digitalRead(PROG)==LOW && digitalRead(UP)==HIGH && digitalRead(DW)==HIGH && avto==1){avto=0;timers=0;EEPROM.update(0,avto);delay(200);}
  // основное меню настройки часов, установка времени
  if(digitalRead(PROG)==LOW && digitalRead(UP)==LOW && digitalRead(DW)==HIGH && set_time==0){set_time=1;w=1;times_3=millis();a[0]=15;a[1]=16;a[2]=17;a[3]=1;delay(2000);}

  
  
  
  if(millis()-times_1>=1000){ times_1=millis(); // считываем время с ds3231 каждые 1000 мс
  DateTime=clock.getDateTime();// опрос времени
  ss = DateTime.second;        // секунды
  mm = DateTime.minute;        // минуты
  hh = DateTime.hour;          // часы
  dd = DateTime.day;           // дата
  mon = DateTime.month;        // месяц
  gg = DateTime.year;          // Год
  if(ss<=10 && avto==1){wesk = 12;}
   else{wesk = DateTime.dayOfWeek;}   // День недели (1 - воскресенье, 7 - суббота)

  temp = sht.getTemperature();  // Температура
  humidity = sht.getHumidity(); // Влажность
  }

  gg_reg = gg;
  mon_reg = mon;
  dd_reg = dd;
  hh_reg = hh;
  mm_reg = mm;
  ss_reg = ss;

if(set_time==1){
    if(digitalRead(PROG)==LOW){set_time_prog++;if(set_time_prog>2){set_time_prog=0;}delay(200);}
    if(set_time_prog==0 && (digitalRead(UP)==LOW || digitalRead(DW)==LOW)){ss_reg = 0;clock.setDateTime(gg_reg, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);}
    if(set_time_prog==0){a[0]=18;a[1]=0;a[2]=ss_reg/10;a[3]=ss_reg%10;}
    
    if(set_time_prog==1 && digitalRead(UP)==LOW){mm_reg ++;if(mm_reg>59){mm_reg=59;}clock.setDateTime(gg_reg, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);}
    if(set_time_prog==1 && digitalRead(DW)==LOW){mm_reg --;if(mm_reg<0){mm_reg=0;}clock.setDateTime(gg_reg, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);}
    if(set_time_prog==1){a[0]=18;a[1]=1;a[2]=mm_reg/10;a[3]=mm_reg%10;}

    if(set_time_prog==2 && digitalRead(UP)==LOW){hh_reg ++;if(hh_reg>23){hh_reg=23;}clock.setDateTime(gg_reg, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);}
    if(set_time_prog==2 && digitalRead(DW)==LOW){hh_reg --;if(hh_reg<0){hh_reg=0;}clock.setDateTime(gg_reg, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);}
    if(set_time_prog==2){a[0]=18;a[1]=2;a[2]=hh_reg/10;a[3]=hh_reg%10;}
    }


  


if(set_time==0){
  // мигание двоеточия
  if(avto==1){if(ss>10){mig_dv();}else{s_tic = 0;}} else{mig_dv();}

  bud = 1;     // значок будильника
  kolorol = 1; // значок колокольчик
  prog = 1;    // надпись ПРОГ

  if(avto==1){
  if(ss < 5){ a[0]=temp/10;a[1]=temp%10;a[2]=13;a[3]=14;} // вывод темпер.
  if(ss >= 5 && ss <=10){ a[0]=10;a[1]=11;a[2]=humidity/10;a[3]=humidity%10;} // вывод влажн.
  if(ss > 10){timm();} // вывод время
  }else{timm();} // если авто = 0, то выводить только время
} // set_time == 0


  delay(100);

  if(millis()-times_3>10000 && w==1){w=0;set_time=0;}
  } 


void to_Timer(){ 
    switch(i){
    case 0:  segm=12; setka();segment(1); delayMicroseconds(brig); segm_dn=wesk; c=5;  setka();dn(bud); break;
    case 1:  segm=12; setka();segment(1); delayMicroseconds(brig); segm=a[0];    c=4;  setka();segment(1); break;
    case 2:  segm=12; setka();segment(1); delayMicroseconds(brig); segm=a[1];    c=3;  setka();segment(kolorol); break;
    case 3:  segm=12; setka();segment(1); delayMicroseconds(brig); segm=s_tic;   c=2;  setka();tic(); break;
    case 4:  segm=12; setka();segment(1); delayMicroseconds(brig); segm=a[2];    c=1;  setka();segment(prog); break;
    case 5:  segm=12; setka();segment(1); delayMicroseconds(brig); segm=a[3];    c=0;  setka();segment(timers); break;
  }i++;if(i>5){i=0;}}

void segment(bool hhh){
  switch(segm){                                                                 
    case 0: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,1);ch(H_SEG,hhh);break;// 0
    case 1: ch(A_SEG,1);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,hhh);break;// 1
    case 2: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,1);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,1);ch(G_SEG,0);ch(H_SEG,hhh);break;// 2
    case 3: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,0);ch(H_SEG,hhh);break;// 3
    case 4: ch(A_SEG,1);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// 4
    case 5: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,1);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// 5   
    case 6: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// 6 
    case 7: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,hhh);break;// 7 
    case 8: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// 8
    case 9: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,1);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// 9
    case 10: ch(A_SEG,1);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,1);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// Н
    case 11: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,0);ch(H_SEG,hhh);break;// -
    case 12: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,hhh);break;// пусто
    case 13: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// * градус
    case 14: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,1);ch(H_SEG,hhh);break;// C
    case 15: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,1);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// S
    case 16: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// E
    case 17: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// t
    case 18: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,hhh);break;// P
    
    
  }} 

void dn(bool ind_bud){
  switch(segm_dn){                                                               
    case 1: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// ПН
    case 2: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,0);break;// ВТ
    case 3: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,0);ch(G_SEG,1);ch(H_SEG,1);break;// СР
    case 4: ch(A_SEG,1);ch(B_SEG,0);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// ЧТ   
    case 5: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,0);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// ПТ 
    case 6: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,0);ch(H_SEG,1);break;// СБ 
    case 7: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,0);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// ВС
    case 12: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// пусто
  }}

void tic(){
  switch(s_tic){                                                             
    case 0: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// _
    case 1: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,0);break;// :
  }}     

void setka(){
  switch(c){                                                             
    case 0:ch(C1_SET,0);ch(C2_SET,1);ch(C3_SET,1);ch(C4_SET,1);ch(C5_SET,1);ch(C6_SET,1);break; 
    case 1:ch(C1_SET,1);ch(C2_SET,0);ch(C3_SET,1);ch(C4_SET,1);ch(C5_SET,1);ch(C6_SET,1);break; 
    case 2:ch(C1_SET,1);ch(C2_SET,1);ch(C3_SET,0);ch(C4_SET,1);ch(C5_SET,1);ch(C6_SET,1);break; 
    case 3:ch(C1_SET,1);ch(C2_SET,1);ch(C3_SET,1);ch(C4_SET,0);ch(C5_SET,1);ch(C6_SET,1);break; 
    case 4:ch(C1_SET,1);ch(C2_SET,1);ch(C3_SET,1);ch(C4_SET,1);ch(C5_SET,0);ch(C6_SET,1);break; 
    case 5:ch(C1_SET,1);ch(C2_SET,1);ch(C3_SET,1);ch(C4_SET,1);ch(C5_SET,1);ch(C6_SET,0);break; 
  }} 

void ch(int pin, int logic){digitalWrite(pin,logic);}

void mig_dv(){if(millis()-times_0<=500){s_tic = 0;}if(millis()-times_0>500){s_tic = 1;}if(millis()-times_0>1000){times_0=millis();}}
void timm(){times = hh*100+mm;a[0]=times/1000;a[1]=times/100%10;a[2]=times/10%10;a[3]=times%10;}  

105 (2025-03-30 07:36:30 отредактировано AnArAmo)

Re: Часы+будильник на П543 (ИЛЦ5-4/7М)

Вместо P0 00 вот то что на фото. На P1 P2 перейти невозможно.
http://forum.rcl-radio.ru/uploads/images/2025/03/7929f48e67fa1ef7b3cebfd4d5dd9ece.jpeg

106 (2025-03-30 07:39:00 отредактировано AnArAmo)

Re: Часы+будильник на П543 (ИЛЦ5-4/7М)

Секунды сбросить получается.
А вот переход на p1 p2/ нет.

107

Re: Часы+будильник на П543 (ИЛЦ5-4/7М)

// Подключение сетки
#define  C1_SET  0
#define  C2_SET  1
#define  C3_SET  2
#define  C4_SET  3
#define  C5_SET  4
#define  C6_SET  5
// Подключение сегменты-аноды
#define  A_SEG   6
#define  B_SEG   7
#define  C_SEG   8
#define  D_SEG   9
#define  E_SEG  10
#define  F_SEG  11
#define  G_SEG  12
#define  H_SEG  13
// Кнопки
#define  PROG   A0  // ПРОГ
#define  UP     A1  // ПЛЮС
#define  DW     A2  // МИНУС

#include <MsTimer2.h>   // // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip  
#include <Wire.h>
#include <EEPROM.h>
#include <DS3231.h> //https://github.com/jarzebski/Arduino-DS3231/archive/master.zip
#include <SHT21.h>  // http://rcl-radio.ru/wp-content/uploads/2025/03/SHT21-Arduino-Library-master.zip
DS3231 clock;
RTCDateTime DateTime;
SHT21 sht; 

int i,segm,c,segm_dn, ss,mm,hh,dd,mon,gg,wesk,times;
int a[4],s_tic, bud,kolorol, prog, timers;
int fff;
unsigned long times_0, times_1, times_2,times_3;
int temp,humidity;
bool avto,w;
int brig = 500;
int set_time, set_time_prog,gg_reg, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg;


void setup(){
MsTimer2::set(4, to_Timer);MsTimer2::start(); // timer2 period 4 ms
pinMode(C1_SET,OUTPUT); pinMode(C2_SET,OUTPUT);pinMode(C3_SET,OUTPUT);
pinMode(C4_SET,OUTPUT);pinMode(C5_SET,OUTPUT);pinMode(C6_SET,OUTPUT);
pinMode(A_SEG,OUTPUT); pinMode(B_SEG,OUTPUT);pinMode(C_SEG,OUTPUT);
pinMode(D_SEG,OUTPUT);pinMode(E_SEG,OUTPUT);pinMode(F_SEG,OUTPUT);
pinMode(G_SEG,OUTPUT);pinMode(H_SEG,OUTPUT);
pinMode(PROG,INPUT_PULLUP);pinMode(UP,INPUT_PULLUP);pinMode(DW,INPUT_PULLUP);  
Wire.begin();clock.begin();
if(EEPROM.read(100)!=0){for(int i=0;i<101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении  
avto = EEPROM.read(0);
// clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
  }

void loop(){
  // управление режимом авто
  if(digitalRead(PROG)==LOW && digitalRead(UP)==HIGH && digitalRead(DW)==HIGH && avto==0){avto=1;timers=1;EEPROM.update(0,avto);delay(200);}
  if(digitalRead(PROG)==LOW && digitalRead(UP)==HIGH && digitalRead(DW)==HIGH && avto==1){avto=0;timers=0;EEPROM.update(0,avto);delay(200);}
  // основное меню настройки часов, установка времени
  if(digitalRead(PROG)==LOW && digitalRead(UP)==LOW && digitalRead(DW)==HIGH && set_time==0){set_time=1;w=1;times_3=millis();a[0]=15;a[1]=16;a[2]=17;a[3]=1;delay(2000);}

  
  
  
  if(millis()-times_1>=1000){ times_1=millis(); // считываем время с ds3231 каждые 1000 мс
  DateTime=clock.getDateTime();// опрос времени
  ss = DateTime.second;        // секунды
  mm = DateTime.minute;        // минуты
  hh = DateTime.hour;          // часы
  dd = DateTime.day;           // дата
  mon = DateTime.month;        // месяц
  gg = DateTime.year;          // Год
  if(ss<=10 && avto==1){wesk = 12;}
   else{wesk = DateTime.dayOfWeek;}   // День недели (1 - воскресенье, 7 - суббота)

  temp = sht.getTemperature();  // Температура
  humidity = sht.getHumidity(); // Влажность
  }

  gg_reg = gg;
  mon_reg = mon;
  dd_reg = dd;
  hh_reg = hh;
  mm_reg = mm;
  ss_reg = ss;

if(set_time==1){
    if(digitalRead(PROG)==LOW){set_time_prog++;if(set_time_prog>2){set_time_prog=0;}delay(200);}
    if(set_time_prog==0 && (digitalRead(UP)==LOW || digitalRead(DW)==LOW)){ss_reg = 0;clock.setDateTime(gg_reg, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);}
    if(set_time_prog==0){a[0]=18;a[1]=0;a[2]=ss_reg/10;a[3]=ss_reg%10;}
    
    if(set_time_prog==1 && digitalRead(UP)==LOW){mm_reg ++;if(mm_reg>59){mm_reg=59;}clock.setDateTime(gg_reg, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);}
    if(set_time_prog==1 && digitalRead(DW)==LOW){mm_reg --;if(mm_reg<0){mm_reg=0;}clock.setDateTime(gg_reg, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);}
    if(set_time_prog==1){a[0]=18;a[1]=1;a[2]=mm_reg/10;a[3]=mm_reg%10;}

    if(set_time_prog==2 && digitalRead(UP)==LOW){hh_reg ++;if(hh_reg>23){hh_reg=23;}clock.setDateTime(gg_reg, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);}
    if(set_time_prog==2 && digitalRead(DW)==LOW){hh_reg --;if(hh_reg<0){hh_reg=0;}clock.setDateTime(gg_reg, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);}
    if(set_time_prog==2){a[0]=18;a[1]=2;a[2]=hh_reg/10;a[3]=hh_reg%10;}
    }


  


if(set_time==0){
  // мигание двоеточия
  if(avto==1){if(ss>10){mig_dv();}else{s_tic = 0;}} else{mig_dv();}

  bud = 1;     // значок будильника
  kolorol = 1; // значок колокольчик
  prog = 1;    // надпись ПРОГ

  if(avto==1){
  if(ss < 5){ a[0]=temp/10;a[1]=temp%10;a[2]=13;a[3]=14;} // вывод темпер.
  if(ss >= 5 && ss <=10){ a[0]=10;a[1]=11;a[2]=humidity/10;a[3]=humidity%10;} // вывод влажн.
  if(ss > 10){timm();} // вывод время
  }else{timm();} // если авто = 0, то выводить только время
} // set_time == 0


  delay(100);

  if(millis()-times_3>10000 && w==1){w=0;set_time=0;}
  } 


void to_Timer(){ 
    switch(i){
    case 0:  segm=12; setka();segment(1); delayMicroseconds(brig); segm_dn=wesk; c=5;  setka();dn(bud); break;
    case 1:  segm=12; setka();segment(1); delayMicroseconds(brig); segm=a[0];    c=4;  setka();segment(1); break;
    case 2:  segm=12; setka();segment(1); delayMicroseconds(brig); segm=a[1];    c=3;  setka();segment(kolorol); break;
    case 3:  segm=12; setka();segment(1); delayMicroseconds(brig); segm=s_tic;   c=2;  setka();tic(); break;
    case 4:  segm=12; setka();segment(1); delayMicroseconds(brig); segm=a[2];    c=1;  setka();segment(prog); break;
    case 5:  segm=12; setka();segment(1); delayMicroseconds(brig); segm=a[3];    c=0;  setka();segment(timers); break;
  }i++;if(i>5){i=0;}}

void segment(bool hhh){
  switch(segm){                                                                 
    case 0: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,1);ch(H_SEG,hhh);break;// 0
    case 1: ch(A_SEG,1);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,hhh);break;// 1
    case 2: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,1);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,1);ch(G_SEG,0);ch(H_SEG,hhh);break;// 2
    case 3: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,0);ch(H_SEG,hhh);break;// 3
    case 4: ch(A_SEG,1);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// 4
    case 5: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,1);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// 5   
    case 6: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// 6 
    case 7: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,hhh);break;// 7 
    case 8: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// 8
    case 9: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,1);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// 9
    case 10: ch(A_SEG,1);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,1);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// Н
    case 11: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,0);ch(H_SEG,hhh);break;// -
    case 12: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,hhh);break;// пусто
    case 13: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// * градус
    case 14: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,1);ch(H_SEG,hhh);break;// C
    case 15: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,1);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// S
    case 16: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// E
    case 17: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// t
    case 18: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// P
    
    
  }} 

void dn(bool ind_bud){
  switch(segm_dn){                                                               
    case 1: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// ПН
    case 2: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,0);break;// ВТ
    case 3: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,0);ch(G_SEG,1);ch(H_SEG,1);break;// СР
    case 4: ch(A_SEG,1);ch(B_SEG,0);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// ЧТ   
    case 5: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,0);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// ПТ 
    case 6: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,0);ch(H_SEG,1);break;// СБ 
    case 7: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,0);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// ВС
    case 12: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// пусто
  }}

void tic(){
  switch(s_tic){                                                             
    case 0: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// _
    case 1: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,0);break;// :
  }}     

void setka(){
  switch(c){                                                             
    case 0:ch(C1_SET,0);ch(C2_SET,1);ch(C3_SET,1);ch(C4_SET,1);ch(C5_SET,1);ch(C6_SET,1);break; 
    case 1:ch(C1_SET,1);ch(C2_SET,0);ch(C3_SET,1);ch(C4_SET,1);ch(C5_SET,1);ch(C6_SET,1);break; 
    case 2:ch(C1_SET,1);ch(C2_SET,1);ch(C3_SET,0);ch(C4_SET,1);ch(C5_SET,1);ch(C6_SET,1);break; 
    case 3:ch(C1_SET,1);ch(C2_SET,1);ch(C3_SET,1);ch(C4_SET,0);ch(C5_SET,1);ch(C6_SET,1);break; 
    case 4:ch(C1_SET,1);ch(C2_SET,1);ch(C3_SET,1);ch(C4_SET,1);ch(C5_SET,0);ch(C6_SET,1);break; 
    case 5:ch(C1_SET,1);ch(C2_SET,1);ch(C3_SET,1);ch(C4_SET,1);ch(C5_SET,1);ch(C6_SET,0);break; 
  }} 

void ch(int pin, int logic){digitalWrite(pin,logic);}

void mig_dv(){if(millis()-times_0<=500){s_tic = 0;}if(millis()-times_0>500){s_tic = 1;}if(millis()-times_0>1000){times_0=millis();}}
void timm(){times = hh*100+mm;a[0]=times/1000;a[1]=times/100%10;a[2]=times/10%10;a[3]=times%10;}  

108

Re: Часы+будильник на П543 (ИЛЦ5-4/7М)

Надпись SET1 выводится на 2 секунды?

109

Re: Часы+будильник на П543 (ИЛЦ5-4/7М)

liman324 пишет:

Надпись SET1 выводится на 2 секунды?

Да. и P 0 00 то появилось. Но вот установить время и переключиться между P1 P2 не получается

110

Re: Часы+будильник на П543 (ИЛЦ5-4/7М)

Тоесть если нажимать на ПРОГ ни чего не меняется?

111

Re: Часы+будильник на П543 (ИЛЦ5-4/7М)

// Подключение сетки
#define  C1_SET  0
#define  C2_SET  1
#define  C3_SET  2
#define  C4_SET  3
#define  C5_SET  4
#define  C6_SET  5
// Подключение сегменты-аноды
#define  A_SEG   6
#define  B_SEG   7
#define  C_SEG   8
#define  D_SEG   9
#define  E_SEG  10
#define  F_SEG  11
#define  G_SEG  12
#define  H_SEG  13
// Кнопки
#define  PROG   A0  // ПРОГ
#define  UP     A1  // ПЛЮС
#define  DW     A2  // МИНУС

#include <MsTimer2.h>   // // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip  
#include <Wire.h>
#include <EEPROM.h>
#include <DS3231.h> //https://github.com/jarzebski/Arduino-DS3231/archive/master.zip
#include <SHT21.h>  // http://rcl-radio.ru/wp-content/uploads/2025/03/SHT21-Arduino-Library-master.zip
DS3231 clock;
RTCDateTime DateTime;
SHT21 sht; 

int i,segm,c,segm_dn, ss,mm,hh,dd,mon,gg,wesk,times;
int a[4],s_tic, bud,kolorol, prog, timers;
int fff;
unsigned long times_0, times_1, times_2,times_3;
int temp,humidity;
bool avto,w;
int brig = 500;
int set_time, set_time_prog, gg_reg, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg;


void setup(){
MsTimer2::set(4, to_Timer);MsTimer2::start(); // timer2 period 4 ms
pinMode(C1_SET,OUTPUT); pinMode(C2_SET,OUTPUT);pinMode(C3_SET,OUTPUT);
pinMode(C4_SET,OUTPUT);pinMode(C5_SET,OUTPUT);pinMode(C6_SET,OUTPUT);
pinMode(A_SEG,OUTPUT); pinMode(B_SEG,OUTPUT);pinMode(C_SEG,OUTPUT);
pinMode(D_SEG,OUTPUT);pinMode(E_SEG,OUTPUT);pinMode(F_SEG,OUTPUT);
pinMode(G_SEG,OUTPUT);pinMode(H_SEG,OUTPUT);
pinMode(PROG,INPUT_PULLUP);pinMode(UP,INPUT_PULLUP);pinMode(DW,INPUT_PULLUP);  
Wire.begin();clock.begin();
if(EEPROM.read(100)!=0){for(int i=0;i<101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении  
avto = EEPROM.read(0);
// clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
  }

void loop(){
  // управление режимом авто
  if(digitalRead(PROG)==LOW && digitalRead(UP)==HIGH && digitalRead(DW)==HIGH && avto==0){avto=1;timers=1;EEPROM.update(0,avto);delay(200);}
  if(digitalRead(PROG)==LOW && digitalRead(UP)==HIGH && digitalRead(DW)==HIGH && avto==1){avto=0;timers=0;EEPROM.update(0,avto);delay(200);}
  // основное меню настройки часов, установка времени
  if(digitalRead(PROG)==LOW && digitalRead(UP)==LOW && digitalRead(DW)==HIGH && set_time==0){set_time=1;w=1;times_3=millis();a[0]=15;a[1]=16;a[2]=17;a[3]=1;delay(2000);}

  
  
  
  if(millis()-times_1>=1000){ times_1=millis(); // считываем время с ds3231 каждые 1000 мс
  DateTime=clock.getDateTime();// опрос времени
  ss = DateTime.second;        // секунды
  mm = DateTime.minute;        // минуты
  hh = DateTime.hour;          // часы
  dd = DateTime.day;           // дата
  mon = DateTime.month;        // месяц
  gg = DateTime.year;          // Год
  if(ss<=10 && avto==1){wesk = 12;}
   else{wesk = DateTime.dayOfWeek;}   // День недели (1 - воскресенье, 7 - суббота)

  temp = sht.getTemperature();  // Температура
  humidity = sht.getHumidity(); // Влажность
  }

  gg_reg = gg;
  mon_reg = mon;
  dd_reg = dd;
  hh_reg = hh;
  mm_reg = mm;
  ss_reg = ss;

if(set_time==1){
    if(digitalRead(PROG)==LOW){set_time_prog++;if(set_time_prog>2){set_time_prog=0;}w=1;times_3=millis();delay(200);}
    if(set_time_prog==0 && (digitalRead(UP)==LOW || digitalRead(DW)==LOW)){ss_reg = 0;clock.setDateTime(gg_reg, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);}
    if(set_time_prog==0){a[0]=18;a[1]=0;a[2]=ss_reg/10;a[3]=ss_reg%10;}
    
    if(set_time_prog==1 && digitalRead(UP)==LOW){mm_reg ++;if(mm_reg>59){mm_reg=59;}clock.setDateTime(gg_reg, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);w=1;times_3=millis();}
    if(set_time_prog==1 && digitalRead(DW)==LOW){mm_reg --;if(mm_reg<0){mm_reg=0;}clock.setDateTime(gg_reg, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);w=1;times_3=millis();}
    if(set_time_prog==1){a[0]=18;a[1]=1;a[2]=mm_reg/10;a[3]=mm_reg%10;}

    if(set_time_prog==2 && digitalRead(UP)==LOW){hh_reg ++;if(hh_reg>23){hh_reg=23;}clock.setDateTime(gg_reg, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);w=1;times_3=millis();}
    if(set_time_prog==2 && digitalRead(DW)==LOW){hh_reg --;if(hh_reg<0){hh_reg=0;}clock.setDateTime(gg_reg, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);w=1;times_3=millis();}
    if(set_time_prog==2){a[0]=18;a[1]=2;a[2]=hh_reg/10;a[3]=hh_reg%10;}
    }


  


if(set_time==0){
  // мигание двоеточия
  if(avto==1){if(ss>10){mig_dv();}else{s_tic = 0;}} else{mig_dv();}

  bud = 1;     // значок будильника
  kolorol = 1; // значок колокольчик
  prog = 1;    // надпись ПРОГ

  if(avto==1){
  if(ss < 5){ a[0]=temp/10;a[1]=temp%10;a[2]=13;a[3]=14;} // вывод темпер.
  if(ss >= 5 && ss <=10){ a[0]=10;a[1]=11;a[2]=humidity/10;a[3]=humidity%10;} // вывод влажн.
  if(ss > 10){timm();} // вывод время
  }else{timm();} // если авто = 0, то выводить только время
} // set_time == 0


  delay(100);

  if(millis()-times_3>10000 && w==1 && set_time_prog!=0){w=0;set_time=0;set_time_prog=0;}
  } 


void to_Timer(){ 
    switch(i){
    case 0:  segm=12; setka();segment(1); delayMicroseconds(brig); segm_dn=wesk; c=5;  setka();dn(bud); break;
    case 1:  segm=12; setka();segment(1); delayMicroseconds(brig); segm=a[0];    c=4;  setka();segment(1); break;
    case 2:  segm=12; setka();segment(1); delayMicroseconds(brig); segm=a[1];    c=3;  setka();segment(kolorol); break;
    case 3:  segm=12; setka();segment(1); delayMicroseconds(brig); segm=s_tic;   c=2;  setka();tic(); break;
    case 4:  segm=12; setka();segment(1); delayMicroseconds(brig); segm=a[2];    c=1;  setka();segment(prog); break;
    case 5:  segm=12; setka();segment(1); delayMicroseconds(brig); segm=a[3];    c=0;  setka();segment(timers); break;
  }i++;if(i>5){i=0;}}

void segment(bool hhh){
  switch(segm){                                                                 
    case 0: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,1);ch(H_SEG,hhh);break;// 0
    case 1: ch(A_SEG,1);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,hhh);break;// 1
    case 2: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,1);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,1);ch(G_SEG,0);ch(H_SEG,hhh);break;// 2
    case 3: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,0);ch(H_SEG,hhh);break;// 3
    case 4: ch(A_SEG,1);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// 4
    case 5: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,1);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// 5   
    case 6: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// 6 
    case 7: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,hhh);break;// 7 
    case 8: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// 8
    case 9: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,1);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// 9
    case 10: ch(A_SEG,1);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,1);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// Н
    case 11: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,0);ch(H_SEG,hhh);break;// -
    case 12: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,hhh);break;// пусто
    case 13: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// * градус
    case 14: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,1);ch(H_SEG,hhh);break;// C
    case 15: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,1);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// S
    case 16: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// E
    case 17: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// t
    case 18: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// P
    
    
  }} 

void dn(bool ind_bud){
  switch(segm_dn){                                                               
    case 1: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// ПН
    case 2: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,0);break;// ВТ
    case 3: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,0);ch(G_SEG,1);ch(H_SEG,1);break;// СР
    case 4: ch(A_SEG,1);ch(B_SEG,0);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// ЧТ   
    case 5: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,0);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// ПТ 
    case 6: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,0);ch(H_SEG,1);break;// СБ 
    case 7: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,0);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// ВС
    case 12: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// пусто
  }}

void tic(){
  switch(s_tic){                                                             
    case 0: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// _
    case 1: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,0);break;// :
  }}     

void setka(){
  switch(c){                                                             
    case 0:ch(C1_SET,0);ch(C2_SET,1);ch(C3_SET,1);ch(C4_SET,1);ch(C5_SET,1);ch(C6_SET,1);break; 
    case 1:ch(C1_SET,1);ch(C2_SET,0);ch(C3_SET,1);ch(C4_SET,1);ch(C5_SET,1);ch(C6_SET,1);break; 
    case 2:ch(C1_SET,1);ch(C2_SET,1);ch(C3_SET,0);ch(C4_SET,1);ch(C5_SET,1);ch(C6_SET,1);break; 
    case 3:ch(C1_SET,1);ch(C2_SET,1);ch(C3_SET,1);ch(C4_SET,0);ch(C5_SET,1);ch(C6_SET,1);break; 
    case 4:ch(C1_SET,1);ch(C2_SET,1);ch(C3_SET,1);ch(C4_SET,1);ch(C5_SET,0);ch(C6_SET,1);break; 
    case 5:ch(C1_SET,1);ch(C2_SET,1);ch(C3_SET,1);ch(C4_SET,1);ch(C5_SET,1);ch(C6_SET,0);break; 
  }} 

void ch(int pin, int logic){digitalWrite(pin,logic);}

void mig_dv(){if(millis()-times_0<=500){s_tic = 0;}if(millis()-times_0>500){s_tic = 1;}if(millis()-times_0>1000){times_0=millis();}}
void timm(){times = hh*100+mm;a[0]=times/1000;a[1]=times/100%10;a[2]=times/10%10;a[3]=times%10;}  

112

Re: Часы+будильник на П543 (ИЛЦ5-4/7М)

Извините. видео снимал.
Это предпоследний скетч.
https://cloud.mail.ru/public/f56G/L3rGYUNtX

113

Re: Часы+будильник на П543 (ИЛЦ5-4/7М)

Все понял, убрал ожидание 10 сек, теперь если заканчивается меню настроек то происходит выход

// Подключение сетки
#define  C1_SET  0
#define  C2_SET  1
#define  C3_SET  2
#define  C4_SET  3
#define  C5_SET  4
#define  C6_SET  5
// Подключение сегменты-аноды
#define  A_SEG   6
#define  B_SEG   7
#define  C_SEG   8
#define  D_SEG   9
#define  E_SEG  10
#define  F_SEG  11
#define  G_SEG  12
#define  H_SEG  13
// Кнопки
#define  PROG   A0  // ПРОГ
#define  UP     A1  // ПЛЮС
#define  DW     A2  // МИНУС

#include <MsTimer2.h>   // // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip  
#include <Wire.h>
#include <EEPROM.h>
#include <DS3231.h> //https://github.com/jarzebski/Arduino-DS3231/archive/master.zip
#include <SHT21.h>  // http://rcl-radio.ru/wp-content/uploads/2025/03/SHT21-Arduino-Library-master.zip
DS3231 clock;
RTCDateTime DateTime;
SHT21 sht; 

int i,segm,c,segm_dn, ss,mm,hh,dd,mon,gg,wesk,times;
int a[4],s_tic, bud,kolorol, prog, timers;
int fff;
unsigned long times_0, times_1, times_2,times_3;
int temp,humidity;
bool avto,w;
int brig = 500;
int set_time, set_time_prog, gg_reg, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg;


void setup(){
MsTimer2::set(4, to_Timer);MsTimer2::start(); // timer2 period 4 ms
pinMode(C1_SET,OUTPUT); pinMode(C2_SET,OUTPUT);pinMode(C3_SET,OUTPUT);
pinMode(C4_SET,OUTPUT);pinMode(C5_SET,OUTPUT);pinMode(C6_SET,OUTPUT);
pinMode(A_SEG,OUTPUT); pinMode(B_SEG,OUTPUT);pinMode(C_SEG,OUTPUT);
pinMode(D_SEG,OUTPUT);pinMode(E_SEG,OUTPUT);pinMode(F_SEG,OUTPUT);
pinMode(G_SEG,OUTPUT);pinMode(H_SEG,OUTPUT);
pinMode(PROG,INPUT_PULLUP);pinMode(UP,INPUT_PULLUP);pinMode(DW,INPUT_PULLUP);  
Wire.begin();clock.begin();
if(EEPROM.read(100)!=0){for(int i=0;i<101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении  
avto = EEPROM.read(0);
// clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
  }

void loop(){
  if(set_time==0){
  // управление режимом авто
  if(digitalRead(PROG)==LOW && digitalRead(UP)==HIGH && digitalRead(DW)==HIGH && avto==0){avto=1;timers=1;EEPROM.update(0,avto);delay(200);}
  if(digitalRead(PROG)==LOW && digitalRead(UP)==HIGH && digitalRead(DW)==HIGH && avto==1){avto=0;timers=0;EEPROM.update(0,avto);delay(200);}
  // основное меню настройки часов, установка времени
  if(digitalRead(PROG)==LOW && digitalRead(UP)==LOW && digitalRead(DW)==HIGH){set_time=1;a[0]=15;a[1]=16;a[2]=17;a[3]=1;delay(2000);}
  }
  
  
  
  if(millis()-times_1>=1000){ times_1=millis(); // считываем время с ds3231 каждые 1000 мс
  DateTime=clock.getDateTime();// опрос времени
  ss = DateTime.second;        // секунды
  mm = DateTime.minute;        // минуты
  hh = DateTime.hour;          // часы
  dd = DateTime.day;           // дата
  mon = DateTime.month;        // месяц
  gg = DateTime.year;          // Год
  if(ss<=10 && avto==1){wesk = 12;}
   else{wesk = DateTime.dayOfWeek;}   // День недели (1 - воскресенье, 7 - суббота)

  temp = sht.getTemperature();  // Температура
  humidity = sht.getHumidity(); // Влажность
  }

  gg_reg = gg;
  mon_reg = mon;
  dd_reg = dd;
  hh_reg = hh;
  mm_reg = mm;
  ss_reg = ss;

if(set_time==1){
    if(digitalRead(PROG)==LOW){set_time_prog++;if(set_time_prog>2){set_time_prog=0;set_time=0;}delay(200);}
    if(set_time_prog==0 && (digitalRead(UP)==LOW || digitalRead(DW)==LOW)){ss_reg = 0;clock.setDateTime(gg_reg, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==0){a[0]=18;a[1]=0;a[2]=ss_reg/10;a[3]=ss_reg%10;}
    
    if(set_time_prog==1 && digitalRead(UP)==LOW){mm_reg ++;if(mm_reg>59){mm_reg=59;}clock.setDateTime(gg_reg, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==1 && digitalRead(DW)==LOW){mm_reg --;if(mm_reg<0){mm_reg=0;}clock.setDateTime(gg_reg, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==1){a[0]=18;a[1]=1;a[2]=mm_reg/10;a[3]=mm_reg%10;}

    if(set_time_prog==2 && digitalRead(UP)==LOW){hh_reg ++;if(hh_reg>23){hh_reg=23;}clock.setDateTime(gg_reg, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==2 && digitalRead(DW)==LOW){hh_reg --;if(hh_reg<0){hh_reg=0;}clock.setDateTime(gg_reg, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==2){a[0]=18;a[1]=2;a[2]=hh_reg/10;a[3]=hh_reg%10;}
    }


  


if(set_time==0){
  // мигание двоеточия
  if(avto==1){if(ss>10){mig_dv();}else{s_tic = 0;}} else{mig_dv();}

  bud = 1;     // значок будильника
  kolorol = 1; // значок колокольчик
  prog = 1;    // надпись ПРОГ

  if(avto==1){
  if(ss < 5){ a[0]=temp/10;a[1]=temp%10;a[2]=13;a[3]=14;} // вывод темпер.
  if(ss >= 5 && ss <=10){ a[0]=10;a[1]=11;a[2]=humidity/10;a[3]=humidity%10;} // вывод влажн.
  if(ss > 10){timm();} // вывод время
  }else{timm();} // если авто = 0, то выводить только время
} // set_time == 0


  delay(100);

  } 


void to_Timer(){ 
    switch(i){
    case 0:  segm=12; setka();segment(1); delayMicroseconds(brig); segm_dn=wesk; c=5;  setka();dn(bud); break;
    case 1:  segm=12; setka();segment(1); delayMicroseconds(brig); segm=a[0];    c=4;  setka();segment(1); break;
    case 2:  segm=12; setka();segment(1); delayMicroseconds(brig); segm=a[1];    c=3;  setka();segment(kolorol); break;
    case 3:  segm=12; setka();segment(1); delayMicroseconds(brig); segm=s_tic;   c=2;  setka();tic(); break;
    case 4:  segm=12; setka();segment(1); delayMicroseconds(brig); segm=a[2];    c=1;  setka();segment(prog); break;
    case 5:  segm=12; setka();segment(1); delayMicroseconds(brig); segm=a[3];    c=0;  setka();segment(timers); break;
  }i++;if(i>5){i=0;}}

void segment(bool hhh){
  switch(segm){                                                                 
    case 0: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,1);ch(H_SEG,hhh);break;// 0
    case 1: ch(A_SEG,1);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,hhh);break;// 1
    case 2: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,1);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,1);ch(G_SEG,0);ch(H_SEG,hhh);break;// 2
    case 3: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,0);ch(H_SEG,hhh);break;// 3
    case 4: ch(A_SEG,1);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// 4
    case 5: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,1);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// 5   
    case 6: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// 6 
    case 7: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,hhh);break;// 7 
    case 8: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// 8
    case 9: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,1);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// 9
    case 10: ch(A_SEG,1);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,1);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// Н
    case 11: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,0);ch(H_SEG,hhh);break;// -
    case 12: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,hhh);break;// пусто
    case 13: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// * градус
    case 14: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,1);ch(H_SEG,hhh);break;// C
    case 15: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,1);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// S
    case 16: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// E
    case 17: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// t
    case 18: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// P
    
    
  }} 

void dn(bool ind_bud){
  switch(segm_dn){                                                               
    case 1: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// ПН
    case 2: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,0);break;// ВТ
    case 3: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,0);ch(G_SEG,1);ch(H_SEG,1);break;// СР
    case 4: ch(A_SEG,1);ch(B_SEG,0);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// ЧТ   
    case 5: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,0);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// ПТ 
    case 6: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,0);ch(H_SEG,1);break;// СБ 
    case 7: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,0);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// ВС
    case 12: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// пусто
  }}

void tic(){
  switch(s_tic){                                                             
    case 0: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// _
    case 1: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,0);break;// :
  }}     

void setka(){
  switch(c){                                                             
    case 0:ch(C1_SET,0);ch(C2_SET,1);ch(C3_SET,1);ch(C4_SET,1);ch(C5_SET,1);ch(C6_SET,1);break; 
    case 1:ch(C1_SET,1);ch(C2_SET,0);ch(C3_SET,1);ch(C4_SET,1);ch(C5_SET,1);ch(C6_SET,1);break; 
    case 2:ch(C1_SET,1);ch(C2_SET,1);ch(C3_SET,0);ch(C4_SET,1);ch(C5_SET,1);ch(C6_SET,1);break; 
    case 3:ch(C1_SET,1);ch(C2_SET,1);ch(C3_SET,1);ch(C4_SET,0);ch(C5_SET,1);ch(C6_SET,1);break; 
    case 4:ch(C1_SET,1);ch(C2_SET,1);ch(C3_SET,1);ch(C4_SET,1);ch(C5_SET,0);ch(C6_SET,1);break; 
    case 5:ch(C1_SET,1);ch(C2_SET,1);ch(C3_SET,1);ch(C4_SET,1);ch(C5_SET,1);ch(C6_SET,0);break; 
  }} 

void ch(int pin, int logic){digitalWrite(pin,logic);}

void mig_dv(){if(millis()-times_0<=500){s_tic = 0;}if(millis()-times_0>500){s_tic = 1;}if(millis()-times_0>1000){times_0=millis();}}
void timm(){times = hh*100+mm;a[0]=times/1000;a[1]=times/100%10;a[2]=times/10%10;a[3]=times%10;}  

114

Re: Часы+будильник на П543 (ИЛЦ5-4/7М)

посмотрите.
https://cloud.mail.ru/public/fLQb/LBCWM827o

115

Re: Часы+будильник на П543 (ИЛЦ5-4/7М)

Должно помочь

// Подключение сетки
#define  C1_SET  0
#define  C2_SET  1
#define  C3_SET  2
#define  C4_SET  3
#define  C5_SET  4
#define  C6_SET  5
// Подключение сегменты-аноды
#define  A_SEG   6
#define  B_SEG   7
#define  C_SEG   8
#define  D_SEG   9
#define  E_SEG  10
#define  F_SEG  11
#define  G_SEG  12
#define  H_SEG  13
// Кнопки
#define  PROG   A0  // ПРОГ
#define  UP     A1  // ПЛЮС
#define  DW     A2  // МИНУС

#include <MsTimer2.h>   // // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip  
#include <Wire.h>
#include <EEPROM.h>
#include <DS3231.h> //https://github.com/jarzebski/Arduino-DS3231/archive/master.zip
#include <SHT21.h>  // http://rcl-radio.ru/wp-content/uploads/2025/03/SHT21-Arduino-Library-master.zip
DS3231 clock;
RTCDateTime DateTime;
SHT21 sht; 

int i,segm,c,segm_dn, ss,mm,hh,dd,mon,gg,wesk,times;
int a[4],s_tic, bud,kolorol, prog, timers;
int fff;
unsigned long times_0, times_1, times_2,times_3;
int temp,humidity;
bool avto,w;
int brig = 500;
int set_time, set_time_prog, gg_reg, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg;


void setup(){
MsTimer2::set(4, to_Timer);MsTimer2::start(); // timer2 period 4 ms
pinMode(C1_SET,OUTPUT); pinMode(C2_SET,OUTPUT);pinMode(C3_SET,OUTPUT);
pinMode(C4_SET,OUTPUT);pinMode(C5_SET,OUTPUT);pinMode(C6_SET,OUTPUT);
pinMode(A_SEG,OUTPUT); pinMode(B_SEG,OUTPUT);pinMode(C_SEG,OUTPUT);
pinMode(D_SEG,OUTPUT);pinMode(E_SEG,OUTPUT);pinMode(F_SEG,OUTPUT);
pinMode(G_SEG,OUTPUT);pinMode(H_SEG,OUTPUT);
pinMode(PROG,INPUT_PULLUP);pinMode(UP,INPUT_PULLUP);pinMode(DW,INPUT_PULLUP);  
Wire.begin();clock.begin();
if(EEPROM.read(100)!=0){for(int i=0;i<101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении  
avto = EEPROM.read(0);
// clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
  }

void loop(){
  if(set_time==0){
  // управление режимом авто
  if(digitalRead(PROG)==LOW && digitalRead(UP)==HIGH && digitalRead(DW)==HIGH && avto==0){avto=1;timers=1;EEPROM.update(0,avto);delay(200);}
  if(digitalRead(PROG)==LOW && digitalRead(UP)==HIGH && digitalRead(DW)==HIGH && avto==1){avto=0;timers=0;EEPROM.update(0,avto);delay(200);}
  // основное меню настройки часов, установка времени
  if(digitalRead(PROG)==LOW && digitalRead(UP)==LOW && digitalRead(DW)==HIGH){set_time=1;a[0]=15;a[1]=16;a[2]=17;a[3]=1;delay(2000);}
  }
  
  
  DateTime=clock.getDateTime();// опрос времени
  ss = DateTime.second;        // секунды
  mm = DateTime.minute;        // минуты
  hh = DateTime.hour;          // часы
  dd = DateTime.day;           // дата
  mon = DateTime.month;        // месяц
  gg = DateTime.year;          // Год
  if(ss<=10 && avto==1){wesk = 12;}
   else{wesk = DateTime.dayOfWeek;}   // День недели (1 - воскресенье, 7 - суббота)

  temp = sht.getTemperature();  // Температура
  humidity = sht.getHumidity(); // Влажность
  

  gg_reg = gg;
  mon_reg = mon;
  dd_reg = dd;
  hh_reg = hh;
  mm_reg = mm;
  ss_reg = ss;

if(set_time==1){
    if(digitalRead(PROG)==LOW){set_time_prog++;if(set_time_prog>2){set_time_prog=0;set_time=0;}delay(200);}
    if(set_time_prog==0 && (digitalRead(UP)==LOW || digitalRead(DW)==LOW)){ss_reg = 0;clock.setDateTime(gg_reg, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==0){a[0]=18;a[1]=0;a[2]=ss_reg/10;a[3]=ss_reg%10;}
    
    if(set_time_prog==1 && digitalRead(UP)==LOW){mm_reg ++;if(mm_reg>59){mm_reg=59;}clock.setDateTime(gg_reg, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==1 && digitalRead(DW)==LOW){mm_reg --;if(mm_reg<0){mm_reg=0;}clock.setDateTime(gg_reg, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==1){a[0]=18;a[1]=1;a[2]=mm_reg/10;a[3]=mm_reg%10;}

    if(set_time_prog==2 && digitalRead(UP)==LOW){hh_reg ++;if(hh_reg>23){hh_reg=23;}clock.setDateTime(gg_reg, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==2 && digitalRead(DW)==LOW){hh_reg --;if(hh_reg<0){hh_reg=0;}clock.setDateTime(gg_reg, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==2){a[0]=18;a[1]=2;a[2]=hh_reg/10;a[3]=hh_reg%10;}
    }


  


if(set_time==0){
  // мигание двоеточия
  if(avto==1){if(ss>10){mig_dv();}else{s_tic = 0;}} else{mig_dv();}

  bud = 1;     // значок будильника
  kolorol = 1; // значок колокольчик
  prog = 1;    // надпись ПРОГ

  if(avto==1){
  if(ss < 5){ a[0]=temp/10;a[1]=temp%10;a[2]=13;a[3]=14;} // вывод темпер.
  if(ss >= 5 && ss <=10){ a[0]=10;a[1]=11;a[2]=humidity/10;a[3]=humidity%10;} // вывод влажн.
  if(ss > 10){timm();} // вывод время
  }else{timm();} // если авто = 0, то выводить только время
} // set_time == 0


  delay(100);

  } 


void to_Timer(){ 
    switch(i){
    case 0:  segm=12; setka();segment(1); delayMicroseconds(brig); segm_dn=wesk; c=5;  setka();dn(bud); break;
    case 1:  segm=12; setka();segment(1); delayMicroseconds(brig); segm=a[0];    c=4;  setka();segment(1); break;
    case 2:  segm=12; setka();segment(1); delayMicroseconds(brig); segm=a[1];    c=3;  setka();segment(kolorol); break;
    case 3:  segm=12; setka();segment(1); delayMicroseconds(brig); segm=s_tic;   c=2;  setka();tic(); break;
    case 4:  segm=12; setka();segment(1); delayMicroseconds(brig); segm=a[2];    c=1;  setka();segment(prog); break;
    case 5:  segm=12; setka();segment(1); delayMicroseconds(brig); segm=a[3];    c=0;  setka();segment(timers); break;
  }i++;if(i>5){i=0;}}

void segment(bool hhh){
  switch(segm){                                                                 
    case 0: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,1);ch(H_SEG,hhh);break;// 0
    case 1: ch(A_SEG,1);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,hhh);break;// 1
    case 2: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,1);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,1);ch(G_SEG,0);ch(H_SEG,hhh);break;// 2
    case 3: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,0);ch(H_SEG,hhh);break;// 3
    case 4: ch(A_SEG,1);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// 4
    case 5: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,1);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// 5   
    case 6: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// 6 
    case 7: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,hhh);break;// 7 
    case 8: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// 8
    case 9: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,1);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// 9
    case 10: ch(A_SEG,1);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,1);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// Н
    case 11: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,0);ch(H_SEG,hhh);break;// -
    case 12: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,hhh);break;// пусто
    case 13: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// * градус
    case 14: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,1);ch(H_SEG,hhh);break;// C
    case 15: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,1);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// S
    case 16: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// E
    case 17: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// t
    case 18: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// P
    
    
  }} 

void dn(bool ind_bud){
  switch(segm_dn){                                                               
    case 1: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// ПН
    case 2: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,0);break;// ВТ
    case 3: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,0);ch(G_SEG,1);ch(H_SEG,1);break;// СР
    case 4: ch(A_SEG,1);ch(B_SEG,0);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// ЧТ   
    case 5: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,0);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// ПТ 
    case 6: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,0);ch(H_SEG,1);break;// СБ 
    case 7: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,0);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// ВС
    case 12: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// пусто
  }}

void tic(){
  switch(s_tic){                                                             
    case 0: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// _
    case 1: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,0);break;// :
  }}     

void setka(){
  switch(c){                                                             
    case 0:ch(C1_SET,0);ch(C2_SET,1);ch(C3_SET,1);ch(C4_SET,1);ch(C5_SET,1);ch(C6_SET,1);break; 
    case 1:ch(C1_SET,1);ch(C2_SET,0);ch(C3_SET,1);ch(C4_SET,1);ch(C5_SET,1);ch(C6_SET,1);break; 
    case 2:ch(C1_SET,1);ch(C2_SET,1);ch(C3_SET,0);ch(C4_SET,1);ch(C5_SET,1);ch(C6_SET,1);break; 
    case 3:ch(C1_SET,1);ch(C2_SET,1);ch(C3_SET,1);ch(C4_SET,0);ch(C5_SET,1);ch(C6_SET,1);break; 
    case 4:ch(C1_SET,1);ch(C2_SET,1);ch(C3_SET,1);ch(C4_SET,1);ch(C5_SET,0);ch(C6_SET,1);break; 
    case 5:ch(C1_SET,1);ch(C2_SET,1);ch(C3_SET,1);ch(C4_SET,1);ch(C5_SET,1);ch(C6_SET,0);break; 
  }} 

void ch(int pin, int logic){digitalWrite(pin,logic);}

void mig_dv(){if(millis()-times_0<=500){s_tic = 0;}if(millis()-times_0>500){s_tic = 1;}if(millis()-times_0>1000){times_0=millis();}}
void timm(){times = hh*100+mm;a[0]=times/1000;a[1]=times/100%10;a[2]=times/10%10;a[3]=times%10;}  

116

Re: Часы+будильник на П543 (ИЛЦ5-4/7М)

Добавил дату, месяц и год

// Подключение сетки
#define  C1_SET  0
#define  C2_SET  1
#define  C3_SET  2
#define  C4_SET  3
#define  C5_SET  4
#define  C6_SET  5
// Подключение сегменты-аноды
#define  A_SEG   6
#define  B_SEG   7
#define  C_SEG   8
#define  D_SEG   9
#define  E_SEG  10
#define  F_SEG  11
#define  G_SEG  12
#define  H_SEG  13
// Кнопки
#define  PROG   A0  // ПРОГ
#define  UP     A1  // ПЛЮС
#define  DW     A2  // МИНУС

#include <MsTimer2.h>   // // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip  
#include <Wire.h>
#include <EEPROM.h>
#include <DS3231.h> //https://github.com/jarzebski/Arduino-DS3231/archive/master.zip
#include <SHT21.h>  // http://rcl-radio.ru/wp-content/uploads/2025/03/SHT21-Arduino-Library-master.zip
DS3231 clock;
RTCDateTime DateTime;
SHT21 sht; 

int i,segm,c,segm_dn, ss,mm,hh,dd,mon,gg,wesk,times;
int a[4],s_tic, bud,kolorol, prog, timers;
int fff;
unsigned long times_0, times_1, times_2,times_3;
int temp,humidity;
bool avto,w;
int brig = 500;
int set_time, set_time_prog, gg_reg, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg;


void setup(){
MsTimer2::set(4, to_Timer);MsTimer2::start(); // timer2 period 4 ms
pinMode(C1_SET,OUTPUT); pinMode(C2_SET,OUTPUT);pinMode(C3_SET,OUTPUT);
pinMode(C4_SET,OUTPUT);pinMode(C5_SET,OUTPUT);pinMode(C6_SET,OUTPUT);
pinMode(A_SEG,OUTPUT); pinMode(B_SEG,OUTPUT);pinMode(C_SEG,OUTPUT);
pinMode(D_SEG,OUTPUT);pinMode(E_SEG,OUTPUT);pinMode(F_SEG,OUTPUT);
pinMode(G_SEG,OUTPUT);pinMode(H_SEG,OUTPUT);
pinMode(PROG,INPUT_PULLUP);pinMode(UP,INPUT_PULLUP);pinMode(DW,INPUT_PULLUP);  
Wire.begin();clock.begin();
if(EEPROM.read(100)!=0){for(int i=0;i<101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении  
avto = EEPROM.read(0);
// clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
  }

void loop(){
  if(set_time==0){
  // управление режимом авто
  if(digitalRead(PROG)==LOW && digitalRead(UP)==HIGH && digitalRead(DW)==HIGH && avto==0){avto=1;timers=1;EEPROM.update(0,avto);delay(200);}
  if(digitalRead(PROG)==LOW && digitalRead(UP)==HIGH && digitalRead(DW)==HIGH && avto==1){avto=0;timers=0;EEPROM.update(0,avto);delay(200);}
  // основное меню настройки часов, установка времени
  if(digitalRead(PROG)==LOW && digitalRead(UP)==LOW && digitalRead(DW)==HIGH){set_time=1;a[0]=15;a[1]=16;a[2]=17;a[3]=1;delay(2000);}
  }
  
  
  DateTime=clock.getDateTime();// опрос времени
  ss = DateTime.second;        // секунды
  mm = DateTime.minute;        // минуты
  hh = DateTime.hour;          // часы
  dd = DateTime.day;           // дата
  mon = DateTime.month;        // месяц
  gg = DateTime.year;          // Год
  if(ss<=10 && avto==1){wesk = 12;}
   else{wesk = DateTime.dayOfWeek;}   // День недели (1 - воскресенье, 7 - суббота)

  temp = sht.getTemperature();  // Температура
  humidity = sht.getHumidity(); // Влажность
  

  gg_reg = gg;
  mon_reg = mon;
  dd_reg = dd;
  hh_reg = hh;
  mm_reg = mm;
  ss_reg = ss;

if(set_time==1){
    if(digitalRead(PROG)==LOW){set_time_prog++;if(set_time_prog>5){set_time_prog=0;set_time=0;}delay(200);}
    if(set_time_prog==0 && (digitalRead(UP)==LOW || digitalRead(DW)==LOW)){ss_reg = 0;clock.setDateTime(gg_reg+2000, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==0){a[0]=18;a[1]=0;a[2]=ss_reg/10;a[3]=ss_reg%10;}
    
    if(set_time_prog==1 && digitalRead(UP)==LOW){mm_reg ++;if(mm_reg>59){mm_reg=59;}clock.setDateTime(gg_reg+2000, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==1 && digitalRead(DW)==LOW){mm_reg --;if(mm_reg<0){mm_reg=0;}clock.setDateTime(gg_reg+2000, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==1){a[0]=18;a[1]=1;a[2]=mm_reg/10;a[3]=mm_reg%10;}

    if(set_time_prog==2 && digitalRead(UP)==LOW){hh_reg ++;if(hh_reg>23){hh_reg=23;}clock.setDateTime(gg_reg+2000, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==2 && digitalRead(DW)==LOW){hh_reg --;if(hh_reg<0){hh_reg=0;}clock.setDateTime(gg_reg+2000, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==2){a[0]=18;a[1]=2;a[2]=hh_reg/10;a[3]=hh_reg%10;}

    if(set_time_prog==3 && digitalRead(UP)==LOW){dd_reg ++;if(dd_reg>31){dd_reg=31;}clock.setDateTime(gg_reg+2000, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==3 && digitalRead(DW)==LOW){dd_reg --;if(dd_reg<1){dd_reg=1;}clock.setDateTime(gg_reg+2000, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==3){a[0]=18;a[1]=3;a[2]=dd_reg/10;a[3]=dd_reg%10;}

    if(set_time_prog==4 && digitalRead(UP)==LOW){mon_reg ++;if(mon_reg>12){mon_reg=12;}clock.setDateTime(gg_reg+2000, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==4 && digitalRead(DW)==LOW){mon_reg --;if(mon_reg<1){mon_reg=1;}clock.setDateTime(gg_reg+2000, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==4){a[0]=18;a[1]=4;a[2]=mon_reg/10;a[3]=mon_reg%10;}

    if(set_time_prog==5 && digitalRead(UP)==LOW){gg_reg ++;if(gg_reg>99){mon_reg=99;}clock.setDateTime(gg_reg+2000, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==5 && digitalRead(DW)==LOW){gg_reg --;if(gg_reg<25){mon_reg=25;}clock.setDateTime(gg_reg+2000, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==5){a[0]=18;a[1]=5;a[2]=gg_reg/10;a[3]=gg_reg%10;}
    }


  


if(set_time==0){
  // мигание двоеточия
  if(avto==1){if(ss>10){mig_dv();}else{s_tic = 0;}} else{mig_dv();}

  bud = 1;     // значок будильника
  kolorol = 1; // значок колокольчик
  prog = 1;    // надпись ПРОГ

  if(avto==1){
  if(ss < 5){ a[0]=temp/10;a[1]=temp%10;a[2]=13;a[3]=14;} // вывод темпер.
  if(ss >= 5 && ss <=10){ a[0]=10;a[1]=11;a[2]=humidity/10;a[3]=humidity%10;} // вывод влажн.
  if(ss > 10){timm();} // вывод время
  }else{timm();} // если авто = 0, то выводить только время
} // set_time == 0


  delay(100);

  } 


void to_Timer(){ 
    switch(i){
    case 0:  segm=12; setka();segment(1); delayMicroseconds(brig); segm_dn=wesk; c=5;  setka();dn(bud); break;
    case 1:  segm=12; setka();segment(1); delayMicroseconds(brig); segm=a[0];    c=4;  setka();segment(1); break;
    case 2:  segm=12; setka();segment(1); delayMicroseconds(brig); segm=a[1];    c=3;  setka();segment(kolorol); break;
    case 3:  segm=12; setka();segment(1); delayMicroseconds(brig); segm=s_tic;   c=2;  setka();tic(); break;
    case 4:  segm=12; setka();segment(1); delayMicroseconds(brig); segm=a[2];    c=1;  setka();segment(prog); break;
    case 5:  segm=12; setka();segment(1); delayMicroseconds(brig); segm=a[3];    c=0;  setka();segment(timers); break;
  }i++;if(i>5){i=0;}}

void segment(bool hhh){
  switch(segm){                                                                 
    case 0: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,1);ch(H_SEG,hhh);break;// 0
    case 1: ch(A_SEG,1);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,hhh);break;// 1
    case 2: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,1);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,1);ch(G_SEG,0);ch(H_SEG,hhh);break;// 2
    case 3: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,0);ch(H_SEG,hhh);break;// 3
    case 4: ch(A_SEG,1);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// 4
    case 5: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,1);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// 5   
    case 6: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// 6 
    case 7: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,hhh);break;// 7 
    case 8: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// 8
    case 9: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,1);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// 9
    case 10: ch(A_SEG,1);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,1);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// Н
    case 11: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,0);ch(H_SEG,hhh);break;// -
    case 12: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,hhh);break;// пусто
    case 13: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// * градус
    case 14: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,1);ch(H_SEG,hhh);break;// C
    case 15: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,1);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// S
    case 16: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// E
    case 17: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// t
    case 18: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// P
    
    
  }} 

void dn(bool ind_bud){
  switch(segm_dn){                                                               
    case 1: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// ПН
    case 2: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,0);break;// ВТ
    case 3: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,0);ch(G_SEG,1);ch(H_SEG,1);break;// СР
    case 4: ch(A_SEG,1);ch(B_SEG,0);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// ЧТ   
    case 5: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,0);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// ПТ 
    case 6: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,0);ch(H_SEG,1);break;// СБ 
    case 7: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,0);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// ВС
    case 12: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// пусто
  }}

void tic(){
  switch(s_tic){                                                             
    case 0: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// _
    case 1: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,0);break;// :
  }}     

void setka(){
  switch(c){                                                             
    case 0:ch(C1_SET,0);ch(C2_SET,1);ch(C3_SET,1);ch(C4_SET,1);ch(C5_SET,1);ch(C6_SET,1);break; 
    case 1:ch(C1_SET,1);ch(C2_SET,0);ch(C3_SET,1);ch(C4_SET,1);ch(C5_SET,1);ch(C6_SET,1);break; 
    case 2:ch(C1_SET,1);ch(C2_SET,1);ch(C3_SET,0);ch(C4_SET,1);ch(C5_SET,1);ch(C6_SET,1);break; 
    case 3:ch(C1_SET,1);ch(C2_SET,1);ch(C3_SET,1);ch(C4_SET,0);ch(C5_SET,1);ch(C6_SET,1);break; 
    case 4:ch(C1_SET,1);ch(C2_SET,1);ch(C3_SET,1);ch(C4_SET,1);ch(C5_SET,0);ch(C6_SET,1);break; 
    case 5:ch(C1_SET,1);ch(C2_SET,1);ch(C3_SET,1);ch(C4_SET,1);ch(C5_SET,1);ch(C6_SET,0);break; 
  }} 

void ch(int pin, int logic){digitalWrite(pin,logic);}

void mig_dv(){if(millis()-times_0<=500){s_tic = 0;}if(millis()-times_0>500){s_tic = 1;}if(millis()-times_0>1000){times_0=millis();}}
void timm(){times = hh*100+mm;a[0]=times/1000;a[1]=times/100%10;a[2]=times/10%10;a[3]=times%10;}  

117

Re: Часы+будильник на П543 (ИЛЦ5-4/7М)

предпоследний скетч.
https://cloud.mail.ru/public/fLQb/LBCWM827o

118

Re: Часы+будильник на П543 (ИЛЦ5-4/7М)

Укажите пожалуйста, под каким номером P дата-месяц-год. день я думаю установиться автоматически. или?!

119

Re: Часы+будильник на П543 (ИЛЦ5-4/7М)

3 - дата
4 - месяц
5 - год , а вот с годом могут быть проблемы,я пока не знаю что отправлять в часы реального времени 25 или 2025, пока отправляю 2025

если дата месяц и год верные должно показывать правильный день недели

120

Re: Часы+будильник на П543 (ИЛЦ5-4/7М)

https://cloud.mail.ru/public/fLQb/LBCWM827o вот

121

Re: Часы+будильник на П543 (ИЛЦ5-4/7М)

Сейчас год должен работать

// Подключение сетки
#define  C1_SET  0
#define  C2_SET  1
#define  C3_SET  2
#define  C4_SET  3
#define  C5_SET  4
#define  C6_SET  5
// Подключение сегменты-аноды
#define  A_SEG   6
#define  B_SEG   7
#define  C_SEG   8
#define  D_SEG   9
#define  E_SEG  10
#define  F_SEG  11
#define  G_SEG  12
#define  H_SEG  13
// Кнопки
#define  PROG   A0  // ПРОГ
#define  UP     A1  // ПЛЮС
#define  DW     A2  // МИНУС

#include <MsTimer2.h>   // // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip  
#include <Wire.h>
#include <EEPROM.h>
#include <DS3231.h> //https://github.com/jarzebski/Arduino-DS3231/archive/master.zip
#include <SHT21.h>  // http://rcl-radio.ru/wp-content/uploads/2025/03/SHT21-Arduino-Library-master.zip
DS3231 clock;
RTCDateTime DateTime;
SHT21 sht; 

int i,segm,c,segm_dn, ss,mm,hh,dd,mon,gg,wesk,times;
int a[4],s_tic, bud,kolorol, prog, timers;
int fff;
unsigned long times_0, times_1, times_2,times_3;
int temp,humidity;
bool avto,w;
int brig = 500;
int set_time, set_time_prog, gg_reg, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg;


void setup(){
MsTimer2::set(4, to_Timer);MsTimer2::start(); // timer2 period 4 ms
pinMode(C1_SET,OUTPUT); pinMode(C2_SET,OUTPUT);pinMode(C3_SET,OUTPUT);
pinMode(C4_SET,OUTPUT);pinMode(C5_SET,OUTPUT);pinMode(C6_SET,OUTPUT);
pinMode(A_SEG,OUTPUT); pinMode(B_SEG,OUTPUT);pinMode(C_SEG,OUTPUT);
pinMode(D_SEG,OUTPUT);pinMode(E_SEG,OUTPUT);pinMode(F_SEG,OUTPUT);
pinMode(G_SEG,OUTPUT);pinMode(H_SEG,OUTPUT);
pinMode(PROG,INPUT_PULLUP);pinMode(UP,INPUT_PULLUP);pinMode(DW,INPUT_PULLUP);  
Wire.begin();clock.begin();
if(EEPROM.read(100)!=0){for(int i=0;i<101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении  
avto = EEPROM.read(0);
// clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
  }

void loop(){
  if(set_time==0){
  // управление режимом авто
  if(digitalRead(PROG)==LOW && digitalRead(UP)==HIGH && digitalRead(DW)==HIGH && avto==0){avto=1;timers=1;EEPROM.update(0,avto);delay(200);}
  if(digitalRead(PROG)==LOW && digitalRead(UP)==HIGH && digitalRead(DW)==HIGH && avto==1){avto=0;timers=0;EEPROM.update(0,avto);delay(200);}
  // основное меню настройки часов, установка времени
  if(digitalRead(PROG)==LOW && digitalRead(UP)==LOW && digitalRead(DW)==HIGH){set_time=1;a[0]=15;a[1]=16;a[2]=17;a[3]=1;delay(2000);}
  }
  
  
  DateTime=clock.getDateTime();// опрос времени
  ss = DateTime.second;        // секунды
  mm = DateTime.minute;        // минуты
  hh = DateTime.hour;          // часы
  dd = DateTime.day;           // дата
  mon = DateTime.month;        // месяц
  gg = DateTime.year;          // Год
  if(ss<=10 && avto==1){wesk = 12;}
   else{wesk = DateTime.dayOfWeek;}   // День недели (1 - воскресенье, 7 - суббота)

  temp = sht.getTemperature();  // Температура
  humidity = sht.getHumidity(); // Влажность
  

  gg_reg = gg-2000;
  mon_reg = mon;
  dd_reg = dd;
  hh_reg = hh;
  mm_reg = mm;
  ss_reg = ss;

if(set_time==1){
    if(digitalRead(PROG)==LOW){set_time_prog++;if(set_time_prog>5){set_time_prog=0;set_time=0;}delay(200);}
    if(set_time_prog==0 && (digitalRead(UP)==LOW || digitalRead(DW)==LOW)){ss_reg = 0;clock.setDateTime(gg_reg+2000, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==0){a[0]=18;a[1]=0;a[2]=ss_reg/10;a[3]=ss_reg%10;}
    
    if(set_time_prog==1 && digitalRead(UP)==LOW){mm_reg ++;if(mm_reg>59){mm_reg=59;}clock.setDateTime(gg_reg+2000, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==1 && digitalRead(DW)==LOW){mm_reg --;if(mm_reg<0){mm_reg=0;}clock.setDateTime(gg_reg+2000, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==1){a[0]=18;a[1]=1;a[2]=mm_reg/10;a[3]=mm_reg%10;}

    if(set_time_prog==2 && digitalRead(UP)==LOW){hh_reg ++;if(hh_reg>23){hh_reg=23;}clock.setDateTime(gg_reg+2000, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==2 && digitalRead(DW)==LOW){hh_reg --;if(hh_reg<0){hh_reg=0;}clock.setDateTime(gg_reg+2000, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==2){a[0]=18;a[1]=2;a[2]=hh_reg/10;a[3]=hh_reg%10;}

    if(set_time_prog==3 && digitalRead(UP)==LOW){dd_reg ++;if(dd_reg>31){dd_reg=31;}clock.setDateTime(gg_reg+2000, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==3 && digitalRead(DW)==LOW){dd_reg --;if(dd_reg<1){dd_reg=1;}clock.setDateTime(gg_reg+2000, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==3){a[0]=18;a[1]=3;a[2]=dd_reg/10;a[3]=dd_reg%10;}

    if(set_time_prog==4 && digitalRead(UP)==LOW){mon_reg ++;if(mon_reg>12){mon_reg=12;}clock.setDateTime(gg_reg+2000, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==4 && digitalRead(DW)==LOW){mon_reg --;if(mon_reg<1){mon_reg=1;}clock.setDateTime(gg_reg+2000, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==4){a[0]=18;a[1]=4;a[2]=mon_reg/10;a[3]=mon_reg%10;}

    if(set_time_prog==5 && digitalRead(UP)==LOW){gg_reg ++;if(gg_reg>99){mon_reg=99;}clock.setDateTime(gg_reg+2000, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==5 && digitalRead(DW)==LOW){gg_reg --;if(gg_reg<25){mon_reg=25;}clock.setDateTime(gg_reg+2000, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==5){a[0]=18;a[1]=5;a[2]=gg_reg/10;a[3]=gg_reg%10;}
    }


  


if(set_time==0){
  // мигание двоеточия
  if(avto==1){if(ss>10){mig_dv();}else{s_tic = 0;}} else{mig_dv();}

  bud = 1;     // значок будильника
  kolorol = 1; // значок колокольчик
  prog = 1;    // надпись ПРОГ

  if(avto==1){
  if(ss < 5){ a[0]=temp/10;a[1]=temp%10;a[2]=13;a[3]=14;} // вывод темпер.
  if(ss >= 5 && ss <=10){ a[0]=10;a[1]=11;a[2]=humidity/10;a[3]=humidity%10;} // вывод влажн.
  if(ss > 10){timm();} // вывод время
  }else{timm();} // если авто = 0, то выводить только время
} // set_time == 0


  delay(100);

  } 


void to_Timer(){ 
    switch(i){
    case 0:  segm=12; setka();segment(1); delayMicroseconds(brig); segm_dn=wesk; c=5;  setka();dn(bud); break;
    case 1:  segm=12; setka();segment(1); delayMicroseconds(brig); segm=a[0];    c=4;  setka();segment(1); break;
    case 2:  segm=12; setka();segment(1); delayMicroseconds(brig); segm=a[1];    c=3;  setka();segment(kolorol); break;
    case 3:  segm=12; setka();segment(1); delayMicroseconds(brig); segm=s_tic;   c=2;  setka();tic(); break;
    case 4:  segm=12; setka();segment(1); delayMicroseconds(brig); segm=a[2];    c=1;  setka();segment(prog); break;
    case 5:  segm=12; setka();segment(1); delayMicroseconds(brig); segm=a[3];    c=0;  setka();segment(timers); break;
  }i++;if(i>5){i=0;}}

void segment(bool hhh){
  switch(segm){                                                                 
    case 0: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,1);ch(H_SEG,hhh);break;// 0
    case 1: ch(A_SEG,1);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,hhh);break;// 1
    case 2: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,1);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,1);ch(G_SEG,0);ch(H_SEG,hhh);break;// 2
    case 3: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,0);ch(H_SEG,hhh);break;// 3
    case 4: ch(A_SEG,1);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// 4
    case 5: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,1);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// 5   
    case 6: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// 6 
    case 7: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,hhh);break;// 7 
    case 8: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// 8
    case 9: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,1);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// 9
    case 10: ch(A_SEG,1);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,1);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// Н
    case 11: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,0);ch(H_SEG,hhh);break;// -
    case 12: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,hhh);break;// пусто
    case 13: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// * градус
    case 14: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,1);ch(H_SEG,hhh);break;// C
    case 15: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,1);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// S
    case 16: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// E
    case 17: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// t
    case 18: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// P
    
    
  }} 

void dn(bool ind_bud){
  switch(segm_dn){                                                               
    case 1: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// ПН
    case 2: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,0);break;// ВТ
    case 3: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,0);ch(G_SEG,1);ch(H_SEG,1);break;// СР
    case 4: ch(A_SEG,1);ch(B_SEG,0);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// ЧТ   
    case 5: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,0);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// ПТ 
    case 6: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,0);ch(H_SEG,1);break;// СБ 
    case 7: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,0);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// ВС
    case 12: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// пусто
  }}

void tic(){
  switch(s_tic){                                                             
    case 0: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// _
    case 1: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,0);break;// :
  }}     

void setka(){
  switch(c){                                                             
    case 0:ch(C1_SET,0);ch(C2_SET,1);ch(C3_SET,1);ch(C4_SET,1);ch(C5_SET,1);ch(C6_SET,1);break; 
    case 1:ch(C1_SET,1);ch(C2_SET,0);ch(C3_SET,1);ch(C4_SET,1);ch(C5_SET,1);ch(C6_SET,1);break; 
    case 2:ch(C1_SET,1);ch(C2_SET,1);ch(C3_SET,0);ch(C4_SET,1);ch(C5_SET,1);ch(C6_SET,1);break; 
    case 3:ch(C1_SET,1);ch(C2_SET,1);ch(C3_SET,1);ch(C4_SET,0);ch(C5_SET,1);ch(C6_SET,1);break; 
    case 4:ch(C1_SET,1);ch(C2_SET,1);ch(C3_SET,1);ch(C4_SET,1);ch(C5_SET,0);ch(C6_SET,1);break; 
    case 5:ch(C1_SET,1);ch(C2_SET,1);ch(C3_SET,1);ch(C4_SET,1);ch(C5_SET,1);ch(C6_SET,0);break; 
  }} 

void ch(int pin, int logic){digitalWrite(pin,logic);}

void mig_dv(){if(millis()-times_0<=500){s_tic = 0;}if(millis()-times_0>500){s_tic = 1;}if(millis()-times_0>1000){times_0=millis();}}
void timm(){times = hh*100+mm;a[0]=times/1000;a[1]=times/100%10;a[2]=times/10%10;a[3]=times%10;}  

122

Re: Часы+будильник на П543 (ИЛЦ5-4/7М)

Выход из меню по времени я убрал, если нажать кнопку ПРОГ после меню Р5, то должен быть выход в часы

123

Re: Часы+будильник на П543 (ИЛЦ5-4/7М)

Вроде все работает. )) Спасибо

124

Re: Часы+будильник на П543 (ИЛЦ5-4/7М)

Еще один маленький тест, в режиме установки времени должен светится значок ПРГ, а в режиме часов не должен светится

// Подключение сетки
#define  C1_SET  0
#define  C2_SET  1
#define  C3_SET  2
#define  C4_SET  3
#define  C5_SET  4
#define  C6_SET  5
// Подключение сегменты-аноды
#define  A_SEG   6
#define  B_SEG   7
#define  C_SEG   8
#define  D_SEG   9
#define  E_SEG  10
#define  F_SEG  11
#define  G_SEG  12
#define  H_SEG  13
// Кнопки
#define  PROG   A0  // ПРОГ
#define  UP     A1  // ПЛЮС
#define  DW     A2  // МИНУС

#include <MsTimer2.h>   // // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip  
#include <Wire.h>
#include <EEPROM.h>
#include <DS3231.h> //https://github.com/jarzebski/Arduino-DS3231/archive/master.zip
#include <SHT21.h>  // http://rcl-radio.ru/wp-content/uploads/2025/03/SHT21-Arduino-Library-master.zip
DS3231 clock;
RTCDateTime DateTime;
SHT21 sht; 

int i,segm,c,segm_dn, ss,mm,hh,dd,mon,gg,wesk,times;
int a[4],s_tic, bud,kolorol, prog, timers;
int fff;
unsigned long times_0, times_1, times_2,times_3;
int temp,humidity;
bool avto,w;
int brig = 500;
int set_time, set_time_prog, gg_reg, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg;


void setup(){
MsTimer2::set(4, to_Timer);MsTimer2::start(); // timer2 period 4 ms
pinMode(C1_SET,OUTPUT); pinMode(C2_SET,OUTPUT);pinMode(C3_SET,OUTPUT);
pinMode(C4_SET,OUTPUT);pinMode(C5_SET,OUTPUT);pinMode(C6_SET,OUTPUT);
pinMode(A_SEG,OUTPUT); pinMode(B_SEG,OUTPUT);pinMode(C_SEG,OUTPUT);
pinMode(D_SEG,OUTPUT);pinMode(E_SEG,OUTPUT);pinMode(F_SEG,OUTPUT);
pinMode(G_SEG,OUTPUT);pinMode(H_SEG,OUTPUT);
pinMode(PROG,INPUT_PULLUP);pinMode(UP,INPUT_PULLUP);pinMode(DW,INPUT_PULLUP);  
Wire.begin();clock.begin();
if(EEPROM.read(100)!=0){for(int i=0;i<101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении  
avto = EEPROM.read(0);
// clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
  }

void loop(){
  if(set_time==0){ prog = 1;bud = 1;
  // управление режимом авто
  if(digitalRead(PROG)==LOW && digitalRead(UP)==HIGH && digitalRead(DW)==HIGH && avto==0){avto=1;timers=1;EEPROM.update(0,avto);delay(200);}
  if(digitalRead(PROG)==LOW && digitalRead(UP)==HIGH && digitalRead(DW)==HIGH && avto==1){avto=0;timers=0;EEPROM.update(0,avto);delay(200);}
  // основное меню настройки часов, установка времени
  if(digitalRead(PROG)==LOW && digitalRead(UP)==LOW && digitalRead(DW)==HIGH){set_time=1;a[0]=15;a[1]=16;a[2]=17;a[3]=1;delay(2000);}
  }

  
  
  
  DateTime=clock.getDateTime();// опрос времени
  ss = DateTime.second;        // секунды
  mm = DateTime.minute;        // минуты
  hh = DateTime.hour;          // часы
  dd = DateTime.day;           // дата
  mon = DateTime.month;        // месяц
  gg = DateTime.year;          // Год
  if(ss<=10 && avto==1){wesk = 12;}
   else{wesk = DateTime.dayOfWeek;}   // День недели (1 - воскресенье, 7 - суббота)

  temp = sht.getTemperature();  // Температура
  humidity = sht.getHumidity(); // Влажность
  

  gg_reg = gg-2000;
  mon_reg = mon;
  dd_reg = dd;
  hh_reg = hh;
  mm_reg = mm;
  ss_reg = ss;

if(set_time==1){ prog = 0; bud = 1;
    if(digitalRead(PROG)==LOW){set_time_prog++;if(set_time_prog>5){set_time_prog=0;set_time=0;}delay(200);}
    if(set_time_prog==0 && (digitalRead(UP)==LOW || digitalRead(DW)==LOW)){ss_reg = 0;clock.setDateTime(gg_reg+2000, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==0){a[0]=18;a[1]=0;a[2]=ss_reg/10;a[3]=ss_reg%10;}
    
    if(set_time_prog==1 && digitalRead(UP)==LOW){mm_reg ++;if(mm_reg>59){mm_reg=59;}clock.setDateTime(gg_reg+2000, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==1 && digitalRead(DW)==LOW){mm_reg --;if(mm_reg<0){mm_reg=0;}clock.setDateTime(gg_reg+2000, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==1){a[0]=18;a[1]=1;a[2]=mm_reg/10;a[3]=mm_reg%10;}

    if(set_time_prog==2 && digitalRead(UP)==LOW){hh_reg ++;if(hh_reg>23){hh_reg=23;}clock.setDateTime(gg_reg+2000, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==2 && digitalRead(DW)==LOW){hh_reg --;if(hh_reg<0){hh_reg=0;}clock.setDateTime(gg_reg+2000, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==2){a[0]=18;a[1]=2;a[2]=hh_reg/10;a[3]=hh_reg%10;}

    if(set_time_prog==3 && digitalRead(UP)==LOW){dd_reg ++;if(dd_reg>31){dd_reg=31;}clock.setDateTime(gg_reg+2000, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==3 && digitalRead(DW)==LOW){dd_reg --;if(dd_reg<1){dd_reg=1;}clock.setDateTime(gg_reg+2000, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==3){a[0]=18;a[1]=3;a[2]=dd_reg/10;a[3]=dd_reg%10;}

    if(set_time_prog==4 && digitalRead(UP)==LOW){mon_reg ++;if(mon_reg>12){mon_reg=12;}clock.setDateTime(gg_reg+2000, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==4 && digitalRead(DW)==LOW){mon_reg --;if(mon_reg<1){mon_reg=1;}clock.setDateTime(gg_reg+2000, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==4){a[0]=18;a[1]=4;a[2]=mon_reg/10;a[3]=mon_reg%10;}

    if(set_time_prog==5 && digitalRead(UP)==LOW){gg_reg ++;if(gg_reg>99){mon_reg=99;}clock.setDateTime(gg_reg+2000, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==5 && digitalRead(DW)==LOW){gg_reg --;if(gg_reg<25){mon_reg=25;}clock.setDateTime(gg_reg+2000, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg);delay(100);}
    if(set_time_prog==5){a[0]=18;a[1]=5;a[2]=gg_reg/10;a[3]=gg_reg%10;}
    }


  


if(set_time==0){
  // мигание двоеточия
  if(avto==1){if(ss>10){mig_dv();}else{s_tic = 0;}} else{mig_dv();}


  kolorol = 1; // значок колокольчик


  if(avto==1){
  if(ss < 5){ a[0]=temp/10;a[1]=temp%10;a[2]=13;a[3]=14;} // вывод темпер.
  if(ss >= 5 && ss <=10){ a[0]=10;a[1]=11;a[2]=humidity/10;a[3]=humidity%10;} // вывод влажн.
  if(ss > 10){timm();} // вывод время
  }else{timm();} // если авто = 0, то выводить только время
} // set_time == 0


  delay(100);

  } 


void to_Timer(){ 
    switch(i){
    case 0:  segm=12; setka();segment(1); delayMicroseconds(brig); segm_dn=wesk; c=5;  setka();dn(bud); break;
    case 1:  segm=12; setka();segment(1); delayMicroseconds(brig); segm=a[0];    c=4;  setka();segment(1); break;
    case 2:  segm=12; setka();segment(1); delayMicroseconds(brig); segm=a[1];    c=3;  setka();segment(kolorol); break;
    case 3:  segm=12; setka();segment(1); delayMicroseconds(brig); segm=s_tic;   c=2;  setka();tic(); break;
    case 4:  segm=12; setka();segment(1); delayMicroseconds(brig); segm=a[2];    c=1;  setka();segment(prog); break;
    case 5:  segm=12; setka();segment(1); delayMicroseconds(brig); segm=a[3];    c=0;  setka();segment(timers); break;
  }i++;if(i>5){i=0;}}

void segment(bool hhh){
  switch(segm){                                                                 
    case 0: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,1);ch(H_SEG,hhh);break;// 0
    case 1: ch(A_SEG,1);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,hhh);break;// 1
    case 2: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,1);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,1);ch(G_SEG,0);ch(H_SEG,hhh);break;// 2
    case 3: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,0);ch(H_SEG,hhh);break;// 3
    case 4: ch(A_SEG,1);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// 4
    case 5: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,1);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// 5   
    case 6: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// 6 
    case 7: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,hhh);break;// 7 
    case 8: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// 8
    case 9: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,1);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// 9
    case 10: ch(A_SEG,1);ch(B_SEG,0);ch(C_SEG,0);ch(D_SEG,1);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// Н
    case 11: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,0);ch(H_SEG,hhh);break;// -
    case 12: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,hhh);break;// пусто
    case 13: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// * градус
    case 14: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,1);ch(H_SEG,hhh);break;// C
    case 15: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,0);ch(D_SEG,0);ch(E_SEG,1);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// S
    case 16: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// E
    case 17: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,0);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// t
    case 18: ch(A_SEG,0);ch(B_SEG,0);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,0);ch(F_SEG,0);ch(G_SEG,0);ch(H_SEG,hhh);break;// P
    
    
  }} 

void dn(bool ind_bud){
  switch(segm_dn){                                                               
    case 1: ch(A_SEG,0);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// ПН
    case 2: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,0);break;// ВТ
    case 3: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,0);ch(G_SEG,1);ch(H_SEG,1);break;// СР
    case 4: ch(A_SEG,1);ch(B_SEG,0);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// ЧТ   
    case 5: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,0);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// ПТ 
    case 6: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,0);ch(H_SEG,1);break;// СБ 
    case 7: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,0);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// ВС
    case 12: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,ind_bud);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// пусто
  }}

void tic(){
  switch(s_tic){                                                             
    case 0: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,1);break;// _
    case 1: ch(A_SEG,1);ch(B_SEG,1);ch(C_SEG,1);ch(D_SEG,1);ch(E_SEG,1);ch(F_SEG,1);ch(G_SEG,1);ch(H_SEG,0);break;// :
  }}     

void setka(){
  switch(c){                                                             
    case 0:ch(C1_SET,0);ch(C2_SET,1);ch(C3_SET,1);ch(C4_SET,1);ch(C5_SET,1);ch(C6_SET,1);break; 
    case 1:ch(C1_SET,1);ch(C2_SET,0);ch(C3_SET,1);ch(C4_SET,1);ch(C5_SET,1);ch(C6_SET,1);break; 
    case 2:ch(C1_SET,1);ch(C2_SET,1);ch(C3_SET,0);ch(C4_SET,1);ch(C5_SET,1);ch(C6_SET,1);break; 
    case 3:ch(C1_SET,1);ch(C2_SET,1);ch(C3_SET,1);ch(C4_SET,0);ch(C5_SET,1);ch(C6_SET,1);break; 
    case 4:ch(C1_SET,1);ch(C2_SET,1);ch(C3_SET,1);ch(C4_SET,1);ch(C5_SET,0);ch(C6_SET,1);break; 
    case 5:ch(C1_SET,1);ch(C2_SET,1);ch(C3_SET,1);ch(C4_SET,1);ch(C5_SET,1);ch(C6_SET,0);break; 
  }} 

void ch(int pin, int logic){digitalWrite(pin,logic);}

void mig_dv(){if(millis()-times_0<=500){s_tic = 0;}if(millis()-times_0>500){s_tic = 1;}if(millis()-times_0>1000){times_0=millis();}}
void timm(){times = hh*100+mm;a[0]=times/1000;a[1]=times/100%10;a[2]=times/10%10;a[3]=times%10;}  

125

Re: Часы+будильник на П543 (ИЛЦ5-4/7М)

Добавлять в меню регулировку времени вывода температуры влажности и даты с месяцем?