всё, связанное с DC1302

kakakakakakak
Offline
Зарегистрирован: 09.03.2019

Привет, задумал такой проект: есть кнопка, есть реле, есть DC1302 и ардуино. нужно чтобы реле включалось на некоторое время которое будет отсчитывать DC1302. И вот вопрос: КАК ИСПОЛЬЗОВАТЬ ТО ВРЕМЯ КОTОРОЕ ДАЁТ DC1302? я думал через переменную но не знаю как это осуществить.

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

Разумеется написать скетч. А если не знаете как написать скетч, то почитать соответствующую литературу.

nik182
Offline
Зарегистрирован: 04.05.2015

Почитайте в интернете про unix time. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

kakakakakakak пишет:
КАК ИСПОЛЬЗОВАТЬ ТО ВРЕМЯ КОTОРОЕ ДАЁТ DC1302?
Складывать в компостную яму, а потом на удобрения.

Муж_Долговой
Муж_Долговой аватар
Offline
Зарегистрирован: 07.10.2018

ЕвгенийП пишет:

kakakakakakak пишет:
КАК ИСПОЛЬЗОВАТЬ ТО ВРЕМЯ КОTОРОЕ ДАЁТ DC1302?
Складывать в компостную яму, а потом на удобрения.

Думаешь там само рапарситься?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, если чо, так добавить туда мочевины или дрожжей - куда оно денется-то?

Муж_Долговой
Муж_Долговой аватар
Offline
Зарегистрирован: 07.10.2018

... и превратиться строка в массив.

Седой
Offline
Зарегистрирован: 19.02.2019

kakakakakakak пишет:

Привет, задумал такой проект: есть кнопка, есть реле, есть DC1302 и ардуино. нужно чтобы реле включалось на некоторое время которое будет отсчитывать DC1302. И вот вопрос: КАК ИСПОЛЬЗОВАТЬ ТО ВРЕМЯ КОTОРОЕ ДАЁТ DC1302? я думал через переменную но не знаю как это осуществить.

А какой смысл от DC1302, можно воспользоваться счетчиком самой ардуино т. к. нет привязки к реальному времени. Но намой взляд это тоже перебор, задача плевая хватит тупо поставить NE555 и будет радость, а то и на одном транзисторе можно сделать. А как использовать DC1302 доступно написано в примере в ардуиноиде.

kakakakakakak
Offline
Зарегистрирован: 09.03.2019

Всё чуточку поменялось: нужно чтобы реле включалось на два часа каждые сутки, собираюсь использовать уже DS3231(говорят они более точные, и у них функционал больше). + нужно пристроить тактовую кнопку при нажатии на которую реле включится на два часа, независимо какое сейчас время. Немогу написать код, пишу-пишу а толку нету работает либо то, либо то, пытался исправлять - то же самое. Использовал пример из библиотеки, пытался пристроить его, но нет. вот скетч, да и там немного грязно:

01#define key 9                                                    // Присваиваем 9 пину имя key
02#define relay 8                                                  // Присваиваем 8 пину имя relay
03#include <iarduino_RTC.h>                                        // Подключаем библиотеку iarduino_RTC для работы с модулями реального времени.
04    iarduino_RTC time(RTC_DS1302, 10, 12, 11);                   // Объявляем объект time для работы с RTC модулем на базе чипа DS1302, указывая выводы Arduino подключённые к выводам модуля RST, CLK, DAT
05void setup(){                                                    //
06    pinMode(relay , OUTPUT);                                     // Реле на 8 пине
07    pinMode(key , INPUT_PULLUP);                                 // Кнопка на 9 пине
08    Serial.begin(9600);                                          // Инициируем передачу данных в монитор последовательного порта на скорости 9600 бод.
09    time.begin();                                                // Инициируем работу с модулем.
10    //time.settime(0 , 02 , 18 , 11 , 3 , 19 , 1);               // настройка даты и времени
11}                                                                //
12void loop(){                                                     //
13    if(millis()%1000==0)                                         // Если прошла 1 секунда.
14      Serial.println(time.gettime("d-m-Y, H:i:s, D"));           // Выводим время.
15                                                                 //  
16     if (time.Hours == 21 && time.minutes == 7) digitalWrite(relay , HIGH);
17      if(millis()%5000==0)
18     digitalWrite(relay , LOW);
19     //else digitalWrite(8 , LOW);                                 // Иначе выключить реле
20     //if (time.Hours == 20 && time.minutes == 52)   digitalWrite(relay , LOW);           // Если сейчас четыре часа ночи, то выключить реле
21     //else digitalWrite(8 , LOW);                                 // Иначе выключить реле (на всякий :)
22     boolean KEY = !digitalRead(9);                              // Создать переменную хранящюю значения кнопки             ! обработка нажатия кнопки
23     if(KEY == 1){  digitalWrite(relay, HIGH); delay(60000); }   // Если кнопка нажата, включить реле и подождать 1 min     ! обработка нажатия кнопки
24     else digitalWrite(relay , LOW);                             // Иначе выключить реле                                    ! обработка нажатия кнопки
25}

 

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

