Re: Часы+будильник на П543 (ИЛЦ5-4/7М)
В установленное время будильник не сработал. колокольчик можно включить отключить.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
forum.rcl-radio.ru → Тестирование скетчей → Часы+будильник на П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 // МИНУС
// Активный зуммер
#define BUZZER A3
#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,dv_stop, bud_aktiv;
int brig = 500;
int set_time, set_time_prog, gg_reg, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg;
int times_a, times_b, times_c;
int set_time_prog_alarm,alarm_mm, alarm_hh;
bool zumm, zumm_off;
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(BUZZER,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);
times_a = EEPROM.read(1);
times_b = EEPROM.read(2);
times_c = EEPROM.read(3);
alarm_mm = EEPROM.read(10);
alarm_hh = EEPROM.read(11);
// clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
}
void loop(){
if(set_time==0 && zumm == 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);}
// основное меню настройки будильника
if(digitalRead(PROG)==LOW && digitalRead(UP)==HIGH && digitalRead(DW)==LOW){set_time=2;a[0]=15;a[1]=16;a[2]=17;a[3]=2;delay(2000);}
if(digitalRead(UP)==LOW && digitalRead(PROG)==HIGH && digitalRead(DW)==HIGH){kolorol = 0;bud_aktiv=1;delay(200);}
if(digitalRead(DW)==LOW && digitalRead(PROG)==HIGH && digitalRead(UP)==HIGH){kolorol = 1;bud_aktiv=0;delay(200);}
}
DateTime=clock.getDateTime();// опрос времени
ss = DateTime.second; // секунды
mm = DateTime.minute; // минуты
hh = DateTime.hour; // часы
dd = DateTime.day; // дата
mon = DateTime.month; // месяц
gg = DateTime.year; // Год
if(ss<=times_a+times_b+times_c && avto==1){wesk = 12;}
else if(set_time==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;dv_stop = 0;s_tic = 0;
if(digitalRead(PROG)==LOW){set_time_prog++;if(set_time_prog>8){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_prog==6 && digitalRead(UP)==LOW){times_a ++;if(times_a>10){times_a=10;}EEPROM.update(1,times_a);delay(100);}
if(set_time_prog==6 && digitalRead(DW)==LOW){times_a --;if(times_a<0){times_a=0;};EEPROM.update(1,times_a);delay(100);}
if(set_time_prog==6){a[0]=17;a[1]=1;a[2]=times_a/10;a[3]=times_a%10;}
if(set_time_prog==7 && digitalRead(UP)==LOW){times_b ++;if(times_b>10){times_b=10;}EEPROM.update(2,times_b);delay(100);}
if(set_time_prog==7 && digitalRead(DW)==LOW){times_b --;if(times_b<0){times_b=0;};EEPROM.update(2,times_b);delay(100);}
if(set_time_prog==7){a[0]=17;a[1]=2;a[2]=times_b/10;a[3]=times_b%10;}
if(set_time_prog==8 && digitalRead(UP)==LOW){times_c ++;if(times_c>10){times_c=10;}EEPROM.update(3,times_c);delay(100);}
if(set_time_prog==8 && digitalRead(DW)==LOW){times_c --;if(times_c<0){times_c=0;};EEPROM.update(3,times_c);delay(100);}
if(set_time_prog==8){a[0]=17;a[1]=3;a[2]=times_c/10;a[3]=times_c%10;}
}
if(set_time==2){ prog = 1; bud = 0;dv_stop = 0;s_tic = 1;
if(digitalRead(PROG)==LOW){set_time_prog_alarm++;if(set_time_prog_alarm>1){set_time_prog_alarm=0;set_time=0;}delay(200);}
if(set_time_prog_alarm==0 && digitalRead(UP)==LOW){alarm_mm ++;if(alarm_mm>59){alarm_mm=59;}EEPROM.update(10,times_a);delay(100);}
if(set_time_prog_alarm==0 && digitalRead(DW)==LOW){alarm_mm --;if(alarm_mm<0){alarm_mm=0;};EEPROM.update(10,times_a);delay(100);}
if(set_time_prog_alarm==0){a[0]=19;a[1]=0;a[2]=alarm_mm/10;a[3]=alarm_mm%10;}
if(set_time_prog_alarm==1 && digitalRead(UP)==LOW){alarm_hh ++;if(alarm_hh>23){alarm_hh=23;}EEPROM.update(11,times_a);delay(100);}
if(set_time_prog_alarm==1 && digitalRead(DW)==LOW){alarm_hh --;if(alarm_hh<0){alarm_hh=0;};EEPROM.update(11,times_a);delay(100);}
if(set_time_prog_alarm==1){a[0]=19;a[1]=1;a[2]=alarm_hh/10;a[3]=alarm_hh%10;}
}
if(set_time==0){
if(avto==1){
if(ss < times_a){dv_stop = 0;s_tic = 0; a[0]=temp/10;a[1]=temp%10;a[2]=13;a[3]=14;} // вывод темпер.
if(ss >= times_a && ss <=times_a+times_b){dv_stop = 0;s_tic = 0; a[0]=10;a[1]=11;a[2]=humidity/10;a[3]=humidity%10;} // вывод влажн.
if(ss > times_a+times_b && ss <=times_a+times_b+times_c){dv_stop = 0;s_tic = 1; a[0]=dd/10;a[1]=dd%10;a[2]=mon/10;a[3]=mon%10;} // вывод дата месяц.
if(ss > times_a+times_b+times_c){ dv_stop=1;timm();} // вывод время
}else{ dv_stop=1;timm();} // если авто = 0, то выводить только время
// мигание двоеточия
if(dv_stop==1){ mig_dv();}
} // set_time == 0
if( (hh*100+mm == alarm_hh*100+alarm_mm) && bud_aktiv==1 && zumm_off==0){zumm = 1;}else{zumm_off=0;}
if(zumm==1 && (digitalRead(UP)==LOW || digitalRead(DW)==LOW)){zumm=0;zumm_off=1;delay(200);}
if(zumm==1 && zumm_off==0){digitalWrite(BUZZER,HIGH);}
if(zumm==0){digitalWrite(BUZZER,LOW);}
delay(100);
digitalWrite(BUZZER,LOW);
}
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
case 19: ch(A_SEG,0);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;// A
}}
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;}
В устновленное время срабатывает режим авто!! темп-влаж-дата. и т д
колокольчик должен гореть, иначе будильник не будет работать
колокольчик должен гореть, иначе будильник не будет работать
колокольчик горит!
что то он вдруг заработал!! ))
кнопками отключить не получатся. и еще. добовьте, чтобы через 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 // МИНУС
// Активный зуммер
#define BUZZER A3
#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,dv_stop, bud_aktiv;
int brig = 500;
int set_time, set_time_prog, gg_reg, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg;
int times_a, times_b, times_c;
int set_time_prog_alarm,alarm_mm, alarm_hh;
bool zumm=0, zumm_off=0;
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(BUZZER,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);
times_a = EEPROM.read(1);
times_b = EEPROM.read(2);
times_c = EEPROM.read(3);
alarm_mm = EEPROM.read(10);
alarm_hh = EEPROM.read(11);
// clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
}
void loop(){
if(set_time==0 && zumm==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);}
// основное меню настройки будильника
if(digitalRead(PROG)==LOW && digitalRead(UP)==HIGH && digitalRead(DW)==LOW){set_time=2;a[0]=15;a[1]=16;a[2]=17;a[3]=2;delay(2000);}
if(digitalRead(UP)==LOW && digitalRead(PROG)==HIGH && digitalRead(DW)==HIGH){kolorol = 0;bud_aktiv=1;delay(200);}
if(digitalRead(DW)==LOW && digitalRead(PROG)==HIGH && digitalRead(UP)==HIGH){kolorol = 1;bud_aktiv=0;delay(200);}
}
DateTime=clock.getDateTime();// опрос времени
ss = DateTime.second; // секунды
mm = DateTime.minute; // минуты
hh = DateTime.hour; // часы
dd = DateTime.day; // дата
mon = DateTime.month; // месяц
gg = DateTime.year; // Год
if(ss<=times_a+times_b+times_c && avto==1){wesk = 12;}
else if(set_time==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;dv_stop = 0;s_tic = 0;
if(digitalRead(PROG)==LOW){set_time_prog++;if(set_time_prog>8){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_prog==6 && digitalRead(UP)==LOW){times_a ++;if(times_a>10){times_a=10;}EEPROM.update(1,times_a);delay(100);}
if(set_time_prog==6 && digitalRead(DW)==LOW){times_a --;if(times_a<0){times_a=0;};EEPROM.update(1,times_a);delay(100);}
if(set_time_prog==6){a[0]=17;a[1]=1;a[2]=times_a/10;a[3]=times_a%10;}
if(set_time_prog==7 && digitalRead(UP)==LOW){times_b ++;if(times_b>10){times_b=10;}EEPROM.update(2,times_b);delay(100);}
if(set_time_prog==7 && digitalRead(DW)==LOW){times_b --;if(times_b<0){times_b=0;};EEPROM.update(2,times_b);delay(100);}
if(set_time_prog==7){a[0]=17;a[1]=2;a[2]=times_b/10;a[3]=times_b%10;}
if(set_time_prog==8 && digitalRead(UP)==LOW){times_c ++;if(times_c>10){times_c=10;}EEPROM.update(3,times_c);delay(100);}
if(set_time_prog==8 && digitalRead(DW)==LOW){times_c --;if(times_c<0){times_c=0;};EEPROM.update(3,times_c);delay(100);}
if(set_time_prog==8){a[0]=17;a[1]=3;a[2]=times_c/10;a[3]=times_c%10;}
}
if(set_time==2){ prog = 1; bud = 0;dv_stop = 0;s_tic = 1;
if(digitalRead(PROG)==LOW){set_time_prog_alarm++;if(set_time_prog_alarm>1){set_time_prog_alarm=0;set_time=0;}delay(200);}
if(set_time_prog_alarm==0 && digitalRead(UP)==LOW){alarm_mm ++;if(alarm_mm>59){alarm_mm=59;}EEPROM.update(10,times_a);delay(100);}
if(set_time_prog_alarm==0 && digitalRead(DW)==LOW){alarm_mm --;if(alarm_mm<0){alarm_mm=0;};EEPROM.update(10,times_a);delay(100);}
if(set_time_prog_alarm==0){a[0]=19;a[1]=0;a[2]=alarm_mm/10;a[3]=alarm_mm%10;}
if(set_time_prog_alarm==1 && digitalRead(UP)==LOW){alarm_hh ++;if(alarm_hh>23){alarm_hh=23;}EEPROM.update(11,times_a);delay(100);}
if(set_time_prog_alarm==1 && digitalRead(DW)==LOW){alarm_hh --;if(alarm_hh<0){alarm_hh=0;};EEPROM.update(11,times_a);delay(100);}
if(set_time_prog_alarm==1){a[0]=19;a[1]=1;a[2]=alarm_hh/10;a[3]=alarm_hh%10;}
}
if(set_time==0){
if(avto==1){
if(ss < times_a){dv_stop = 0;s_tic = 0; a[0]=temp/10;a[1]=temp%10;a[2]=13;a[3]=14;} // вывод темпер.
if(ss >= times_a && ss <=times_a+times_b){dv_stop = 0;s_tic = 0; a[0]=10;a[1]=11;a[2]=humidity/10;a[3]=humidity%10;} // вывод влажн.
if(ss > times_a+times_b && ss <=times_a+times_b+times_c){dv_stop = 0;s_tic = 1; a[0]=dd/10;a[1]=dd%10;a[2]=mon/10;a[3]=mon%10;} // вывод дата месяц.
if(ss > times_a+times_b+times_c){ dv_stop=1;timm();} // вывод время
}else{ dv_stop=1;timm();} // если авто = 0, то выводить только время
// мигание двоеточия
if(dv_stop==1){ mig_dv();}
} // set_time == 0
if( (hh*100+mm == alarm_hh*100+alarm_mm) && bud_aktiv==1 && zumm_off==0){zumm = 1;}
if(hh*100+mm != alarm_hh*100+alarm_mm){zumm_off=0;}
if(zumm==1 && (digitalRead(UP)==LOW || digitalRead(DW)==LOW)){zumm=0;zumm_off=1;delay(200);}
if(zumm==1 && zumm_off==0){digitalWrite(BUZZER,HIGH);}
if(zumm==0){digitalWrite(BUZZER,LOW);}
delay(100);
digitalWrite(BUZZER,LOW);
}
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
case 19: ch(A_SEG,0);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;// A
}}
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;}
Будильник сработал. отключить кнопками можно.. Но. сам он не отключается.. через 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 // МИНУС
// Активный зуммер
#define BUZZER A3
#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,dv_stop, bud_aktiv;
int brig = 500;
int set_time, set_time_prog, gg_reg, mon_reg, dd_reg, hh_reg, mm_reg, ss_reg;
int times_a, times_b, times_c;
int set_time_prog_alarm,alarm_mm, alarm_hh;
bool zumm=0, zumm_off=0;
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(BUZZER,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);
times_a = EEPROM.read(1);
times_b = EEPROM.read(2);
times_c = EEPROM.read(3);
alarm_mm = EEPROM.read(10);
alarm_hh = EEPROM.read(11);
// clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
}
void loop(){
if(set_time==0 && zumm==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);}
// основное меню настройки будильника
if(digitalRead(PROG)==LOW && digitalRead(UP)==HIGH && digitalRead(DW)==LOW){set_time=2;a[0]=15;a[1]=16;a[2]=17;a[3]=2;delay(2000);}
if(digitalRead(UP)==LOW && digitalRead(PROG)==HIGH && digitalRead(DW)==HIGH){kolorol = 0;bud_aktiv=1;delay(200);}
if(digitalRead(DW)==LOW && digitalRead(PROG)==HIGH && digitalRead(UP)==HIGH){kolorol = 1;bud_aktiv=0;delay(200);}
}
DateTime=clock.getDateTime();// опрос времени
ss = DateTime.second; // секунды
mm = DateTime.minute; // минуты
hh = DateTime.hour; // часы
dd = DateTime.day; // дата
mon = DateTime.month; // месяц
gg = DateTime.year; // Год
if(ss<=times_a+times_b+times_c && avto==1){wesk = 12;}
else if(set_time==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;dv_stop = 0;s_tic = 0;
if(digitalRead(PROG)==LOW){set_time_prog++;if(set_time_prog>8){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_prog==6 && digitalRead(UP)==LOW){times_a ++;if(times_a>10){times_a=10;}EEPROM.update(1,times_a);delay(100);}
if(set_time_prog==6 && digitalRead(DW)==LOW){times_a --;if(times_a<0){times_a=0;};EEPROM.update(1,times_a);delay(100);}
if(set_time_prog==6){a[0]=17;a[1]=1;a[2]=times_a/10;a[3]=times_a%10;}
if(set_time_prog==7 && digitalRead(UP)==LOW){times_b ++;if(times_b>10){times_b=10;}EEPROM.update(2,times_b);delay(100);}
if(set_time_prog==7 && digitalRead(DW)==LOW){times_b --;if(times_b<0){times_b=0;};EEPROM.update(2,times_b);delay(100);}
if(set_time_prog==7){a[0]=17;a[1]=2;a[2]=times_b/10;a[3]=times_b%10;}
if(set_time_prog==8 && digitalRead(UP)==LOW){times_c ++;if(times_c>10){times_c=10;}EEPROM.update(3,times_c);delay(100);}
if(set_time_prog==8 && digitalRead(DW)==LOW){times_c --;if(times_c<0){times_c=0;};EEPROM.update(3,times_c);delay(100);}
if(set_time_prog==8){a[0]=17;a[1]=3;a[2]=times_c/10;a[3]=times_c%10;}
}
if(set_time==2){ prog = 1; bud = 0;dv_stop = 0;s_tic = 1;
if(digitalRead(PROG)==LOW){set_time_prog_alarm++;if(set_time_prog_alarm>1){set_time_prog_alarm=0;set_time=0;}delay(200);}
if(set_time_prog_alarm==0 && digitalRead(UP)==LOW){alarm_mm ++;if(alarm_mm>59){alarm_mm=59;}EEPROM.update(10,times_a);delay(100);}
if(set_time_prog_alarm==0 && digitalRead(DW)==LOW){alarm_mm --;if(alarm_mm<0){alarm_mm=0;};EEPROM.update(10,times_a);delay(100);}
if(set_time_prog_alarm==0){a[0]=19;a[1]=0;a[2]=alarm_mm/10;a[3]=alarm_mm%10;}
if(set_time_prog_alarm==1 && digitalRead(UP)==LOW){alarm_hh ++;if(alarm_hh>23){alarm_hh=23;}EEPROM.update(11,times_a);delay(100);}
if(set_time_prog_alarm==1 && digitalRead(DW)==LOW){alarm_hh --;if(alarm_hh<0){alarm_hh=0;};EEPROM.update(11,times_a);delay(100);}
if(set_time_prog_alarm==1){a[0]=19;a[1]=1;a[2]=alarm_hh/10;a[3]=alarm_hh%10;}
}
if(set_time==0){
if(avto==1){
if(ss < times_a){dv_stop = 0;s_tic = 0; a[0]=temp/10;a[1]=temp%10;a[2]=13;a[3]=14;} // вывод темпер.
if(ss >= times_a && ss <=times_a+times_b){dv_stop = 0;s_tic = 0; a[0]=10;a[1]=11;a[2]=humidity/10;a[3]=humidity%10;} // вывод влажн.
if(ss > times_a+times_b && ss <=times_a+times_b+times_c){dv_stop = 0;s_tic = 1; a[0]=dd/10;a[1]=dd%10;a[2]=mon/10;a[3]=mon%10;} // вывод дата месяц.
if(ss > times_a+times_b+times_c){ dv_stop=1;timm();} // вывод время
}else{ dv_stop=1;timm();} // если авто = 0, то выводить только время
// мигание двоеточия
if(dv_stop==1){ mig_dv();}
} // set_time == 0
if( (hh*100+mm == alarm_hh*100+alarm_mm) && bud_aktiv==1 && zumm_off==0){zumm = 1;}
if(hh*100+mm != alarm_hh*100+alarm_mm){zumm = 0;zumm_off=0;}
if(zumm==1 && (digitalRead(UP)==LOW || digitalRead(DW)==LOW)){zumm=0;zumm_off=1;delay(200);}
if(zumm==1 && zumm_off==0){digitalWrite(BUZZER,HIGH);}
if(zumm==0){digitalWrite(BUZZER,LOW);}
delay(100);
digitalWrite(BUZZER,LOW);
}
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
case 19: ch(A_SEG,0);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;// A
}}
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;}
вроде все норма. через 2 мин. отключается. Но. когда нужно отключитьпринудительно. он выключается. А вот колокольчик светиться. нужно еще раз нажать,чтобы он погас.
Колокольчик это значит что будильник активен и должен запищать в нужное время, если колокольчик не горит, значит будильник не будет пищать в нужное время. Или сейчас не так работает как я написал?
Он так работает. все норма. я немного по другому подоумал.
Я это сделал для того, что если Вы не захотите чтобы завтра например будильник не сработал, то можно было его деактивировать. Например на выходные. А потом активировать, и Вы когда видите что горит колокольчик, значит завтра будильник будет пищать в назначенное время.
Я это сделал для того, что если Вы не захотите чтобы завтра например будильник не сработал, то можно было его деактивировать. Например на выходные. А потом активировать, и Вы когда видите что горит колокольчик, значит завтра будильник будет пищать в назначенное время.
Все верно. Это удобно. В основном я просыпаюсь в однои тоже время. Каждый раз буд.. выставлять не нужно. Достаточно включить или отключить колокольчик.
forum.rcl-radio.ru → Тестирование скетчей → Часы+будильник на П543 (ИЛЦ5-4/7М)
Форум работает на PunBB, при поддержке Informer Technologies, Inc
|