появилисьпроблемы с логикой

shamsing
Offline
Зарегистрирован: 17.06.2014

Приветствую всех кто откликнулся!!

развлекаюсь с ардуиной давненько уже, разные штуки пробовал и вот то ли я устал и недогадываюсь , то ли отупел на работе своей физической.

в чем суть включаю/выключаю реле задача вся на милис, как работает понимаю а вот логику как обработать не соображу. И так к сути :

1) есть условие А, которое выключает реле

2) начинаем считать, спустя допустим  10 минут как выключилось реле

3) нужно включить реле на 1 минуту например

    if (t >= a){                                            // 1) если t больше или равно a то:
      relmotor_flag = false;                                        // Выключаем реле
      motor_flag = false;                                           // Выводим флаг работы реле в стоп
      //__________________________________не работает_________________________________
      if (Refresh + RefreshPeriod < millis()){               // 2) если прошло 10 минут
        relmotor_flag = true;                                // включаем реле
        Serial.println("Refresh start______________________________________________");
        if(RefreshTime + RefreshTimePeriod < millis()){            // 3) если прошла 1 минута
          relmotor_flag = false;                                  // включаем реле
          Serial.println("Refresh wait_____________________________________________________________________________________________");
          Refresh = millis();                       // обнуляем время в переменных для следующего цикла программы
          RefreshTime = millis();
        }
      }

к сожалению я не находил среду разработки в которой можно по шагам посмотреть как будет выполняться программа, как когда то в турбо делфи я в технаре делал, поэтому вписал комментарии в монитор порта что бы выводились, так вот я вижу в мониторе оба этих комментария которые выполняются с частотой выполнения программы несколько раз в секунду по моему .

пока я не начал использовать флаг и просто менял значение на пине ардуины у меня реле истерично щелкало, благо то что  реле не успевало включаться с такой частотой, но и реле это не продлевало жизнь. избежал этого изменением состояния флага, а в конце программы уже в зависимости от состояния флага присваивал значение пину.

я подозреваю что пункт №3 выполняется сразу потому что запуск этого всего происходит грубо говоря в рандомное время , видимо я не в нужный момент обновляю в переменных значение с millis()

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Не нужно вносить одно в условие в другое.
Напишите их одно под другим, а дополнительным условием активации рассматривайте состояние флага.
if (flag1 == false && (Period1 < millis() - Time1)) { flag2 = false; flag1 = true;… }
if (flag2 == false && (Period2 < millis() - Time2)) { flag3 = false; flag2 = true;… }

Дим-мычъ
Offline
Зарегистрирован: 20.03.2021
05  if (Refresh + RefreshPeriod < millis()){               // 2) если прошло 10 минут

 Вряд ли это условие когда-нибудь будет истинным, т.к. millis с начала выполнения кода ,первый раз ,  скорее всего будет меньше 10мин

( это лишь мнение новичка...)) )

------------------

P.S. Виноват, здесь всё как раз верно. Видимо позднее время сказалось))

 

Alexey_Rem
Offline
Зарегистрирован: 09.09.2019

Да, если это проблемы то что тогда катастрофа?

shamsing
Offline
Зарегистрирован: 17.06.2014

sadman41 пишет:
Не нужно вносить одно в условие в другое. Напишите их одно под другим, а дополнительным условием активации рассматривайте состояние флага. if (flag1 == false && (Period1 < millis() - Time1)) { flag2 = false; flag1 = true;… } if (flag2 == false && (Period2 < millis() - Time2)) { flag3 = false; flag2 = true;… }

спасибо кажется понял

shamsing
Offline
Зарегистрирован: 17.06.2014

Alexey_Rem пишет:

Да, если это проблемы то что тогда катастрофа?

катастрофа в том, что у меня сенсор DHT22(AM2302) отваривается и выдает значение "NAN" которое обработать не могу, оно не в стринг переменную не записывается некак не обрабатывается и поэтому условие некоторое не получается выполнить,NAN как я понял избиблиотеки адафрут это "нечего" т.е. даже не ноль и логические операторы не могут это показание обработать, а суть то катастрофы в том что я сменил сенсор припаял к нему сам резистор и на расстоянии пары метров он работает а вот на расстоянии 20 метров от дома в котельную он сначала изредка отваливается, а затем совсем пропадает пока на долго время не выключить питание( питание отдельное на него идёт 5в минус с ардуиной связан, пин на который он подключен менял) сделать не знаю уже что, вывод у меня остался один что проблема в кабеле или в ардуине , но вроде как работает у остальных на большем расстоянии по ютипихе у меня кинута 6категория легранд кабель дорогой качественный

Alexey_Rem
Offline
Зарегистрирован: 09.09.2019

NAN-это обычно not a number-ошибка передачи типа данных в некоторых языках, в адафруте не знаю. А длинный провод - длинные проблемы об этом в ТОЭ пишут, правда в ВУЗах.