Похоже Мыши плакали, кололись, но продолжали грызть кактус. Вот зачем вы начали трогать часы. millis() использовать не кормфильно.

kakakakakakak
Offline
Зарегистрирован: 09.03.2019

Я новичок, и подумал по незнанию что это можно использовать

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

Проблему полночи Вы как собираетесь решать. Дребезг кнопки как удалять.  Опять же цифровые автоматы понимать надо.

kakakakakakak
Offline
Зарегистрирован: 09.03.2019

может кто поможет с кодом? Хоть подтолкните в нужную сторону.

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

Нажал на кнопку горит 2 секунды

 

Седой
Offline
Зарегистрирован: 19.02.2019

Про подключение кнопки почитай в поиске там понятно написано, а с часов считывай время, переводи в секунды и сравнивай, я так реле времени делал, просто и работает

kakakakakakak
Offline
Зарегистрирован: 09.03.2019

Ладно, спасибо! Буду разбираться. Отпишусь если будут проблемы.

Седой
Offline
Зарегистрирован: 19.02.2019
01long t_on, t_off, t_real; //время включения, отключения, реальное время
02byte sum, sum1;// переменные для определения изменения одного из каналов
03byte h, m, s, h_on, m_on, h_off, m_off, can; // промежуточные переменные для вычисления времени в секундах(сразу вставлять формулу считает не коректно хз почему)on_off- переменная для устранения бага с мерцающим светодиодом
04h = time.Hours;
05m = time.minutes;
06s = time.seconds;
07t_real = h * 3600 + m * 60 + s ; // реальное время в секундах
08for (int i = 100; i < 900; i = i + 100) //цикл перебора значений времени
09{
10  h_on = EEPROM.read(i + 10);// загружаем из памяти час включения, +10 поправка на ячейку в памяти
11  m_on = EEPROM.read(i + 15);//загружаем из памяти минуту включения, +15 поправка на ячейку в памяти
12  t_on = h_on * 3600 + m_on * 60; // время включения в секундах
13  h_off = EEPROM.read(i + 20);// загружаем из памяти час выключения, +20 поправка на ячейку в памяти
14  m_off = EEPROM.read(i + 25);// загружаем из памяти минуту выключения, +25 поправка на ячейку в памяти
15  t_off = h_off * 3600 + m_off * 60; //время отключения в секундах
16  can = i / 100 + 1;// переменная номера цифрового вывода к которому подключен канал, +1 смещение так как используется со 2-9 вывод
17  if (EEPROM.read(i) == 1)//проверяем включен ли канал
18  {
19    if (sost_cnal[i / 100] == 0) // смотрим состояние канала, если канал выключен
20    {
21      if (t_on <= t_real) // если время включения меньше реального то включаем канал
22      {
23        sost_cnal[i / 100] = 1;// заносим в массив значение состояния канала
24      }
25    }
26    if (sost_cnal[i / 100] == 1) //смотрим состояние канала, если канал включен
27    {
28      if (t_off <= t_real && t_on >= t_real)// проверяем условие в случае когда время выключения в секундах меньше чем время включения
29      {
30        sost_cnal[i / 100] = 0;// заносим в массив значение состояния канала
31      }
32      if (t_on <= t_off && t_off <= t_real)// проверяем условие в случае когда время выключения в секундах больше чем время включения
33      {
34        sost_cnal[i / 100] = 0;// заносим в массив значение состояния канала
35      }
36    }
37  }
38  if (EEPROM.read(i) == 0)//проверяем включен ли канал
39  {
40    sost_cnal[i / 100] = 0;// заносим в массив значение состояния канала
41    }
42}
43for (byte q = 1; q < 9; q = +1)
44{ sum = sum + sost_cnal[q];
45}
46if (sum != sum1)
47{
48  for ( byte w = 1; w < 9; w = w + 1)
49  {
50    if (sost_cnal[w] == 1)// включаем реле
51    {
52      digitalWrite(w, LOW);// переводим вывод в низкое состояние
53    }
54    else if (sost_cnal[w] == 0)//выключаем реле
55    {
56      digitalWrite(w, HIGH);// переводим вывод в высокое состояние
57    }
58  }
59 
60  sum1 = sum;
61}

 

Седой
Offline
Зарегистрирован: 19.02.2019

Принцип действия, вроде должен понять

kakakakakakak
Offline
Зарегистрирован: 09.03.2019

а что если через переменную? То есть запросить время, перезаписать в переменную, и дальше работать с условиями (if)

 

kakakakakakak
Offline
Зарегистрирован: 09.03.2019

наверно это бред, да?