Как Blink встроить в таймер

bwn
Offline
Зарегистрирован: 25.08.2014

Ужасно не нравятся 35 и 36 строки. 

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

36 строку, наверное, можно убрать, а вот 35 (delay(1000);) , если убрать то время часов не видно....

bwn
Offline
Зарегистрирован: 25.08.2014

Так заведите переменную prevSecund и если изменилась обновляйте экран. Зачем его каждый проход долбить?

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

В следующей жизни, думаю, смогу.... Сегодня и так удача, маленький и рабочий код. Конечно буду интересоваться и совершенствоваться, для этого нужно время.

bwn
Offline
Зарегистрирован: 25.08.2014

Так всего один if добавить и в него засунуть вывод на экран. А выключение нагрузки завернуть в else, тогда не будет выключать и тут же включать при каждом проходе (визуально не заметно, а на самом деле именно так).

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

Добавить if, с вышеуказанной функцией, не удалось. Но еще один код "сочинение на вольную тему". Рабочий.

#include <Wire.h>
#include "RTClib.h"
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3f, 16, 2);
RTC_DS1307 RTC;
int releyPin = 13;
// Вписываем время включения и выключения
//****************************************
int on=11; // Включаемся в Часов
int off=12; // Отключаемся в Часов
//****************************************
// Переменные
byte second;
byte minute;
byte hour;

void setup() {
  Wire.begin();
  RTC.begin();
  lcd.begin(16,2);
   lcd.backlight();
   pinMode(releyPin, OUTPUT);
}

void loop() {
  {
    // start the I2C transmission, at address 0x68
    Wire.beginTransmission(0x68);    
    // Start at address 0
    Wire.write(0);
    // Close transmission
    Wire.endTransmission();
    
    // Читаем из часов 0x68
    Wire.requestFrom(0x68, 3);
    second = Wire.read();
    minute = Wire.read();
    hour = Wire.read();
    
    // Выводим время
     lcd.setCursor(0,0);
  lcd.print(on);
lcd.print("-ON     ");
  lcd.print(off);
  lcd.print("-OFF");
    lcd.setCursor(4, 1);
      if (hour < 10) lcd.print("0");
        lcd.print(hour, HEX); lcd.print(":"); 
      if (minute < 10) lcd.print("0");
        lcd.print(minute, HEX); lcd.print(":"); 
      if (second < 10) lcd.print("0");
        lcd.print(second, HEX);
    lcd.setCursor(2,1);
 DateTime now = RTC.now(); 
 if  ( (now.hour() >= on ) && ( (now.hour() < off ))) digitalWrite(releyPin, HIGH); 
    }   
}

ulis
ulis аватар
Offline
Зарегистрирован: 09.03.2011

braslav пишет:

Подскажите, пожалуйста, знатоки как встроить цикл Blink в таймер. Нужно чтобы Blink начинал работать утром и заканчивал вечером. Что нужно добавить к этому коду. Можно пристроить любые часы реального времени или как-то по-другому? Возможно такой или похожий код подскажете... 

А вы вообще, что изобретаете? Типа таймера, который в заданное время что-то включает и в другое заданное выключает?

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

Новогодняя гирлянда должна включаться в определенное время и выключаться в 23 часа.

ulis
ulis аватар
Offline
Зарегистрирован: 09.03.2011

braslav пишет:

Новогодняя гирлянда должна включаться в определенное время и выключаться в 23 часа.

Ну я примерно сейчас тем же занялся, только включать выключать нужно тэн обогрева дома ... + периодов включения выключения я планирую несколько и кроме того, возможен переход времени работы через 0 часов(или 24 часа), т.е. фактически время выключения меньше времени включения, например, включился в 23 и выключился в 7 утра следующих суток

sadman41
Offline
Зарегистрирован: 19.10.2016

braslav пишет:

Новогодняя гирлянда должна включаться в определенное время и выключаться в 23 часа.

Икея ТЭНДА

bwn
Offline
Зарегистрирован: 25.08.2014

Вы что то сложное городить пытаетесь. 
Просто вот так:

