- 001
- 002
- 003
- 004
- 005
- 006
- 007
- 008
- 009
- 010
- 011
- 012
- 013
- 014
- 015
- 016
- 017
- 018
- 019
- 020
- 021
- 022
- 023
- 024
- 025
- 026
- 027
- 028
- 029
- 030
- 031
- 032
- 033
- 034
- 035
- 036
- 037
- 038
- 039
- 040
- 041
- 042
- 043
- 044
- 045
- 046
- 047
- 048
- 049
- 050
- 051
- 052
- 053
- 054
- 055
- 056
- 057
- 058
- 059
- 060
- 061
- 062
- 063
- 064
- 065
- 066
- 067
- 068
- 069
- 070
- 071
- 072
- 073
- 074
- 075
- 076
- 077
- 078
- 079
- 080
- 081
- 082
- 083
- 084
- 085
- 086
- 087
- 088
- 089
- 090
- 091
- 092
- 093
- 094
- 095
- 096
- 097
- 098
- 099
- 100
#include "Budilnic.h" //описание библиотеки Будильник
#define Bud_out 4 //на пин d4 выводится 1 если сработал любой будильник
#define Vibro_gen 9 //на пин d9 выводятся импульсы для подключения вибромотора
#define Buz 5 //на пин d5 подключена Пищалка с генератором
#define Stop_button 8 //на пин d8 подключена кнопка,подтянута на +5
Budilnic:: Budilnic()
{ //описываем пустой конструктор, он всегда вызывается при создании экземпляра класса
}
void Budilnic:: initialReading () //говорим что эта функция пренадлежит классу Budilnic
{ //при включении из EEPROM зачитываются сохраненные значения
SuH=Eprom_read(20,0); SuM=Eprom_read(21,0); SuF=Eprom_read(22,0);
MoH=Eprom_read(23,0); MoM=Eprom_read(24,0); MoF=Eprom_read(25,0);
TuH=Eprom_read(26,0); TuM=Eprom_read(27,0); TuF=Eprom_read(28,0);
WeH=Eprom_read(29,0); WeM=Eprom_read(30,0); WeF=Eprom_read(31,0);
ThH=Eprom_read(32,0); ThM=Eprom_read(33,0); ThF=Eprom_read(34,0);
FrH=Eprom_read(35,0); FrM=Eprom_read(36,0); FrF=Eprom_read(37,0);
SaH=Eprom_read(38,0); SaM=Eprom_read(39,0); SaF=Eprom_read(40,0);
//зачитываем пользовательскую настройку SetAlarmTimer
budilnic.SetAlarmTimer = EEPROM_uint_read(41,10); //читаем из EEPROM 2 бита адр.41 и адр.42. Начальная установка 10
pinMode(Bud_out, OUTPUT);//Сигнальный пин будильника на выход
pinMode(Stop_button, INPUT);//Кнопка Stop работает на вход
pinMode(Buz, OUTPUT); //Пишалка на выход
pinMode(Vibro_gen, OUTPUT); //Пин вибромотора на выход
}
void Budilnic:: check_Data () // передаем значения на проверку
{
check_Parametrs(SuF,SuH,SuM,0); //проверить флаг,часы,минуты Восскресенье
check_Parametrs(MoF,MoH,MoM,1); //проверить флаг,часы,минуты Понедельник
check_Parametrs(TuF,TuH,TuM,2); //проверить флаг,часы,минуты Вторник
check_Parametrs(WeF,WeH,WeM,3); //проверить флаг,часы,минуты Среда
check_Parametrs(ThF,ThH,ThM,4); //проверить флаг,часы,минуты Четверг
check_Parametrs(FrF,FrH,FrM,5); //проверить флаг,часы,минуты Пятница
check_Parametrs(SaF,SaH,SaM,6); //проверить флаг,часы,минуты Суббота
}
void Budilnic:: check_Parametrs (unsigned char F,unsigned char H,unsigned char M,unsigned char DAY)
{
if(F==1)
{ //если будильник включен
if(DAY==time.weekday)
{ //если совпал день недели
if(H==time.hours)
{ //если часы совпали
if(M==time.minutes)
{ //если минуты совпали
if(time.seconds==0)
{//если секунды по нулям
AlarmTimer=0; //обнуляем таймер
AlarmFlag=1; //поднимаем флаг, есть срабатывание
}}}}}
}//конец функции проверки будильников
void Budilnic :: LetsGo()
{//функция постоянно вызывается из майна
if(AlarmFlag==1)
{ //если зарегистрированно срабатывание
digitalWrite(Bud_out, HIGH); // зажигаем светодиод
Misic=1; //включаем воспроизведение мелодии
if( (AlarmTimer/2)==SetAlarmTimer ) //если таймер досчитал до заданного времени
{ //выключаем будильник
digitalWrite(Bud_out, LOW); // гасим светодиод
Misic=0; //отключить музыку
AlarmFlag=0; // и опускаем флаг
}
if(digitalRead(Stop_button)==LOW) //если нажата кнопка STOP
{
digitalWrite(Bud_out, LOW); // гасим светодиод
Misic=0; //отключить музыку
AlarmFlag=0; // и опускаем флаг
} //конец проверки кнопки STOP
}//конец проверки флага срабатывания
if(Misic)
{
//------------управляем импульсами на d9------------------------------
if(VibroTimer<10) digitalWrite(Vibro_gen, LOW); // Снять импульс d9
else digitalWrite(Vibro_gen, HIGH); //Подать импульс на d9
//-------------------сдесь проиррываем мелодию------------------------
if((BuzTimer>=0) & (BuzTimer<2)) Buzer=1; // пик 0.1
if((BuzTimer>=2) & (BuzTimer<4)) Buzer=0; // пауза 2.3
if((BuzTimer>=4) & (BuzTimer<6)) Buzer=1; // пик
if((BuzTimer>=6) & (BuzTimer<8)) Buzer=0; // пауза
if((BuzTimer>=8) & (BuzTimer<10)) Buzer=1; // пик
if((BuzTimer>=10) & (BuzTimer<20)) Buzer=0; // пауза
//--------второй куплет