Применение millis для нескольких процессов

restiv
Offline
Зарегистрирован: 03.01.2016

qwone пишет:

vosara,поправил ваш скетч

/***/
#define RelPin1 5
#define RelPin2 9 //Например реле 2 на 6-м пине

enum {sRel_12ON = 0, sRel_1OFF, sRel_2OFF};
uint32_t time = 0;
uint8_t state = sRel_12ON;
uint32_t period = 0;// Период для ВК 1го и 2го-реле

//------------------------------
void setup() {
  pinMode(RelPin1, OUTPUT);
  pinMode(RelPin2, OUTPUT);
  Serial.begin(115200);          
  Serial.println("Test start");
}                               
void loop() {                 
  if ((millis() - time) >= period)  {
    time = millis();
    switch (state) {
      case sRel_12ON:
        state = sRel_1OFF;
        digitalWrite(RelPin1, HIGH );
        digitalWrite(RelPin2, HIGH );
        period = 20000; // Период для ВЫК 1го-реле
        break;
      case sRel_1OFF:
        state = sRel_2OFF;
        digitalWrite(RelPin1, LOW);
        period = 60000;// Период для ВЫК 2го-реле
        break;
      case sRel_2OFF:
        state = sRel_12ON;
        digitalWrite(RelPin2, LOW);
        period = 120000;// Период для ВК 1го и 2го-реле
        break;
    }
  }
}
/**/

vosara, qwone и всем кто принимал участие в дискусии и помогал огромное спасибо. Код работает, правда пока только в Протеусе, но думаю и на железе заработает. Еще раз СПАСИБО!!!!!

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

restiv пишет:

Вчера до поздна сидел с этим кодом. Залил эмуляцию в Протеус и долго наблюдал за работой скетча. И до меня дошло, что при такой стурктуре скетча моя задача просто никогда не будет выполняться.

#define relay1 5
#define relay2 9 //Например реле 2 на 6-м пине

void setup(){
  pinMode(relay1, OUTPUT); 
  pinMode(relay2, OUTPUT);

  Serial.begin(115200);          //Запускаем сом-порт
  Serial.println("Test start");
    
}                               // КОНЕЦ ИНИЦИАЛИЗАЦИИ

void loop()                     // ПРОГРАММЫй безусловный ЦИКЛ 
{
   static bool state1;
   static unsigned long time;
   if((millis() - time) > (state1 ? 1000 : 5000)) // уменьшил цифры на 3 порядка, чтобы не ждать сутки :)
   {
      state1 = !state1;
      digitalWrite(relay1, state1);
      Serial.print("relay1:");
      Serial.println(state1);
      
      time = millis();
   }
   //Для второго реле
   static bool state2;
   static unsigned long time2;
   if((millis() - time2) > (state2 ? 3000 : 5000)) // уменьшил цифры на 3 порядка, чтобы не ждать сутки :)
   {
      state2 = !state2;
      digitalWrite(relay2, state2);
      Serial.print("relay2:");
      Serial.println(state2);
      
      time2 = millis();
   }
}

Поскольку постоянно будет происходить сдвиг в запуске реле на величину разницы в отключении первого и второго реле.

И по этой причине возникает вопрос. Как можно изменить код, чтобы реле одновременно включались, но отключались в разное время и через определенный интервал, снова 2 реле одновременно запускались и отключались в разное время и т.д.??? Получается я должен отсчитывать время запуска реле посредсвом команды millis, но вот для отсчета времени их отключения нужно использовать какой то другой таймер времени. Который будет только отсчитывать время с момента включения и до момента когда реле нужно отключить.

Задача решается банальным конечным автоматом.

А запутались Вы потому, что почему-то решили, что автомат может иметь только два состояния.

А состояний - три:

1 - включены оба реле,

2 - одно из реле отключилось, а второе еще включено,

3 - оба реле отлючены.

Собственно, переделайте переменную состояний с булевой на целую и откорректируйте условия переходов 1-2, 2-3 и 3-1.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Тогда уж сразу стоит ввести 4 состояния: "всё выключено", "первое релевключено, второе выключено", "первое реле выключено, второе включено" и "всё включено". Или оставить только 2 состояния "вкл", "Выкл", но создать ДВА автомата по количеству реле.