void loop() {
  {
    static byte prevSecond = 0;
    DateTime now = RTC.now();
    if (now.second() != prevSecond) {
      prevSecond = now.second;
      //Здесь вывод на дисплей
    }
}

Кстати код у Вас нерабочий. Реле включится, но никогда не выключится. Добавьте else. 

 

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

sadman41 Устройство нас не интерисует. Нам важен код! Применение может найти и в других устройствах и с другим питанием.

 

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

bwn Такой вариант пробовал. Не получилось загрузить. Шли ошибки. Попробую еще раз.

bwn
Offline
Зарегистрирован: 25.08.2014

Ну тогда оставьте только Wire и оперируйте переменной second, а лучше код ошибки и скетч сбросьте. Должно работать.

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

Подправил код выше

#include <Wire.h>
#include "RTClib.h"
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3f, 16, 2);
RTC_DS1307 RTC;
int releyPin = 13;
// Вписываем время включения и выключения
//****************************************
int on=17; // Включаемся в Часов
int off=23; // Отключаемся в Часов
//****************************************
// Переменные
byte second;
byte minute;
byte hour;

void setup() {
  Wire.begin();
  RTC.begin();
  lcd.begin(16,2);
   lcd.backlight();
   pinMode(releyPin, OUTPUT);
   digitalWrite(releyPin, LOW);
}

void loop() {
  {
    // start the I2C transmission, at address 0x68
    Wire.beginTransmission(0x68);    
    // Start at address 0
    Wire.write(0);
    // Close transmission
    Wire.endTransmission();
    
    // Читаем из часов 0x68
    Wire.requestFrom(0x68, 3);
    second = Wire.read();
    minute = Wire.read();
    hour = Wire.read();
    
    // Выводим время
     lcd.setCursor(0,0);
  lcd.print(on);
lcd.print("-ON     ");
  lcd.print(off);
  lcd.print("-OFF");
    lcd.setCursor(4, 1);
      if (hour < 10) lcd.print("0");
        lcd.print(hour, HEX); lcd.print(":"); 
      if (minute < 10) lcd.print("0");
        lcd.print(minute, HEX); lcd.print(":"); 
      if (second < 10) lcd.print("0");
        lcd.print(second, HEX);
    lcd.setCursor(2,1);
 DateTime now = RTC.now(); 
 if  ( (now.hour() >= on ) && ( (now.hour() < off ))) {digitalWrite(releyPin, HIGH);}
 else {digitalWrite(releyPin, LOW);}
    }   
}

 

bwn
Offline
Зарегистрирован: 25.08.2014

Ну, дело Ваше.

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017
 
     Ошибку дает на строке:  prevSecond = now.second;
 
exit status 1
cannot convert 'DateTime::second' from type 'uint8_t (DateTime::)()const {aka unsigned char (DateTime::)()const}' to type 'byte {aka unsigned char}'
 
 
ulis
ulis аватар
Offline
Зарегистрирован: 09.03.2011

braslav пишет:

Подправил код выше

т.е. времена старта -  стопа строго фиксированы ... 

bwn
Offline
Зарегистрирован: 25.08.2014

Попробуйте byte на char заменить. У меня библиотеки нет, не проверить. И скобки после now.second поставили?

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

На данный момент выглядит так:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "RTClib.h"
LiquidCrystal_I2C lcd(0x3f,16,2);

RTC_DS1307 RTC;
int releyPin = 13;
// Вписываем время включения и выключения
//****************************************
int on=17; // Включаемся в Часов
int off=18; // Отключаемся в Часов
//****************************************
void setup () {
    Wire.begin();
    RTC.begin();
    lcd.init(); // initialize the lcd
    lcd.backlight();
    pinMode(releyPin, OUTPUT);
  }

