#1 Re: Програмування Arduino » Помогите доработать цикл » 2016-12-06 22:56:18

Большое спасибо за уделенное вами время моей проблеме. В 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;
}
Спасибо.

#2 Re: Програмування Arduino » Помогите доработать цикл » 2016-12-06 02:34:50

Этот цикл работает тоже отлично. Не могу вставить его во временные рамки. Подскажите пожалуйста как это можна сделать.
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);
}

#3 Re: Програмування Arduino » Помогите доработать цикл » 2016-12-06 02:29:12

Идеи хорошие. С циклом возникли проблемы, когда заходит в цикл не мого сделать чтобы он с этого цикла вышел когда нужно.
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;         
}

#4 Програмування Arduino » Помогите доработать цикл » 2016-12-04 21:08:03

pavlov1984
відповідей: 6

Нужен цикл для включения реле например: 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);
}

Підвал форуму