P.S. Ну и ещё, важный момент в автоматном проектировании кода: "состояние" конечного автомата (программы) - это то, что может длиться достаточно долго. А вот то, что переводит автомат из одного состояния в другое - есть "действие" конечного автомата. Есть особый класс неявных "действий" - перевод автомата в иное состояние по истечению времени. Как правило программируется единообразно и составляет ядро библиотеки КА.

Обучая детишек в 5-м классе программированию КА, внезапно обнаружил, что для них это ни разу не тривиально: что считать состоянием КА и где и как применять "действия".

P.P.S. Как пример, всё тот же наш "умный светофор" (специально левый, автор переложит сам): Есть "кнопка пешехода". По нажатию которой должен "мигнуть" светодиод и код должен сплюсовать пешехода. Как только пешеходов набралось заданное кол-во, надо перевести автомат самого светофора в "мигающий зеленый" (далее он сам переключится на красный)..

Сколько тут "автоматов" и их "состояний"? :)

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Вообще-то скетч выше это скорее недоавтомат или не автомат. 

/***/
unsigned long mill;// переменная для millis()
//----------------------------------------
class Cl_Device {
  protected:
    byte pin1, pin2;
    enum {sOFF = 0, sRel_12ON, sRel_1OFF, sRel_2OFF};
    unsigned long past;
    byte state;
    void stand(byte s) {
      state = s;
      past = mill;
      switch (state) {
        case sOFF:
          digitalWrite(pin1, LOW );
          digitalWrite(pin2, LOW );
          break;
        case sRel_12ON:
          digitalWrite(pin1, HIGH );
          digitalWrite(pin2, HIGH );
          break;
        case sRel_1OFF:
          digitalWrite(pin1, LOW);
          break;
        case sRel_2OFF:
          digitalWrite(pin2, LOW);
          break;
      }
    }
    
  public:
    Cl_Device(byte p1, byte p2): pin1(p1), pin2(p2) {}
    void init() {
      pinMode(pin1, OUTPUT);
      pinMode(pin2, OUTPUT);
      stand(sOFF);
    }
    void run() {
      if (state == sRel_12ON && mill - past >= 20000) stand(sRel_1OFF);
      if (state == sRel_1OFF && mill - past >= 60000) stand(sRel_2OFF);
      if (state == sRel_2OFF && mill - past >= 120000) stand(sRel_12ON);
    }
    void start() {
      stand(sRel_12ON);
    }
};
//-----Компоновка--------------------------
Cl_Device Device(/*пин реле 1*/5,/*пин реле 2*/9);
//-------main()-----------------------
void setup() {
  Device.init();
  Device.start();
}
void loop() {
  mill = millis();
  Device.run();
}
/**/

Опять же народ путает что такое состояние. Состояние это что однократно должно быть сделано и перевод переменной state в значение этого состояния.  А переход это вычисление условий этого перехода. Самые сложные автоматы это ПЛИС и Процессоры. А то что детишки в автоматах не разбираются. Так и взрослые не очень сильно разбираются в ПЛИС логике и в процессорах, куда там детишкам.

Efim
Offline
Зарегистрирован: 04.05.2018

vosara, qwone

Ребята не хочу вас огорчать  но вы допустили ошибки.  В обоих случаях первое реле отключится через 20 секунд, а второе через 80 секунд.

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

Efim пишет:

vosara, qwone

Ребята не хочу вас огорчать  но вы допустили ошибки.  В обоих случаях первое реле отключится через 20 секунд, а второе через 80 секунд.

Вы на полном серьезе считаете это ОШИБКОЙ? Или это юмор?
Никто не делал законченую программу для заказчика, был дан один из вариантов ответа на вопрос в начале топика. А если поменять цыфру из 60000 на 40000 или 140000 (в зависимости от задачи) проблема тогда да, это ОШИБКА
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

restiv пишет:

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

"Я битый час вертел в руках солонку, и вдруг меня пронзило: «В этом — соль!»" (Л. Филатов)

Efim
Offline
Зарегистрирован: 04.05.2018

vosara