void loop() {
  {
    static byte prevSecond = 0;
    DateTime now = RTC.now();
    if (now.second() != prevSecond) {
      prevSecond = now.second;
      
      //Здесь вывод на дисплей
    lcd.clear();
    lcd.setCursor(0,0);
  lcd.print(on);
lcd.print("-ON     ");
  lcd.print(off);
  lcd.print("-OFF");
    lcd.setCursor(4, 1);
    lcd.print(now.hour(), DEC);
    lcd.print(':');
    lcd.print(now.minute(), DEC);
    lcd.print(':');
    lcd.print(now.second(), DEC);
    }
  if  ( (now.minute() >= on ) && ( (now.minute() < off ))) digitalWrite(releyPin, HIGH);
}

 

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

ulis времена старта -  стопа моно изменить

// Вписываем время включения и выключения
08
//****************************************
09
int on=17; // Включаемся в Часов
10
int off=23; // Отключаемся в Часов
11
//****************************************

и перешить

ulis
ulis аватар
Offline
Зарегистрирован: 09.03.2011

braslav пишет:

 

// Вписываем время включения и выключения
08
//****************************************
09
int on=17; // Включаемся в Часов
10
int off=23; // Отключаемся в Часов
11
//****************************************

и перешить

и я о том же, что только перепрограммировать - тащить к елке ноут ... может добавить клаву к устройству?

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

ulis    Каждый делает под свое. Я, например, делаю устройство, програмирую и это устройство будет работать всегда так, годами, как запрограмировано. Будет управлять гирляндами в окнах на втором этаже дома с 1 декабря и до 10 января следующего года. Потом отключу и так до следующего нового года. Мне не нужно менять этот режим. Если у тебя другие условия, можно добавить кнопки.

bwn
Offline
Зарегистрирован: 25.08.2014

braslav, вы скопипастили и повторили мою ошибку, в 26 строке нужны круглые скобки после now.sekond();

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

Спасибо bwn, исправлено, загружено, работает. Окончательный вариант

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "RTClib.h"
LiquidCrystal_I2C lcd(0x3f,16,2);

RTC_DS1307 RTC;
int releyPin = 13;
// Вписываем время включения и выключения
//****************************************
int on=19; // Включаемся в Часов
int off=20; // Отключаемся в Часов
//****************************************
void setup () {
    Wire.begin();
    RTC.begin();
    lcd.init(); // initialize the lcd
    lcd.backlight();
    pinMode(releyPin, OUTPUT);
  }

void loop() {
  {
    static byte prevSecond = 0;
    DateTime now = RTC.now();
    if (now.second() != prevSecond) {
      prevSecond = now.second();
      
      //Здесь вывод на дисплей
    lcd.clear();
    lcd.setCursor(0,0);
  lcd.print(on);
lcd.print("-ON     ");
  lcd.print(off);
  lcd.print("-OFF");
    lcd.setCursor(4, 1);
    lcd.print(now.hour(), DEC);
    lcd.print(':');
    lcd.print(now.minute(), DEC);
    lcd.print(':');
    lcd.print(now.second(), DEC);
    }
  if  ( (now.minute() >= on ) && ( (now.minute() < off ))) digitalWrite(releyPin, HIGH);
  else {digitalWrite(releyPin, LOW);}
}}

 

bwn
Offline
Зарегистрирован: 25.08.2014

И снова не окончательный.))) Теперь нули в двузначных числах потеряли. Если нули будут на месте, то и 29 строка не нужна, экран помигивать не будет.))))
А можно еще местечко освободить выкинув библиотеку часов. Понимаю, что все и так нормально работает, но тренировка, тренировка.))))

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

Да, нулей нет. как исправить не знаю. Экран не помигивает... Но поймал большую ошибку в работе кода. Секунды отрабатываются странно, 59 затем 9 снова до 59 10 и 69 79 99 Но время соотвествует...

 

bwn
Offline
Зарегистрирован: 25.08.2014

Они же в предыдущем коде были у Вас. Можете по такому принципу (это не ваш код):


    lcd.print(dataTime.date / 10);
    lcd.print(dataTime.date % 10);
    lcd.print("-");
    lcd.print(dataTime.mon / 10);
    lcd.print(dataTime.mon % 10);

Сперва делите на 10, потом остаток от деления. Нули вернуться. Ну или как раньше делали.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Када я выйду из запоя, я Вам помогу.  Наерна. 

У мня, правда, таймер с будильником на 3231, но это сутей не меняеть. 

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

Выходи потихоньку. Твой кот, вроде, уже вышел... 

bwn
Offline
Зарегистрирован: 25.08.2014

DetSimen пишет:

Када я выйду из запоя, я Вам помогу.  Наерна. 

У мня, правда, таймер с будильником на 3231, но это сутей не меняеть. 

