#include "CyberLib.h"
#include "TM1637.h"
#define CLK 11 // пин 11
#define DIO 12 // пин 12
TM1637 tm1637(CLK,DIO);
#define ON 1
#define OFF 0#include <DS3231.h>
#include <Wire.h>
DS3231 rtc(SDA, SCL);
Time t;#include <IRstD.h>
IRrecvstd irrecvstd(4);
decode_resultsstd res_std;#define MAXMILLIS 4294967295
unsigned long timme;
unsigned long timelapsed = 0;
int chas = 0;
int minuta = 0;
int secunda = 0;
int temp=0;///////////// B1 ////////////////////
uint8_t B1_flag = ReadEEPROM_Byte(1);
uint8_t B1chas_vkl = ReadEEPROM_Byte(2);
uint8_t B1minut_vkl = ReadEEPROM_Byte(3);uint8_t val_shim = ReadEEPROM_Byte(4);
uint8_t flag_disp = 0;
uint8_t flag_zel_led = 0;int buzzerPin = 5;
int8_t TimeDisp[] = {0x00,0x00,0x00,0x00};
int8_t BudDisp[] = {0x00,0x00,0x00,0x00};unsigned char ClockPoint = 1;
void setup()
{
tm1637.set(val_shim);
tm1637.init();
pinMode(buzzerPin, OUTPUT);
D7_Out;
D7_Low;
D10_Out;if(B1_flag) D10_High;
else D10_Low;
Serial.begin(57600);
irrecvstd.enableIRInstd();rtc.begin();
}void loop()
{
if(irrecvstd.decodestd(&res_std))
{
if(res_std.valuestd == 16750695) // Прибавление часов
{
analogWrite(buzzerPin, 255);
chas++;
if(chas > 23) chas = 0;
rtc.setTime(chas, minuta, secunda);
disp();
analogWrite(buzzerPin, 0);
}if(res_std.valuestd == 16738455) // Убавление часов
{
analogWrite(buzzerPin, 255);
chas--;
if(chas < 1) chas = 0;
rtc.setTime(chas, minuta, secunda);
disp();
analogWrite(buzzerPin, 0);
}if(res_std.valuestd == 16718055) // Прибавление минут
{
analogWrite(buzzerPin, 255);
minuta++;
if(minuta > 59) minuta = 0;
rtc.setTime(chas, minuta, secunda);
disp();
analogWrite(buzzerPin, 0);
}if(res_std.valuestd == 16724175) // Убавление минут
{
analogWrite(buzzerPin, 255);
minuta--;
if(minuta < 1 || minuta > 60) minuta = 0;
rtc.setTime(chas, minuta, secunda);
disp();
analogWrite(buzzerPin, 0);
}if(flag_disp && res_std.valuestd == 16761405) // Прибавление часов будильника
{
analogWrite(buzzerPin, 255);
B1chas_vkl++;
if(B1chas_vkl > 23) B1chas_vkl = 0;
WriteEEPROM_Byte(2, B1chas_vkl);
disp();
analogWrite(buzzerPin, 0);
}if(flag_disp && res_std.valuestd == 16720605) // Убавление часов будильника
{
analogWrite(buzzerPin, 255);
B1chas_vkl--;
if(B1chas_vkl < 1 || B1chas_vkl > 24) B1chas_vkl = 0;
WriteEEPROM_Byte(2, B1chas_vkl);
disp();
analogWrite(buzzerPin, 0);
}if(flag_disp && res_std.valuestd == 16726215) // Прибавление минут будильника
{
analogWrite(buzzerPin, 255);
B1minut_vkl++;
if(B1minut_vkl > 59) B1minut_vkl = 0;
WriteEEPROM_Byte(3, B1minut_vkl);
disp();
analogWrite(buzzerPin, 0);
}if(flag_disp && res_std.valuestd == 16716015) // Убавление минут будильника
{
analogWrite(buzzerPin, 255);
B1minut_vkl--;
if(B1minut_vkl < 1 || B1minut_vkl > 60) B1minut_vkl = 0;
WriteEEPROM_Byte(3, B1minut_vkl);
disp();
analogWrite(buzzerPin, 0);
}if(res_std.valuestd == 16730805) // Вкл/Откл будильник
{
analogWrite(buzzerPin, 255);B1chas_vkl = ReadEEPROM_Byte(2);
B1minut_vkl = ReadEEPROM_Byte(3);
if(B1_flag)
{
B1_flag = 0;
D10_Low;
}
else
{
B1_flag = 1;
D10_High;
}
disp();
WriteEEPROM_Byte(1, B1_flag);
analogWrite(buzzerPin, 0);
}if(res_std.valuestd == 16728765) // Вывод будильника на дисплей
{
analogWrite(buzzerPin, 255);
flag_zel_led = 0;
if(flag_disp)
{
flag_disp = 0;
D7_Low;
}
else
{
flag_disp = 1;
D7_High;
}
disp();
analogWrite(buzzerPin, 0);
}if(res_std.valuestd == 16736925) // Подсветка +
{
analogWrite(buzzerPin, 255);
val_shim++;
if(val_shim > 7) val_shim = 7;
WriteEEPROM_Byte(4, val_shim);
tm1637.set(val_shim);
disp();
delay_ms(10);
analogWrite(buzzerPin, 0);
}if(res_std.valuestd == 16754775) // Подсветка -
{
analogWrite(buzzerPin, 255);
val_shim--;
if(val_shim < 1 || val_shim > 254) val_shim = 0;
WriteEEPROM_Byte(4, val_shim);
tm1637.set(val_shim);
disp();
delay_ms(10);
analogWrite(buzzerPin, 0);
}if(res_std.valuestd == 16732845) // +10 минут отсрочка
{
analogWrite(buzzerPin, 255);
B1minut_vkl = B1minut_vkl + 10;
if(B1minut_vkl > 59)
{
B1minut_vkl = 10;
B1chas_vkl++;
if(B1chas_vkl>23) B1chas_vkl=0;
}delay_ms(5);
analogWrite(buzzerPin, 0);flag_disp = 1;
D7_High;
disp();
delay_ms(300);
flag_disp = 0;
D7_Low;
}
if(res_std.valuestd == 16756815) // смотрим температуру
{
analogWrite(buzzerPin, 255);temperatura();
delay_ms(1000);
analogWrite(buzzerPin, 0);
}
//Serial.println(res_std.valuestd); // Удалить после программирования пульта
irrecvstd.resumestd();
res_std.valuestd = 0;
}unsigned long currtime = millis();
if(currtime > timme) timelapsed = (currtime - timme);
else timelapsed = (MAXMILLIS - timme + currtime);
if(timelapsed > 999)
{
timme = currtime;
if(flag_disp)
{
flag_zel_led++;
if(flag_zel_led > 59)
{
flag_zel_led = 0;
flag_disp = 0;
D7_Low;
analogWrite(buzzerPin, 255);
delay_ms(5);
analogWrite(buzzerPin, 0);
}
}
disp();
}
temp=rtc.getTemp();t = rtc.getTime();
chas = t.hour,DEC;
minuta = t.min,DEC;
secunda = t.sec,DEC;if(B1_flag)
{
if(chas == B1chas_vkl && minuta == B1minut_vkl)
{
buzz();
}if(chas == B1chas_vkl && minuta == B1minut_vkl && secunda == 59)
{
B1minut_vkl = B1minut_vkl + 10;
if(B1minut_vkl > 59)
{
B1minut_vkl = 10;
B1chas_vkl++;
if(B1chas_vkl>23) B1chas_vkl=0;
}
}
}} //END LOOP
void buzz()
{
if(B1_flag)
{
analogWrite(buzzerPin, 30);
delay_ms(100);
analogWrite(buzzerPin, 50);
delay_ms(100);
}analogWrite(buzzerPin, 0);
delay_ms(100);
}
void temperatura()
{
TimeDisp[0] = temp/ 10;
TimeDisp[1] = temp % 10;
TimeDisp[2] = 12;
TimeDisp[3] = 18;
tm1637.display(TimeDisp);
}
void disp()
{
if(!flag_disp)
{
ClockPoint = (~ClockPoint) & 0x01;
if(ClockPoint)tm1637.point(POINT_ON);
else tm1637.point(POINT_OFF);TimeDisp[0] = chas / 10;
TimeDisp[1] = chas % 10;
TimeDisp[2] = minuta / 10;
TimeDisp[3] = minuta % 10;
tm1637.display(TimeDisp);
}else
{
tm1637.point(POINT_ON);
BudDisp[0] = B1chas_vkl / 10;
BudDisp[1] = B1chas_vkl % 10;
BudDisp[2] = B1minut_vkl / 10;
BudDisp[3] = B1minut_vkl % 10;
tm1637.display(BudDisp);
}
}
будильник и градусник на тм1637 (управление ИК)
Страница: 1
Сообщений 1 страница 3 из 3
Поделиться12017-01-06 13:38:46
ТЫЦ
Поделиться22017-01-06 13:41:18
необходимые библиотеки здесь тыц
Поделиться32017-01-16 23:04:35
Интересно, надо будет попробовать
Страница: 1