Ви не увійшли.
Сторінки 1
Вам нужно было раз в сутки и раз в 30 минут. Откуда взялось 10 ч и 5 минут? Для начала объясните подробно и точно что нужно делать. Ну и посмотрите примеры и описание библиотеки https://playground.arduino.cc/Code/SimpleTimer/
Виноват. Подумал, что тут умеют читать мысли.
Надо чтобы раз в сутки одно реле включалось на 10 часов, остальное время оно выключено. А второе выключалось на 5 минут в течение каждых 30 минут, а остальные 25 минут оно включено.
Гайвер? ФИ!!!! Уж лучше на ардуиновской библиотеке
#include <SimpleTimer.h> #define RELAY1 3 #define RELAY2 5 #define PERIOD_1 86400000 // период первой задачи #define PERIOD_2 1800000 // период второй задачи SimpleTimer timer1; SimpleTimer timer2; void rele_1() { digitalWrite(RELAY1, !digitalRead(RELAY1)); } void rele_2() { digitalWrite(RELAY2, !digitalRead(RELAY2)); } void setup() { pinMode(RELAY1, OUTPUT); pinMode(RELAY2, OUTPUT); // digitalWrite(RELAY1,HIGH); // если нужно задаем // digitalWrite(RELAY2,HIGH); // начальное состояние реле при старте timer1.setInterval(PERIOD_1, rele_1); timer2.setInterval(PERIOD_2, rele_2); } void loop() { timer1.run(); timer2.run(); }
Хорошо. А как она мне отключит реле в течение суток на 10 часов? А для второго реле включит на 5 минут?
То, что вы вырвали http://forum.arduino.ua/viewtopic.php?pid=29162#p29162 (пост #8) может в исходной программе и работает.
Но в том виде который вы привели это просто набор символов.У вас получилось из этого решить свою задачу ?
Да, всё чётко работает. Даже если точность +- минута, меня всё-равно устраивает
Да, но в том коде, что я у него взял, библиотеки вообще не участвуют
Всем спасибо за ответы!
Нашёл решение у AlexGyver. Слепил из двух кусочков. Проверял на секундах - вроде работает, но только со второго периода. Вот если кому интересно.
#define RELAY1 3
#define RELAY2 5
#define PERIOD_1 86400000 // период первой задачи
#define PERIOD_2 1800000 // период второй задачи
unsigned long timer_1, timer_2, timer_3;
void setup() {
pinMode(RELAY1, OUTPUT);
pinMode(RELAY2, OUTPUT);
}
if (millis() - timer_1 > PERIOD_1) { // условие таймера
timer_1 = millis(); // сброс таймера
uint32_t now = millis();
while (millis () - now < 36000000) {
digitalWrite(RELAY1, HIGH)
}
digitalWrite(RELAY1, LOW)
}
if (millis() - timer_2 > PERIOD_2) {
timer_2 = millis();
uint32_t now2 = millis();
while (millis () - now2 < 300000) {
digitalWrite(RELAY2, HIGH)
}
digitalWrite(RELAY2, LOW)
}
}
Раз в сутки не важно, главное выдержать заданное время.
Подскажите, пожалуйста, как это сделать?
У меня к одной ардуине подключено 2 реле. Нужно, чтобы одно включалось и выключалось 1 раз в сутки, а другое - каждые пол часа. Но время просто суммируется и оба реле включаются и выключаются раз в сутки + полчаса. Есть возможность разделить?
#define PIN_RELAY1 5
#define PIN_RELAY2 3
void setup()
{
pinMode(PIN_RELAY1, OUTPUT);
digitalWrite(PIN_RELAY1, HIGH);
pinMode(PIN_RELAY2, OUTPUT);
digitalWrite(PIN_RELAY2, HIGH);
}
void loop()
{
digitalWrite(PIN_RELAY1, LOW);
delay(43200000);
digitalWrite(PIN_RELAY1, HIGH);
delay(43200000);
digitalWrite(PIN_RELAY2, LOW);
delay(300000);
digitalWrite(PIN_RELAY2, HIGH);
delay(1800000);
}
Сторінки 1