Ну если так задумано и расчет был что оно должно отключится через  минуту 20 то да все ок)

Но если вы расчитывали что оно отключится через 60, то дальше в коде погрешность увеличется еще на 2 минуты, и так с каждым циклом.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

qwone пишет:
... Опять же народ путает что такое состояние. Состояние это что однократно должно быть сделано и перевод переменной state в значение этого состояния.  А переход это вычисление условий этого перехода.

Да, вот и Вы совершили ту же самую ошибку что и мои детишки. :)

состояние - не зависит от того сколько раз оно должно быть сделано: однократно или многократно. Вычисление условий как раз и определяет НОВОЕ состояние и его переход - т.е. это - "действие" в том или ином виде текущего состояния. При отсутствии изменения условий - автомат находится в некотором состоянии и до тех пор пока эти условия НЕ ИЗМЕНЯТСЯ он в нем и будет торчать. Некоторые условия изменяются "по времени" - держим состояние заданное время, затем меняем на следующее. Некоторые условия сокрыты в процессе вычисления условий - поток входных симоволов какого-нибудь парсера (пример в вики) - факт обработки предыдущего символа, и переход к следующему и есть "условие". И т.д.

:)

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Arhat109-2, Вы это завязывайте с ... ну с тем что употребляете. Форум про Ардуину. Раздел Программирование. И конечные Автоматы применимо к этой тематике. А то что они могут существовать еще в механике и электронике, так это идите туда и им рассказывайте. В программировании это банально методика решить конкретную задачу и не больше.  И да всякое компьютеное моделирование тоже за борт. Ну мало в Ардуине вычислительных ресурсов. 

ПС: Не завидую детишкам. Попался дядя ....

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

qwone пишет:

Состояние это что однократно должно быть сделано и перевод переменной state в значение этого состояния.  А переход это вычисление условий этого перехода. 

Вы, простите, какой автомат имеете в виду? Автомат Мура или автомат Мили? А то пока получается как у деда Щукаря: "Самокритика, - это когда я сам критикую".

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

ЕвгенийП пишет:
Вы, простите, какой автомат имеете в виду? Автомат Мура или автомат Мили? А то пока получается как у деда Щукаря: "Самокритика, - это когда я сам критикую".
Не знаю я таких оружейников.  Вот только задание темы вроде включением 2-х реле по времени. И vosara написал скетч, а я поправил. И пошла тема об оружии. Вы там тоже что то детишкам в школе про оружие говорили. Так что оружие в школе это вещь, если оно у тебя  и много патронов.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Так про автоматы вроде Вы заговорили, а не я. Я лишь попытался уточнить какие именно Вы имеете в виду. Ну, не хотите говорить - не надо. Секретничайте дальше.

Кстати, бреда про оружие не понял. И причём тут оружие вообще? Об оружии я общаюсь на другом форуме.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Arhat109-2 пишет:

Тогда уж сразу стоит ввести 4 состояния: "всё выключено", "первое релевключено, второе выключено", "первое реле выключено, второе включено" и "всё включено".

Можно вводить сколько угодно состояний, но только 3 из них когда-либо будут реализованы, остальные (кроме трех) не будут использоваться никогда. Поэтому остановиться на цифре 3 в данном случае представляется вполне разумным.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

ЕвгенийП пишет:

Так про автоматы вроде Вы заговорили, а не я. Я лишь попытался уточнить какие именно Вы имеете в виду. Ну, не хотите говорить - не надо. Секретничайте дальше.

Наверно потому что эти автоматы так же не реально организовать на языке Си, как автомат Узи или автомат Томпсон. Или у вас уже есть наработки в этом направлении.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Вы ... выпили? Ощущение такое, что мы о разных вещах говорим.  Какие "эти"? Почему нереально? Вы о чём?

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

ЕвгенийП пишет:

Вы ... выпили? Ощущение такое, что мы о разных вещах говорим.  Какие "эти"? Почему нереально? Вы о чём?

О том о чем и вы. Вы же рискнули блеснуть эрудицией . Так покажите вашу эрудицию в полезном для форумчан коде. Или это идет треп не о чем.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Увольте, я всего лишь спросил какой именно автомат Вы имеете в виду, потому что не до конца понял Ваш пассаж с переходом. Вместо того, чтобы нормально ответить, Вы зачем-то нарываетесь на холивар. Зачем?