Не захламляй голову человеку. Здесь пока песочница, как раз по моему уровню.))

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

ээмммм.

Дак я ничо сложного никада не предлагаю. Вроде. Я и сам простой, как 2 копейки. И авнакод мой такой жэ. 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

braslav пишет:

Выходи потихоньку. Твой кот, вроде, уже вышел... 

Коту моему глубоко накласть на окружающее. На работу я ухожу под громкое зевание кота: "Пошел? Иди. Тока, смотри не здохни, урод, возможно, я захочу есть, вечером".

Так мы с ним и живем. Он то вот - кот, а я даже этого не добился в жизни. :) 

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

Нашел нули, удалил Клир все работает.

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "RTClib.h"
LiquidCrystal_I2C lcd(0x3f,16,2);
RTC_DS1307 RTC;
int releyPin = 13;
// Вписываем время включения и выключения
//****************************************
int on=39; // Включаемся в Часов
int off=40; // Отключаемся в Часов
//****************************************
void setup () {
    Wire.begin();
    RTC.begin();
    lcd.init(); // initialize the lcd
    lcd.backlight();
    pinMode(releyPin, OUTPUT);
  }
void loop() {
  {
    static byte prevSecond = 0;
    DateTime now = RTC.now();
    if (now.second() != prevSecond) {
      prevSecond = now.second();
      //Здесь вывод на дисплей
    lcd.setCursor(0,0);
  lcd.print(on);
lcd.print("-ON     ");
  lcd.print(off);
  lcd.print("-OFF");
    lcd.setCursor(4, 1);
    if (now.hour() < 10) lcd.print("0");
    lcd.print(now.hour(), DEC);
    lcd.print(':');
    if (now.minute() < 10) lcd.print("0");
    lcd.print(now.minute(), DEC);
    lcd.print(':');
    if (now.second() < 10) lcd.print("0");
    lcd.print(now.second(), DEC);
    }
  if  ( (now.minute() >= on ) && ( (now.minute() < off ))) digitalWrite(releyPin, HIGH);
  else {digitalWrite(releyPin, LOW);}
}}

 

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

Спасибо всем. Закончили, все заработало, но стало как-то пусто. Все-таки увлекательное занятие. Ну, я не прощаюсь.

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

Чтобы включать несколько раз в сутки, решил добавить примитивным способом...

 if  ( (now.minute() == 1 )) digitalWrite(releyPin, HIGH);
  if  ( (now.minute() == 2 )) digitalWrite(releyPin, LOW);
  if  ( (now.minute() == 4 )) digitalWrite(releyPin, HIGH);
  if  ( (now.minute() == 5 )) digitalWrite(releyPin, LOW);
  if  ( (now.minute() == 10 )) digitalWrite(releyPin, HIGH);
  if  ( (now.minute() == 12 )) digitalWrite(releyPin, LOW);
  if  ( (now.minute() == 14 )) digitalWrite(releyPin, HIGH);
  if  ( (now.minute() == 15 )) digitalWrite(releyPin, LOW);
 
Работает без нареканий. Перед этой авантюрой добавлял код с использованием if else и одной строкой - не удалось, не работает.
 
Пинайте, пожалуйста...
sadman41
Offline
Зарегистрирован: 19.10.2016

Какой-то трэш.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

braslav пишет:

Спасибо всем. Закончили, все заработало, но стало как-то пусто. Все-таки увлекательное занятие. Ну, я не прощаюсь.

Это самое главное )))

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

Может это не красиво, но рабочий код.

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "RTClib.h"
LiquidCrystal_I2C lcd(0x3f,16,2);
RTC_DS1307 RTC;
int releyPin = 13;
// Вписываем время включения и выключения
//****************************************
int on=39; // Включаемся в Часов
int off=40; // Отключаемся в Часов
//****************************************
void setup () {
    Wire.begin();
    RTC.begin();
    lcd.init(); // initialize the lcd
    lcd.backlight();
    pinMode(releyPin, OUTPUT);
  }
