всё, связанное с DC1302
- Войдите на сайт для отправки комментариев
Сб, 09/03/2019 - 15:05
Привет, задумал такой проект: есть кнопка, есть реле, есть DC1302 и ардуино. нужно чтобы реле включалось на некоторое время которое будет отсчитывать DC1302. И вот вопрос: КАК ИСПОЛЬЗОВАТЬ ТО ВРЕМЯ КОTОРОЕ ДАЁТ DC1302? я думал через переменную но не знаю как это осуществить.
Разумеется написать скетч. А если не знаете как написать скетч, то почитать соответствующую литературу.
Почитайте в интернете про unix time.
Думаешь там само рапарситься?
Ну, если чо, так добавить туда мочевины или дрожжей - куда оно денется-то?
... и превратиться строка в массив.
Привет, задумал такой проект: есть кнопка, есть реле, есть DC1302 и ардуино. нужно чтобы реле включалось на некоторое время которое будет отсчитывать DC1302. И вот вопрос: КАК ИСПОЛЬЗОВАТЬ ТО ВРЕМЯ КОTОРОЕ ДАЁТ DC1302? я думал через переменную но не знаю как это осуществить.
А какой смысл от DC1302, можно воспользоваться счетчиком самой ардуино т. к. нет привязки к реальному времени. Но намой взляд это тоже перебор, задача плевая хватит тупо поставить NE555 и будет радость, а то и на одном транзисторе можно сделать. А как использовать DC1302 доступно написано в примере в ардуиноиде.
Всё чуточку поменялось: нужно чтобы реле включалось на два часа каждые сутки, собираюсь использовать уже DS3231(говорят они более точные, и у них функционал больше). + нужно пристроить тактовую кнопку при нажатии на которую реле включится на два часа, независимо какое сейчас время. Немогу написать код, пишу-пишу а толку нету работает либо то, либо то, пытался исправлять - то же самое. Использовал пример из библиотеки, пытался пристроить его, но нет. вот скетч, да и там немного грязно:
#define key 9 // Присваиваем 9 пину имя key #define relay 8 // Присваиваем 8 пину имя relay #include <iarduino_RTC.h> // Подключаем библиотеку iarduino_RTC для работы с модулями реального времени. iarduino_RTC time(RTC_DS1302, 10, 12, 11); // Объявляем объект time для работы с RTC модулем на базе чипа DS1302, указывая выводы Arduino подключённые к выводам модуля RST, CLK, DAT void setup(){ // pinMode(relay , OUTPUT); // Реле на 8 пине pinMode(key , INPUT_PULLUP); // Кнопка на 9 пине Serial.begin(9600); // Инициируем передачу данных в монитор последовательного порта на скорости 9600 бод. time.begin(); // Инициируем работу с модулем. //time.settime(0 , 02 , 18 , 11 , 3 , 19 , 1); // настройка даты и времени } // void loop(){ // if(millis()%1000==0) // Если прошла 1 секунда. Serial.println(time.gettime("d-m-Y, H:i:s, D")); // Выводим время. // if (time.Hours == 21 && time.minutes == 7) digitalWrite(relay , HIGH); if(millis()%5000==0) digitalWrite(relay , LOW); //else digitalWrite(8 , LOW); // Иначе выключить реле //if (time.Hours == 20 && time.minutes == 52) digitalWrite(relay , LOW); // Если сейчас четыре часа ночи, то выключить реле //else digitalWrite(8 , LOW); // Иначе выключить реле (на всякий :) boolean KEY = !digitalRead(9); // Создать переменную хранящюю значения кнопки ! обработка нажатия кнопки if(KEY == 1){ digitalWrite(relay, HIGH); delay(60000); } // Если кнопка нажата, включить реле и подождать 1 min ! обработка нажатия кнопки else digitalWrite(relay , LOW); // Иначе выключить реле ! обработка нажатия кнопки }Похоже Мыши плакали, кололись, но продолжали грызть кактус. Вот зачем вы начали трогать часы. millis() использовать не кормфильно.
Я новичок, и подумал по незнанию что это можно использовать
Проблему полночи Вы как собираетесь решать. Дребезг кнопки как удалять. Опять же цифровые автоматы понимать надо.
может кто поможет с кодом? Хоть подтолкните в нужную сторону.
Нажал на кнопку горит 2 секунды
const byte btnPin = 2; const byte ledPin = 13; // кнопка bool btn; unsigned long btnPast; // лампочка bool state; const unsigned long time2s = 2000; unsigned long past; void set(bool s) { state = s; past = millis(); switch (s) { case false: digitalWrite(ledPin, LOW); break; case true: digitalWrite(ledPin, HIGH); break; } } void setup() { pinMode(btnPin, INPUT_PULLUP); // кнопка pinMode(ledPin, OUTPUT); // лампа set(false); } void loop() { if (millis() - btnPast >= 100) { switch (btn) { case false: if (!digitalRead(btnPin)) { btnPast = millis(); btn = true; set(true); } break; case true: if (digitalRead(btnPin)) { btnPast = millis(); btn = false; } break; } } switch (state) { case false: break; case true: // истекло 2 секунды if (millis() - past >= time2s)set(false); break; } }Про подключение кнопки почитай в поиске там понятно написано, а с часов считывай время, переводи в секунды и сравнивай, я так реле времени делал, просто и работает
Ладно, спасибо! Буду разбираться. Отпишусь если будут проблемы.
long t_on, t_off, t_real; //время включения, отключения, реальное время byte sum, sum1;// переменные для определения изменения одного из каналов byte h, m, s, h_on, m_on, h_off, m_off, can; // промежуточные переменные для вычисления времени в секундах(сразу вставлять формулу считает не коректно хз почему)on_off- переменная для устранения бага с мерцающим светодиодом h = time.Hours; m = time.minutes; s = time.seconds; t_real = h * 3600 + m * 60 + s ; // реальное время в секундах for (int i = 100; i < 900; i = i + 100) //цикл перебора значений времени { h_on = EEPROM.read(i + 10);// загружаем из памяти час включения, +10 поправка на ячейку в памяти m_on = EEPROM.read(i + 15);//загружаем из памяти минуту включения, +15 поправка на ячейку в памяти t_on = h_on * 3600 + m_on * 60; // время включения в секундах h_off = EEPROM.read(i + 20);// загружаем из памяти час выключения, +20 поправка на ячейку в памяти m_off = EEPROM.read(i + 25);// загружаем из памяти минуту выключения, +25 поправка на ячейку в памяти t_off = h_off * 3600 + m_off * 60; //время отключения в секундах can = i / 100 + 1;// переменная номера цифрового вывода к которому подключен канал, +1 смещение так как используется со 2-9 вывод if (EEPROM.read(i) == 1)//проверяем включен ли канал { if (sost_cnal[i / 100] == 0) // смотрим состояние канала, если канал выключен { if (t_on <= t_real) // если время включения меньше реального то включаем канал { sost_cnal[i / 100] = 1;// заносим в массив значение состояния канала } } if (sost_cnal[i / 100] == 1) //смотрим состояние канала, если канал включен { if (t_off <= t_real && t_on >= t_real)// проверяем условие в случае когда время выключения в секундах меньше чем время включения { sost_cnal[i / 100] = 0;// заносим в массив значение состояния канала } if (t_on <= t_off && t_off <= t_real)// проверяем условие в случае когда время выключения в секундах больше чем время включения { sost_cnal[i / 100] = 0;// заносим в массив значение состояния канала } } } if (EEPROM.read(i) == 0)//проверяем включен ли канал { sost_cnal[i / 100] = 0;// заносим в массив значение состояния канала } } for (byte q = 1; q < 9; q = +1) { sum = sum + sost_cnal[q]; } if (sum != sum1) { for ( byte w = 1; w < 9; w = w + 1) { if (sost_cnal[w] == 1)// включаем реле { digitalWrite(w, LOW);// переводим вывод в низкое состояние } else if (sost_cnal[w] == 0)//выключаем реле { digitalWrite(w, HIGH);// переводим вывод в высокое состояние } } sum1 = sum; }Принцип действия, вроде должен понять
а что если через переменную? То есть запросить время, перезаписать в переменную, и дальше работать с условиями (if)
наверно это бред, да?