И что такого трудного в их реализации на С? Не понимаю.

И, да, кстати, если Вы и впрямь хоть раз в жизни реализовывали какой-либо автомат с выходом, то погуглив наконец названия, о которых я говорю, Вы с удивлением обнаружите, что один из них Вы и реализовывали. Как Журден, который страшно удивился, что всю жизнь говорил прозой.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

ЕвгенийП пишет:
Вы зачем-то нарываетесь на холивар. Зачем?
Я прямо говорю. Что Мур или Милли здесь бесполезен. Ну не тот механизм. Он работает на "железе" . Для софта надо искать другие похожие приемы о которых ни Мур ни Милли не говорил.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

:) Занавес. Закругляйтесь, Евгений. Это - биспалезна. (зато читать весело).. :)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

qwone пишет:
я прямо говорю. Что Мур или Милли здесь бесполезен.

На самом деле Вы прямо сказали, что знания об автоматах у Вас на уровне "слышал такое слово". Прокачайте. И самому полезно и клоуном быть перестанете.

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

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ЕвгенийП пишет:

qwone пишет:
я прямо говорю. Что Мур или Милли здесь бесполезен.

На самом деле Вы прямо сказали, что знания об автоматах у Вас на уровне "слышал такое слово". Прокачайте. И самому полезно и клоуном быть перестанете.

А зачем прокачивать?

Вот я, например, сам изобрел некоторый механизм решения задач.

Еще в эпоху "до Интернета".

А позже, уже из Интернета выяснил, что то, что я изобрел, какой-то мужик изобрел раньше, чем я, и что это изобретение принято называть конечным автоматом.

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

Цитата:

Для справки: ... Существует теорема об их "равномощности" и "взаимопреобразуемости".

Теперь тем более не вижу смысла выяснять фамилию мужика.

Наверное, я изобрел сразу оба, т.к. при использовании не вижу разницы. Для меня изменения происходят не "до" и не "после", а "во время", ибо я не вижу разницы между двумя фрагментами линейного кода:

  do_something();
  state = nextState;

и

  state = nextState;
  do_something();

при условии, что do_something() не использует значение state.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

andriano пишет:

А зачем прокачивать?

А Вы читали, что он писал? Прокачивать знания нужно, чтобы такого не писать.

andriano пишет:

ибо я не вижу разницы между двумя фрагментами линейного кода:

Ваш код не имеет отношения к тому, что я говорил, Вы невнимательно прочитали.

В автомате Мура действие происходит после перехода в состояние всегда, независимо от того из какого состояния и по какой причине был переход. Т.е. действие является функцией только конечного состояния. А в автомате Мили, действие проихсодит на переходе и выполнение действия зависит от исходного состояния и управляющего воздействия. Как видите разница в в подходах к проектированию логики автомата. Есть задачи, где удобнее одно, а есть - где другое.

 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

В таком разе, надо начинать не с "к какому типу КА относится перестановка линейного кода", а к тому что вообще наличие переменной state и свича по ней - ещё не совсем "конченный автомат", да и наверное ещё и не автомат даже.. а то так можно каждый свитч в программе обозвать "автоматом"... :)

P.S. И да, тоже вспомнилось: в году так 2000-м, после 2-3 лет разработки БД на базе разных Access и прочих РА, "изобрел" хранение данных "повдоль таблицы" .. удобна, сил нет! Динамическое добавление свойств-полей, да "на раз", запросы с поиском посложнее, но тоже "на раз-два" .. красота. Динамический саморазвиваемый рубрикатор товаров - ляпота просто. И только позже, году к 2009-у внезапно (на собеседовании) узнал что это оказывается аж целая "модель EAV аж самого Тенцера" .. о как. А примерно через годик-два, разбирая завалы на ещё "Парадоксе" из под ДОС в одной из фирм, внезапно нашел аналогичное применение "EAV" от .. 1997 года.

Может оно и "все равно" как называется .. но варианты применений во всех трех случаях - были "на лице". Ни разу не отменяет читать нечто полезное.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ЕвгенийП пишет:

