всё, связанное с DC1302
- Войдите на сайт для отправки комментариев
Сб, 09/03/2019 - 15:05
Привет, задумал такой проект: есть кнопка, есть реле, есть DC1302 и ардуино. нужно чтобы реле включалось на некоторое время которое будет отсчитывать DC1302. И вот вопрос: КАК ИСПОЛЬЗОВАТЬ ТО ВРЕМЯ КОTОРОЕ ДАЁТ DC1302? я думал через переменную но не знаю как это осуществить.
Разумеется написать скетч. А если не знаете как написать скетч, то почитать соответствующую литературу.
Почитайте в интернете про unix time.
Думаешь там само рапарситься?
Ну, если чо, так добавить туда мочевины или дрожжей - куда оно денется-то?
... и превратиться строка в массив.
Привет, задумал такой проект: есть кнопка, есть реле, есть DC1302 и ардуино. нужно чтобы реле включалось на некоторое время которое будет отсчитывать DC1302. И вот вопрос: КАК ИСПОЛЬЗОВАТЬ ТО ВРЕМЯ КОTОРОЕ ДАЁТ DC1302? я думал через переменную но не знаю как это осуществить.
А какой смысл от DC1302, можно воспользоваться счетчиком самой ардуино т. к. нет привязки к реальному времени. Но намой взляд это тоже перебор, задача плевая хватит тупо поставить NE555 и будет радость, а то и на одном транзисторе можно сделать. А как использовать DC1302 доступно написано в примере в ардуиноиде.
Всё чуточку поменялось: нужно чтобы реле включалось на два часа каждые сутки, собираюсь использовать уже 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
05
void
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
}
//
12
void
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
}
Похоже Мыши плакали, кололись, но продолжали грызть кактус. Вот зачем вы начали трогать часы. millis() использовать не кормфильно.
Я новичок, и подумал по незнанию что это можно использовать
Проблему полночи Вы как собираетесь решать. Дребезг кнопки как удалять. Опять же цифровые автоматы понимать надо.
может кто поможет с кодом? Хоть подтолкните в нужную сторону.
Нажал на кнопку горит 2 секунды
01
const
byte
btnPin = 2;
02
const
byte
ledPin = 13;
03
// кнопка
04
bool
btn;
05
unsigned
long
btnPast;
06
// лампочка
07
bool
state;
08
const
unsigned
long
time2s = 2000;
09
unsigned
long
past;
10
void
set
(
bool
s) {
11
state = s;
12
past = millis();
13
switch
(s) {
14
case
false
:
15
digitalWrite(ledPin, LOW);
16
break
;
17
case
true
:
18
digitalWrite(ledPin, HIGH);
19
break
;
20
}
21
}
22
void
setup
() {
23
pinMode(btnPin, INPUT_PULLUP);
// кнопка
24
pinMode(ledPin, OUTPUT);
// лампа
25
set
(
false
);
26
}
27
void
loop
() {
28
if
(millis() - btnPast >= 100) {
29
switch
(btn) {
30
case
false
:
31
if
(!digitalRead(btnPin)) {
32
btnPast = millis();
33
btn =
true
;
34
set
(
true
);
35
}
36
break
;
37
case
true
:
38
if
(digitalRead(btnPin)) {
39
btnPast = millis();
40
btn =
false
;
41
}
42
break
;
43
}
44
}
45
switch
(state) {
46
case
false
:
47
break
;
48
case
true
:
49
// истекло 2 секунды
50
if
(millis() - past >= time2s)
set
(
false
);
51
break
;
52
}
53
}
Про подключение кнопки почитай в поиске там понятно написано, а с часов считывай время, переводи в секунды и сравнивай, я так реле времени делал, просто и работает
Ладно, спасибо! Буду разбираться. Отпишусь если будут проблемы.
01
long
t_on, t_off, t_real;
//время включения, отключения, реальное время
02
byte
sum, sum1;
// переменные для определения изменения одного из каналов
03
byte
h, m, s, h_on, m_on, h_off, m_off, can;
// промежуточные переменные для вычисления времени в секундах(сразу вставлять формулу считает не коректно хз почему)on_off- переменная для устранения бага с мерцающим светодиодом
04
h = time.Hours;
05
m = time.minutes;
06
s = time.seconds;
07
t_real = h * 3600 + m * 60 + s ;
// реальное время в секундах
08
for
(
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
}
43
for
(
byte
q = 1; q < 9; q = +1)
44
{ sum = sum + sost_cnal[q];
45
}
46
if
(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
}
Принцип действия, вроде должен понять
а что если через переменную? То есть запросить время, перезаписать в переменную, и дальше работать с условиями (if)
наверно это бред, да?