Включать реле по таймеру RTC 1307

dinovasya
Offline
Зарегистрирован: 03.10.2013
Вот конечный код. поправил последние штрихи.
#include <Wire.h>
#include <RTClib.h>      // Библиотека часов реального времени 1307
#include <AM2320.h>      // Библиотека датчика AM2320 по шине i2c
#define Rele1 3
#define Rele2 4
#define ReleObogrev 5   
#define ReleTuman 6
#define mn 60UL                                                                              //Дополнительные константы для удобства
#define hr 3600UL                                                                            //Отражают соответствующие количества секунд 
#define d 86400UL       //столько секунд в одном дне

AM2320 sensor;            // Обьявляем sensor
RTC_DS1307 rtc;


//------------------------------------------------------------------
class time{
public:
        time(unsigned char h=0, unsigned char m=0, unsigned char s=0){
            set_time(h, m, s);
        }
        time&   operator = (time &t){hour = t.hour; min = t.min; sec = t.sec; seconds = t.seconds; return *this;}
        boolean operator ==(time &t){return seconds==t.get_time();}
        boolean operator !=(time &t){return !(*this==t);}
        boolean operator > (time &t){return seconds>t.get_time();}
        boolean operator < (time &t){return seconds<t.get_time();}
        boolean operator >=(time &t){return seconds>=t.get_time();}
        boolean operator <=(time &t){return seconds<=t.get_time();}
        void set_time(unsigned char h, unsigned char m, unsigned char s){
            hour=h; min=m; sec=s;
            seconds=(unsigned long)h*1440 + (unsigned long)m*60 + s;
        }
        unsigned long get_time(){return seconds;};
        void print()    {Serial.print(hour); Serial.print(':');Serial.print(min); Serial.print(':');Serial.println(sec);}
private:
        unsigned char   hour;
        unsigned char   min;
        unsigned char   sec;
        unsigned long   seconds;
};


char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

void setup(void)
{
       Wire.begin();                                                                               //Инициируем I2C интерфейс
  rtc.begin();                                                                                //Инициирум RTC модуль
  Serial.begin(9600);                                                                         //Запускаем сом-порт
  delay(3000);                                                                                //Ожидаем открытия консоли

  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }

   // rtc.adjust(DateTime(2018, 6, 11, 15, 15, 15));    // для установки времени ввести сюда время и расскоментировать

   pinMode(ReleTuman, OUTPUT);  // Пин реле увлажнителя
   pinMode(ReleObogrev, OUTPUT);  // Пин реле обогревателя
   pinMode(Rele2, OUTPUT);  // Пин реле вентилятора
   pinMode(Rele1, OUTPUT);  // Пин реле управляемого таймером- свет
   Serial.begin(9600);
   Wire.begin();
   sensor.begin();
   
}
  
void loop(){

// Здесь мы будем считывать с датчика AM2320 температуру и влажность
// и контролировать 2 пина- 5и6 
// Влажность и температура регулируются здесь этими 2мя релюхами

sensor.measure(); 
float h = sensor.getHumidity();  float t = sensor.getTemperature();
if (t>24) digitalWrite(5, HIGH);      // Включаем реле обогревателя / он находитя в NO
else digitalWrite(5, LOW);           // Выключаем реле обогревателя если температура достигнута
if (h>80) digitalWrite(6, HIGH);      // Включаем реле туманогенератора / он находитя в NO
else digitalWrite(6, LOW);           // Выключаем реле туманогенератора. Влажность достигнута
Serial.print("Температура:  °C  ");
    Serial.println(t);
    Serial.print("Влажность:     %  ");
    Serial.println(h);
   delay(1000);
   
// Тут мы окончили опрос датчика и выставили нужные значения ВКЛ и ВЫКЛ на 5и6 пины.
//
// Переходим к часам реального времени
   
 
    DateTime now = rtc.now();    
    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(" (");
    Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
    Serial.print(") ");
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
    

    
Serial.println();
delay(3000);
Serial.print(" сейчас ");
Serial.print(now.hour(), DEC);
Serial.println(" часов. Реле включено по чётным часам ");
Serial.println();


if ( !(now.hour() % 2))
digitalWrite(Rele1, HIGH); 
else
digitalWrite(Rele1, LOW);

    
 
 }



    


 

Efim
Offline
Зарегистрирован: 04.05.2018

dinovasya

Вы понимаете что регистр имеет значение? Не нужно спорить!

dinovasya
Offline
Зарегистрирован: 03.10.2013

ах блин, проклятый регистр. точно. Спасибо, буду внимательнее.. 

Значит из-за одной маленькой буквы теперь релюха не работает. Вот заработала, а потм бы сгорела.

Кстати, я не спорю.. я учусь у Вас.. и за всё благодарен

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

DIYMan пишет:

легко переписывается так:

if ( !(now.hour() % 2)) 

Круг замкнулся.

Тридцатью семью постами ранее я объяснял, как от %2 перейти к &1.

b707
Offline
Зарегистрирован: 26.05.2017

dinovasya пишет:

А спалил, как ни странно, по инструкции. 

Подал на гнездо VIN  9 вольт с блока питания.

Подали 9в на VIN . не отключая USB от компа? - ну вот и получите... Так делать нельзя.

Заказывайте сразу несколько ардуинок, раз у вас такие "способности".

Я пока ни одну не спалил, но не расслабляюсь, всегда 2-3 штуки в запасе лежат. Благо они копейки стоят...