А Вы читали, что он писал? Прокачивать знания нужно, чтобы такого не писать.

Не поручусь, что приведу Вашу цитату дословно, но ручаюсь, что смысл передаю правильно "Не указывайте мне, что мне писать, а что нет". И если заменить "мне" на "ему" основная мысль, содержащаяся в Вашем высказывании, как мне кажется, не поменяется.

Цитата:

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

==== конец цитаты ==== (и как бороться с форматированием этого форума?)

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

Лично я не понимаю: если для каждой конкретной задачи я делаю тот или иной автомат, то зачем мне нужно знать, с фамилией какого из двух мужиков ассоциируется этот подход?

Вот знаете, наверное, все в школе учат таблицу умножения. Но кое-где учат еще и таблицу сложения. Т.е. в разных странах по-разному определяют, что ребенок должен учить, а до чего он должен быть способен додуматься самостоятельно.

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

Но все то остальным (кто самостоятельно может додуматься до идеи конечного автомата) это зачем?

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

andriano пишет:
... это зачем?
А зачем вообще нужна специальная терминология? Если я использую нечто, имеющее электрическое сопротивление, нахрена мне знать, что это нечто называется «резистор»? От того, что я буду (или не буду) это знать что-то изменится в токах и напряжениях? Или что?

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

Вот в данном случае, я не понял слов человека и спросил о каком типе автомата речь. Короткий ответ снял бы мой вопрос. Но ответа я не получил (если хамство ответом не считать).

Я не понял, что Вы мне пытаетесь доказать? Что знания не нужны, если голова есть? Так, не надо. В том, что знания необходимы (особенно тому, у кого есть голова) я убеждён настолько, что переубедить меня невозможно.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Arhat109-2 пишет:
узнал что это оказывается аж целая "модель EAV аж самого Тенцера"
Ну, я уже вспоминал здесь беднягу Журдена, который к сорока годам вдруг узнал, что всю жизнь говорил прозой.

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

andriano пишет:
как бороться с форматированием этого форума?

Вставлять не Ctrl+V а Ctrl+Shift+V.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

ЕвгенийП пишет:
А зачем вообще нужна специальная терминология? Если я использую нечто, имеющее электрическое сопротивление, нахрена мне знать, что это нечто называется «резистор»? От того, что я буду (или не буду) это знать что-то изменится в токах и напряжениях? Или что?
Терминология нужна для определения для ввода понятий и определений которые отсутсвуют в обычной отличной от отрасли жизни. А специальная терминология нужна для скрытого издевательства над не посвящеными-лохами. Вот Вы например сделали работу и Вам не заплатили. Вы говорите :Где деньги? А вас утопили в поносе слов из специальной терминологии. Вот ответ есть, а денег нет. А потом вас обзовут хамом и невеждой. Ну как же это светочь "специальной терминалогии".

ПС: Вот пример когда вводятся термины, а затем ими же человека и запутывают.https://youtu.be/oZrI4veFdo8?t=275

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

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

Оперделенная доля истины в этом тоже присутствует. В частности, на том собеседовании, несмотря на то что применил это самое "хранение повдоль", но не знал(!) что это оказываца аж EAV ("изобретенный" в 2004г) меня и побрили со словами за "терминологию"..

но, конкретно тут несколько иной разрез: Вы пользуетесь этой самой "терминологией", употребляя слова "конченные автомат", но при этом слабо понимаете что далеко не каждый switch(var){} с присвоением нового значения var=... в ветке есть этот самый "автомат". :) И уж тем более, они не разделяются на "Мили/Мура" (и не только) местом присваивания этого var "до или после действия".

Неверное употребление термином говорит только о непонимании вопроса и ни о чем больше. Тогда уж лучше говорить о коде и вовсе "без специальных терминов"

Posol88
Offline
Зарегистрирован: 14.11.2019

ДОброго дня. Люди! если у кого есть время, подскажите где ошибка, пожалуйста. неделю мучаюсь. на выходе HOT время подачи сигнала все время скачет от 10 до 30 секунд. что я не так делаю?

