Паяльник

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Паяльник » Микроконтроллеры » будильник и градусник на тм1637 (управление ИК)


будильник и градусник на тм1637 (управление ИК)

Сообщений 1 страница 3 из 3

1

ТЫЦ

#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);
      }
     
}
 

0

2

необходимые библиотеки здесь тыц

0

3

Интересно, надо будет попробовать

0


Вы здесь » Паяльник » Микроконтроллеры » будильник и градусник на тм1637 (управление ИК)


создать форум