void loop() {
  {
    static byte prevSecond = 0;
    DateTime now = RTC.now();
    if (now.second() != prevSecond) {
      prevSecond = now.second();
      //Здесь вывод на дисплей
    lcd.setCursor(0,0);
  lcd.print(on);
lcd.print("-ON     ");
  lcd.print(off);
  lcd.print("-OFF");
    lcd.setCursor(4, 1);
    if (now.hour() < 10) lcd.print("0");
    lcd.print(now.hour(), DEC);
    lcd.print(':');
    if (now.minute() < 10) lcd.print("0");
    lcd.print(now.minute(), DEC);
    lcd.print(':');
    if (now.second() < 10) lcd.print("0");
    lcd.print(now.second(), DEC);
    }
  if  ( (now.minute() == 1 )) digitalWrite(releyPin, HIGH);
  if  ( (now.minute() == 2 )) digitalWrite(releyPin, LOW);
  if  ( (now.minute() == 4 )) digitalWrite(releyPin, HIGH);
  if  ( (now.minute() == 5 )) digitalWrite(releyPin, LOW);
  if  ( (now.minute() == 10 )) digitalWrite(releyPin, HIGH);
  if  ( (now.minute() == 12 )) digitalWrite(releyPin, LOW);
  if  ( (now.minute() == 14 )) digitalWrite(releyPin, HIGH);
  if  ( (now.minute() == 15 )) digitalWrite(releyPin, LOW);
}}





 

bwn
Offline
Зарегистрирован: 25.08.2014

braslav пишет:

Может это не красиво, но рабочий код.

Если Вас устраивает, то почему и нет?

P/S строки 9-10 умиляют.))))

ulis
ulis аватар
Offline
Зарегистрирован: 09.03.2011

braslav пишет:

Может это не красиво, но рабочий код.

  if  ( (now.minute() == 1 )) digitalWrite(releyPin, HIGH);
  if  ( (now.minute() == 2 )) digitalWrite(releyPin, LOW);
  if  ( (now.minute() == 4 )) digitalWrite(releyPin, HIGH);
  if  ( (now.minute() == 5 )) digitalWrite(releyPin, LOW);
  if  ( (now.minute() == 10 )) digitalWrite(releyPin, HIGH);
  if  ( (now.minute() == 12 )) digitalWrite(releyPin, LOW);
  if  ( (now.minute() == 14 )) digitalWrite(releyPin, HIGH);
  if  ( (now.minute() == 15 )) digitalWrite(releyPin, LOW);

Жаль, ваша последовательность интервалов и не арифметическая, и не геометрическая, чтобы ее можно было просто посчитать

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

bwn Строки 9 и 10 в данном случае не участвуют. ulis А последовательность - это просто пример. Мне надо было быстро тестировать: работает или нет. В реальном случае поставлю утром с 7 до 9 часов HIGH, затем до 17 часов LOW, в 17 часов HIGH и в 23 часа LOW до следующих 7 часов утра следующего дня.

ulis
ulis аватар
Offline
Зарегистрирован: 09.03.2011

bwn пишет:

P/S строки 9-10 умиляют.))))

Ну почему же умиляют? А если итервал работы больше суток?

bwn
Offline
Зарегистрирован: 25.08.2014

ulis пишет:

bwn пишет:

P/S строки 9-10 умиляют.))))

Ну почему же умиляют? А если итервал работы больше суток?

Возможно, не подумал.

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

Такой код. К сожалению строки 29 и 31 на LCD рисуют только первые цыфры. По этой записи на экране можно видеть какое время записано

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "RTClib.h"
LiquidCrystal_I2C lcd(0x3f,16,2);
RTC_DS1307 RTC;
int releyPin = 13;
// Вписываем время включения и выключения
//****************************************
int on1=7; // Включаемся в Часов
int off1=9; // Отключаемся в Часов
int on2=17; // Включаемся в Часов
int off2=23; // Отключаемся в Часов
//****************************************
void setup () {
    Wire.begin();
    RTC.begin();
    lcd.init(); // initialize the lcd
    lcd.backlight();
    pinMode(releyPin, OUTPUT);
  }