#define ON 10
#define OF 3
#define HOT 9
#define DOP 8
unsigned long TIM;
 void setup() {
  attachInterrupt (1, myES, RISING);
  pinMode (HOT, OUTPUT);
  pinMode (DOP,OUTPUT);
  TIM = ON; 
}

 void loop(){
  
  if (digitalRead(ON)){
        digitalWrite(HOT, HIGH);
  }
  if (millis() - TIM >= (7 * 60 * 1000) ) {
        digitalWrite(HOT, LOW);     
      TIM = millis();
  }
  delay(20);
  }
void myES() {
  digitalWrite(HOT, LOW);
}

 

 

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

Во-первых - неправильно вставляете код: http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii

Posol88
Offline
Зарегистрирован: 14.11.2019

прошу прощения))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

В строке №18 правая часть сравнения имеет совсем не то значение, на которое Вы надеетесь. Попробуйте напечатать её, чтобы убедиться. Ну, и исправляйте.

astwo
Offline
Зарегистрирован: 10.07.2019

Ещё строка 10 сверхидеотизмом попахивает.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

В целом, да, но начать надо с 18-ой. Десятая не так сильно влияет на результат. 

Posol88
Offline
Зарегистрирован: 14.11.2019

такс... 10я строка -  это я приравнял переменную что бы отсчет времени велся с момента нажатия кнопки ON.

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

Green
Offline
Зарегистрирован: 01.10.2015

Какой там бывает посол?)

Posol88
Offline
Зарегистрирован: 14.11.2019

Наш посол на их украину)))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Posol88 пишет:
А в 18й там  я думал что тире ставлю, а поставил минус по ходу... а на что же его заменить?
Я не знаю о чём Вы, какое тире, какой минус ... бред какой-то. 

Я Вам сказал, напечатайте то, что написано в правой части операции сравнения и посмотрите чему оно равно. Вы это сделали? Нет! Тогда нахрена сюда пришли? Чтобы спрашивать советов и игнорировать их?

Пока не сделаете и не покажете результат, разговора не будет. 

Posol88
Offline
Зарегистрирован: 14.11.2019

420 000 миллисикунд там получится должно. то есть нужно вместо примера написать готовое число в миллисикундах? 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Простите, но Вы довели: для особо альтернативно-одарённых, повторяю: напечатайте это значение, посмотрите чему оно равно.

ЕвгенийП пишет:

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

Posol88
Offline
Зарегистрирован: 14.11.2019

мне самому уже смешно, но я не понимаю: "if (millis() - TIM >= (7 * 60 * 1000) ) {" правая часть это сравнения - (7*60*1000) = 420000 т.е. значение в правой части сравнения равно четыреста двадцать тысяч. так как счетчик millis считает в милисекундах значит 420000 миллисикунд оно же 420 секунд и оно же 7 минут.

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

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

Простите, но Вы довели: для особо альтернативно-одарённых, повторяю: напечатайте это значение, посмотрите чему оно равно.

ЕвгенийП пишет:

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

а ведь не напечатает )))

просто Serial.println(7 *....);

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

конченый, посмотри так

Serial.print(7*60*1000);

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Posol88 пишет:

(7*60*1000) = 420000 т.е. значение в правой части сравнения равно четыреста двадцать тысяч. 

Кто тебе это сказал? Набей ему морду, чтоб не брехал! А сам, ну, напечатай ты, мля, наконец это хреново значение, тебе DetSimen уже просто всё написал на тарелочке и в рот положил!

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ua6em пишет:

а ведь не напечатает )))

Значит, разговора не будет. Со мною, по крайней мере.

b707
Offline
Зарегистрирован: 26.05.2017

после строчки TIM = ON и рассуждений про "минус и тире" я уже ничему не удивлюсь в этой ветке.

Похоже ТС весь этот нехитрый код нашел готовым в инете, так как у него самого не хватило бы знаний даже одинарное тире написать :)

Posol88
Offline
Зарегистрирован: 14.11.2019

не, я сам написал по роликам в ютубе. сейчас и с  Serial.print попробую разобраться

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

у меня правильно считает 420000, тока я тут сначала почитал когда-то )))

PS ВОРОТА! Морду бить некому ...