Дим-мычъ
Offline
Зарегистрирован: 20.03.2021

[/quote]

 а суть то катастрофы в том что я сменил сенсор припаял к нему сам резистор и на расстоянии пары метров он работает а вот на расстоянии 20 метров от дома в котельную он сначала изредка отваливается, а затем совсем пропадает

[/quote]

Так надо просто уменьшить сопротивление подтягивающего резистора или увеличить диаметр провода.Это типичная проблема для 1-wire шины.

А по поводу котельной , то в ней должны автоматикой заниматься исключительно соответствующие специалисты, иначе "б-бах" может быть. ( говорю это как работавший в этой области)

shamsing
Offline
Зарегистрирован: 17.06.2014

Alexey_Rem пишет:

NAN-это обычно not a number-ошибка передачи типа данных в некоторых языках, в адафруте не знаю. А длинный провод - длинные проблемы об этом в ТОЭ пишут, правда в ВУЗах.

NAN-это обычно not a number-ошибка передачи типа данных так и есть но провод нетакой длинны1й что бы не работало спрашивал на форуме, работает и на больших расстояниях

 

shamsing
Offline
Зарегистрирован: 17.06.2014

Дим-мычъ пишет:

 а суть то катастрофы в том что я сменил сенсор припаял к нему сам резистор и на расстоянии пары метров он работает а вот на расстоянии 20 метров от дома в котельную он сначала изредка отваливается, а затем совсем пропадает

[/quote]

Так надо просто уменьшить сопротивление подтягивающего резистора или увеличить диаметр провода.Это типичная проблема для 1-wire шины.

А по поводу котельной , то в ней должны автоматикой заниматься исключительно соответствующие специалисты, иначе "б-бах" может быть. ( говорю это как работавший в этой области)

[/quote]

у меня котел ТТ самодельный работает исправно но на механике, а она медленная из за инерциоррости , цифровой формат дорог, поэтому делаю на ардуине, обязательно есть 3 варианта защиты от перегрева котла что бы если что то пойдёт не так всё равно перестанет нагревать

shamsing
Offline
Зарегистрирован: 17.06.2014

Дим-мычъ пишет:

 а суть то катастрофы в том что я сменил сенсор припаял к нему сам резистор и на расстоянии пары метров он работает а вот на расстоянии 20 метров от дома в котельную он сначала изредка отваливается, а затем совсем пропадает

[/quote]

Так надо просто уменьшить сопротивление подтягивающего резистора или увеличить диаметр провода.Это типичная проблема для 1-wire шины.

А по поводу котельной , то в ней должны автоматикой заниматься исключительно соответствующие специалисты, иначе "б-бах" может быть. ( говорю это как работавший в этой области)

[/quote]

уменьшеить резистр просто у меня стоит подстроечный, а естьматематическая какая от пропорция или сугубо методом тыка?

кабель сечение увеличить тоже могу, спасибо за совет буду пробовать в выходные

Дим-мычъ
Offline
Зарегистрирован: 20.03.2021

shamsing пишет:

 естьматематическая какая от пропорция или сугубо методом тыка?

 

Методом тыка вернее. )) Уменьшать на 1-2кОм постепенно, пока не заработает.

До 5кОм можно уменьшать смело.

 

 

shamsing
Offline
Зарегистрирован: 17.06.2014

Дим-мычъ пишет:

shamsing пишет:

 естьматематическая какая от пропорция или сугубо методом тыка?

 

Методом тыка вернее. )) Уменьшать на 1-2кОм постепенно, пока не заработает.

До 5кОм можно уменьшать смело.

 

 

понял спасибо 

 

shamsing
Offline
Зарегистрирован: 17.06.2014

в интернетах нашел такую инфу:

"

NaN означает "Not a Number". Иногда датчик не считывает данные и выдает вам значение nan. Вы ничего не можете с этим поделать, но в библиотеке DHT.h есть функция под названием isnan(). Таким образом, вы можете создать резервную переменную, если сохранили последнее правильное значение. Затем вы можете проверить, считывает ли ваш датчик nan, и если он это делает, вы можете распечатать резервную переменную:
 
float temperature;
float bTemperature;
 
temperature = dht.readTemperature();
 
if(!isnan(temperature)){
  Serial.println("param pam pam");
 
}
"
что странно всё равно не обрабатывается хотя с датчика приходит "NaN"
 
shamsing
Offline
Зарегистрирован: 17.06.2014

Дим-мычъ пишет:

shamsing пишет:

 естьматематическая какая от пропорция или сугубо методом тыка?

 

Методом тыка вернее. )) Уменьшать на 1-2кОм постепенно, пока не заработает.

До 5кОм можно уменьшать смело.

 

 

сдеда 5кОм пока что работает без проблем, спасибо за помощь пол года с этой проблемой жил