Ви не увійшли.
Сторінки 1
Нужен цикл для включения реле например: 8:00 включать на 7 секунд и и повторить включение через 5 минут опять на 7 секунд и повторять это до 19:00.
Я сделал чтоб 8:00 включать на 7 секунд (время только для примера), а дальше цикл не получается.
if(hour == h1on[0] && minute == min1on[0] && second == sec1on[0]) // совпадение времини
{
digitalWrite(Relay1, LOW); // включение релле
lcd.setCursor(0, 1);
lcd.print("relle 1 ON");
TimerINTERVAL = millis();
}
{
if(millis() - TimerINTERVAL > per1on[0]*1000) // если прошел период времени.
{
digitalWrite(Relay1, HIGH); // выключаем релле
lcd.clear();
TimerINTERVAL = 0;
}
}
if(hour == h1off && minute == min1off && second == sec1off)
{
digitalWrite(Relay1, HIGH);
}
Неактивний
Разберешься и сможешь применить, то все Ок.
/* генератор вспышек
светодиод -> 13 (Led_pin) 1 горит/ 0 нет
GND -> GND
*/
const int Led_pin = 13 ; // нога светодиода
uint8_t Led ;
void setup() {
pinMode(Led_pin, OUTPUT);
digitalWrite(Led_pin, Led = 0);
}
void loop() {
static uint32_t MILLIS ;
MILLIS = millis() ;
//#1 1000 миллисекунд вычислит. поток 1
static uint32_t past_1 = 0 ;
static uint32_t past1_1 = 0 ;
if (Led && MILLIS - past1_1 >= 2000 ) {// 2000 миллесекунд=2сек длительность вспышеки
digitalWrite(Led_pin, Led = 0);
}
if (MILLIS - past_1 >= 10000) { // 10000 миллесекунд=10сек период вспышек
past_1 = MILLIS ;
digitalWrite(Led_pin, Led = 1);
past1_1 = MILLIS ;
}
}
Остання редакція qwone (2016-12-05 18:47:53)
Неактивний
Идеи хорошие. С циклом возникли проблемы, когда заходит в цикл не мого сделать чтобы он с этого цикла вышел когда нужно.
level1:
if(hour == h1on && minute == min1on && second == sec1on)
{
level:
TimerINTERVAL = millis();
for (a=0; a<5000; a=millis()-TimerINTERVAL)
{digitalWrite(Relay1, LOW);
Serial.print(a);
Serial.print("a=");
TimerINTERVAL1 = millis();
if(hour == h1off && minute == min1off && second == sec1off)
{
digitalWrite(Relay1, HIGH);
goto level1;
}
}
for (b=0; b<2000; b=millis()-TimerINTERVAL1)
{digitalWrite(Relay1, HIGH);
Serial.print(b);
Serial.print("b=");
TimerINTERVAL = 0;
if(hour == h1off && minute == min1off && second == sec1off)
{
digitalWrite(Relay1, HIGH);
goto level1;
}
}
goto level;
}
Неактивний
Этот цикл работает тоже отлично. Не могу вставить его во временные рамки. Подскажите пожалуйста как это можна сделать.
if(hour == h1on && minute == min1on && second == sec1on)
{
TimerINTERVAL = millis() ;
//#1 1000 миллисекунд вычислит. поток 1
static uint32_t past_1 = 0 ;
static uint32_t past1_1 = 0 ;
if (Led && TimerINTERVAL - past1_1 >= 2000 ) {// 2000 миллесекунд=2сек длительность вспышеки
digitalWrite(Relay1, HIGH);
}
if (TimerINTERVAL - past_1 >= 5000) { // 10000 миллесекунд=10сек период вспышек
past_1 = TimerINTERVAL ;
digitalWrite(Relay1, LOW);
past1_1 = TimerINTERVAL ;
Led = 1;
}
}
if(hour == h1off && minute == min1off && second == sec1off)
{
digitalWrite(Relay1, HIGH);
}
Неактивний
Блин. Что там вставлять. Да и код все же оформите вставкой , если приводите его на форуме.
/* генератор вспышек
#1 часы
#2 поддержка реле
реле -> 13 (Relay_pin) 1 вкл/ 0 выкл
GND -> GND
вкл с 8:00:00 до 19:00:00 каждые 5 минут на 7 секунд
*/
//#1
uint8_t HOUR;// время
uint8_t MINUTE;
uint8_t SECOND;
//#2
const uint32_t Time_0N = (8 * 60 + 0) * 60 + 0; // время вкл в сек 8:00:00
const uint32_t Time_OFF = (19 * 60 + 0) * 60 + 0; // время выкл в сек 19:00:00
uint32_t Time;// текущее время в секундах
const int Relay_pin = 13 ; // нога светодиода
uint8_t Relay ;
void setup() {
pinMode(Relay_pin, OUTPUT);
digitalWrite(Relay_pin, Relay = 0);
}
void loop() {
static uint32_t MILLIS ;
MILLIS = millis() ;
//#1 непрерывно вычислит. поток 1
// получить точное время
// uint8_t HOUR= ...
// uint8_t MINUTE= ...
// uint8_t SECOND= ...;
//#2 вычислит. поток 2
static uint32_t past_2 = 0 ;
Time=(HOUR * 60 + MINUTE) * 60 + SECOND;// получить время в секундах
if (Relay && MILLIS - past_2 >= 7000 ) {// 7сек длительность вспышеки
digitalWrite(Relay_pin, Relay = 0);
}
if ( Time >=Time_0N && Time<Time_OFF && MILLIS - past_2 >= 5*60*1000) { // каждые 5 минут период вспышек
digitalWrite(Relay_pin, Relay = 1);
past_2 = MILLIS ;
}
}
Остання редакція qwone (2016-12-06 21:39:05)
Неактивний
Большое спасибо за уделенное вами время моей проблеме. В 3:00 пришла мысля и я решил проблему.
if(hour == h1on && minute == min1on && second == sec1on)
{
b=h1off*3600+min1off*60+sec1off;
}
if (b-(hour*3600+minute*60+second)>0)
{
TimerINTERVAL = millis() ;
//#1 1000 миллисекунд вычислит. поток 1
static uint32_t past_1 = 0 ;
static uint32_t past1_1 = 0 ;
if (Led && TimerINTERVAL - past1_1 >= 2000 ) {// 2000 миллесекунд=2сек длительность вспышеки
digitalWrite(Relay1, HIGH);
Led = 0;
}
if (TimerINTERVAL - past_1 >= 10000) { // 10000 миллесекунд=10сек период вспышек
past_1 = TimerINTERVAL ;
digitalWrite(Relay1, LOW);
past1_1 = TimerINTERVAL ;
Led = 1;
}
}
if(b-(hour*3600+minute*60+second)==0)
{
digitalWrite(Relay1, HIGH);
b=0;
}
Спасибо.
Неактивний
Сторінки 1