Help RTC ds1302

AlexBTR
Offline
Зарегистрирован: 18.12.2016

Подскажите не опытному. Как из часов взять переменную времяни и сделать суточный таймер. Как это должно выглядеть. rtc.getTimeStr() это вроде она. Но ни как не могу допереть как использовать вместе с модулем реле. Millis delay как то не нравиться. Хотелось бы указать что если rtc.getTimeStr() больше 06:00:00 и меньше 23:00:00 то реле вкл

AlexBTR
Offline
Зарегистрирован: 18.12.2016

100р на телефон

AlexBTR
Offline
Зарегистрирован: 18.12.2016

Ну хоть тыкнете где почитать...

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

AlexBTR пишет:
Ну хоть тыкнете где почитать...

ТУТ - примеры внутри библиотеки

AlexBTR
Offline
Зарегистрирован: 18.12.2016

Это я уже видел. Смотрю, почти как баран на новые ворота. Объясни как этим всем пользоваться.

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

AlexBTR пишет:
Это я уже видел. Смотрю, почти как баран на новые ворота. Объясни как этим всем пользоваться.

Да легко!!!
Открываете книжечку С.О Бочков, Д.М.Субботин - Язык программирования СИ для персонального компьютера и со страницы 7 вперёд и с песней

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

AlexBTR пишет:
Хотелось бы указать что если rtc.getTimeStr() больше 06:00:00 и меньше 23:00:00 то реле вкл

Как-то так:

time=rtc.getTimeStr();
if (strcmp(time,"06:00:00")>0 && strcmp(time,"23:00:00")<0) RelayOn();

Только я бы так не стал делать.

AlexBTR
Offline
Зарегистрирован: 18.12.2016

Какой номер телефона

AlexBTR
Offline
Зарегистрирован: 18.12.2016

Почему? И как сделал бы ты?

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

Andy пишет:

AlexBTR пишет:
Хотелось бы указать что если rtc.getTimeStr() больше 06:00:00 и меньше 23:00:00 то реле вкл

Как-то так:

time=rtc.getTimeStr();
if (strcmp(time,"06:00:00")>0 && strcmp(time,"23:00:00")<0) RelayOn();

Только я бы так не стал делать.

Да и не будет работать:
 // Make a new time object to set the date and time.
  // Sunday, September 22, 2013 at 01:38:50.
  Time t(2013, 9, 22, 1, 38, 50, Time::kSunday);

А вот если вытащить и воспользовать String тады да

А это откуда???

rtc.getTimeStr();

Приведите коды DS1302.h и DS1302.cpp
Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

char *DS1302::getTimeStr(uint8_t format)
Работать будет.

Но я бы перевел время в секунды от полуночи и сравнивал бы целые числа.

AlexBTR
Offline
Зарегистрирован: 18.12.2016

#include //библиотека часов DS1302 rtc(13, 12, 10); //13-reset 12-data(резистор 1кОм) 10-clock

rtc.halt(false); rtc.writeProtect(false); rtc.setTime(0, 30, 0); // Set the time to 12:00:00 (24hr format)

// Send time lcd.setCursor(8,0); lcd.print(rtc.getTimeStr()); //считываем время lcd.print(" "); //выводим delay (100);

Это как то так.

https://github.com/siberianice/arduino-ds1302

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

дайте ссылку на используемую "библиотеку"

AlexBTR
Offline
Зарегистрирован: 18.12.2016

ua6em пишет:

дайте ссылку на используемую "библиотеку"

Судя по библиотеке нужно сделать так. для часов

1 DS1302  rtc(22, 23); // Init the DS1307  //22 и 23 пины к которым поключены часы
2 Time  t; // Init a Time-data structure

Time xxx – создает структуру данных с именем xxx для вывода данных о дате и времени при помощи функции getTime. Структура состоит из следующие переменных:

xxx.hour – значение часов
xxx.min – значение минут
xxx.sec – значение секунд
xxx.date – день месяца
xxx.mon – месяц 
xxx.year – год
xxx.dow – день недели

в лупе надо написать

1 t = rtc.getTime(); // Get data from the DS1302

теперь уже

t.hour - час  t.min минута  и тп

а дальше сравнить эти значения"как написал автор" это по I2C

если я правильно понял то через команду if t = time hour и time min 

и как это правильно написать на 4 релюшки

      6 часов                 23 часа       

if (time.hour<=t<=time.hour)

relay on

else

relay off

так сможет работать? 

вот ещё нашел

01 #include <RTC.h>
02 RTC    time;
03 int Relay = 6;
04 void setup() {
05     Serial.begin(9600);
06     pinMode(Relay,OUTPUT);
07     time.begin(RTC_DS1302,4, 3, 2);
08    
09 }
10 void loop(){
11       time.gettime();
12       time.period(30);
13       if (time.Hours==06 && time.minutes==00 && time.seconds==00) // Включается реле в 6 утра
14   {digitalWrite(Relay, HIGH);}
15       
16       if (time.Hours==20 && time.minutes==00 && time.seconds==00) // Выключатся реле в 23:00
17   {digitalWrite(Relay, LOW);}
18      
19

}

спасибо автору

 

AlexBTR
Offline
Зарегистрирован: 18.12.2016

Помошников нет, только советчики.
Для 1302 как мне кажется нужно создать class time?

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

Тихо сам с собою я веде беседу?

Вас же попросили дать библиотеку-то бишь код реализации DS1302