void loop() {
  {
    static byte prevSecond = 0;
    DateTime now = RTC.now();
    if (now.second() != prevSecond) {
      prevSecond = now.second();
      //Здесь вывод на дисплей
    lcd.setCursor(0,0);
  lcd.print(on1,on2);
lcd.print("-ON     ");
  lcd.print(off1,off2);
  lcd.print("-OFF");
    lcd.setCursor(4, 1);
    if (now.hour() < 10) lcd.print("0");
    lcd.print(now.hour(), DEC);
    lcd.print(':');
    if (now.minute() < 10) lcd.print("0");
    lcd.print(now.minute(), DEC);
    lcd.print(':');
    if (now.second() < 10) lcd.print("0");
    lcd.print(now.second(), DEC);
    }
  if  ( (now.hour() == on1 )) digitalWrite(releyPin, HIGH);
  if  ( (now.hour() == off1 )) digitalWrite(releyPin, LOW);
  if  ( (now.hour() == on2)) digitalWrite(releyPin, HIGH);
  if  ( (now.hour() == off2 )) digitalWrite(releyPin, LOW);
  
}}

Думаю надо вместо == ставить > Протестирую и будет видно.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Включаться надо не в 7 часов, а в 7часов 0 минут и 0 секунд , если до этого не был включен.

И Выключаться надо не в 9 часов, а в 9часов 0 минут и 0 секунд , если до этого не был выключен.

 

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017
Код немного изменил. Теперь на экран выводится вся информация. Минуты и секунды на LCD не поместятся. Точность мне тоже не нужна. Или есть подводные камни? Если стоит == тогда не включается позже установленого времени, поставил > , включается, когда время больше установленого в условии.

 



 
braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

Еще немного косметики. Отображение секунд вынес в первую строку. Секунды для контроля, что часы тикают.

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "RTClib.h"
LiquidCrystal_I2C lcd(0x3f,16,2);
RTC_DS1307 RTC;
int releyPin = 13;
// Вписываем время включения и выключения
//****************************************
int on1=7; // Включаемся в Часов
int off1=9; // Отключаемся в Часов
int on2=17; // Включаемся в Часов
int off2=22; // Отключаемся в Часов
//****************************************
void setup () {
    Wire.begin();
    RTC.begin();
    lcd.init(); // initialize the lcd
    lcd.backlight();
    pinMode(releyPin, OUTPUT);
  }
void loop() {
  {
    static byte prevSecond = 0;
    DateTime now = RTC.now();
    if (now.second() != prevSecond) {
      prevSecond = now.second();
      //Здесь вывод на дисплей
    lcd.setCursor(0,0);
  lcd.print(on1);
  lcd.setCursor(2,0);
  lcd.print(on2);

lcd.setCursor(7,0);
    if (now.second() < 10) lcd.print("0");
    lcd.print(now.second(), DEC);


lcd.setCursor(12,0);
  lcd.print(off1);
  lcd.setCursor(14,0);
  lcd.print(off2);
  
    lcd.setCursor(0, 1);
    lcd.print("ON-- ");
    if (now.hour() < 10) lcd.print("0");
    lcd.print(now.hour(), DEC);
    lcd.print(':');
    if (now.minute() < 10) lcd.print("0");
    lcd.print(now.minute(), DEC);
    
    lcd.print(" --OFF");
    }
  if  ( (now.hour() > on1 )) digitalWrite(releyPin, HIGH);
  if  ( (now.hour() > off1 )) digitalWrite(releyPin, LOW);
  if  ( (now.hour() > on2)) digitalWrite(releyPin, HIGH);
  if  ( (now.hour() > off2 )) digitalWrite(releyPin, LOW);
  
}}

 

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

Нет не "автоматное", у меня программирование и не "пулеметное", оно больше похоже на хождение по минному полю. Оказалось, что порты работают как-то не одинаково. Если HIGH дать на порты 10 и 11 то одновременно работают, а вот если на 11 и 12 или 10, 12 - не работают одновременно! Наверное кто- то знает ответ на этот случай. Поделитесь пожалуйста.

bwn
Offline
Зарегистрирован: 25.08.2014

braslav пишет:

 Если HIGH дать на порты 10 и 11 то одновременно работают, а вот если на 11 и 12 или 10, 12 - не работают одновременно! Наверное кто- то знает ответ на этот случай. Поделитесь пожалуйста.

Расшифруйте. Вы хотите сказать, что один становится хай, в второй остается лау?