не удается настроить millis

rev.t
Offline
Зарегистрирован: 03.10.2018

Добрый день всем! Прошу сильно не пинать тк еще только учусь. Задача следующая мне нужно выдавать сообщение "alarm" если выполняется условие как минимум пять секунд. Если условие не выполняется то соощение "all good". Все вроде бы прописал но не работает как надо. Может у кого есть какие мысли? Спасибо!

/* тут не важная часть кода */
unsigned long alerttime;

void setup()
/* тут не важная часть кода */

void loop(){
  
/* тут не важная часть кода */

  if ((x<=100 || x>=230) && (y>=180 || y<20))
     {
        alerttime = millis();
     }
  if   
     (millis() - alerttime > 5000) { 
     Serial.println(" alarm");
     }
   else
     {
        Serial.println("all good");
     } 
delay(100);
}

 

 

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

А пальцем провести по коду можете? Вот ведите пальцем от строки к строке и вслух говорите себе. что делается. Так и нароете в каком месте Вы постоянно сдвигаете точку начала отсчёта времени.

rev.t
Offline
Зарегистрирован: 03.10.2018

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

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Женя! Вот ты снова неправильно помогаешь! Фу, как некрасиво! ;) ;) ;)

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

rev.t пишет:

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

rev.t - этот код вы писали сами или где-то нашли в инете?

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

rev.t пишет:

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

начинать учиться надо на чем нибудь попроще, раз не понимаете

kalapanga
Offline
Зарегистрирован: 23.10.2016

rev.t, Вы помните, что loop - это бесконечный цикл? Вот представьте себе, что ваша неважная часть кода делает так, что условие в 11 строке всегда выполняется. В 13 строке вы запомнили время от которого считать. В 16-й сравнили его с текущим значением миллис. Логично, что за эти три строчки не 5 секунд прошло - пишем, что всё хорошо. Цикл повторяется. Опять условие выполнено. Значит в 13-й строке Вы запоминаете новое текущее значение миллис. И опять в 16-й строке получится, что всё хорошо. И так далее.

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

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
/* тут не важная часть кода */
unsigned long alerttime;
bool flag = false;//<- вот это вы профтыкали

void setup()
/* тут не важная часть кода */

void loop() {

  /* тут не важная часть кода */

  if (!flag && (x <= 100 || x >= 230) && (y >= 180 || y < 20))
  {
    flag = true;
    alerttime = millis();
  }
  if (flag && millis() - alerttime >= 5000) {
    flag = false;
    Serial.println(" alarm");
  }
}

ПС: Не в свое дело вы влезли. Вам бы научиться программированию без языка. 

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

qwone пишет:

ПС: Не в свое дело вы влезли. Вам бы научиться программированию без языка. 

+100500

Современные разработчики/программисты наверное не знают слова алгоритм :(

rev.t
Offline
Зарегистрирован: 03.10.2018
 if (((x<=100 || x>=230) && (y>=180 || y<20)) == false)
     {
        alerttime = millis();
     }
  if   
     (millis() - alerttime > 5000) { 
     Serial.println(" alarm");
     }
   else
     {
        Serial.println("     good");
     } 

вот яркий пример на ответ что такое русский подход к обучению можно найти на русских форумах. Если человек ищет помощи то у нас все сбегаются и начинают клевать умничать и делать все кроме помощи и даже не пытаюсь сделать намек. Зарубежный подход это сплоченность и открытость в общении и полное отрицание унижения принижения и полное отсутвие высокомерия. В итоге зарубежем технологические стартапы, упешные технологии и обучение по принципу открытого разума. Зарубежные универы это равенство между учеником и учителем. В России - учитель это нечто стоящее выше по рангу который только проверяет твою работу и назанчает вечные пересдачи. Стартап акселераторы это - вот вы прибыль начните приносить и после приходите за деньгами а не просите у нас на зарплаты себе, на западе - идея с потенциалом, комманда знает куда двигаться,  наброски есть - даем деньги в надежде отбить чеез лет 10. И обязатеьно нужно не забывать говорить что человек влез ни туда, если у него что то не получается с первого раза, это ведь так просто) 

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

 

The way to deal with that is to think about it backwards (or upside down).



Reset the timer every time the condition fails and then if the timer gets as far as 5 seconds you know  it is safe to do stuff. Something like this

Code: [Select]

if (condition == false) {
  startMillis = millis();
}
if (millis() - startMillis >= 5000) {
  // condition has been true for 5 secs
}

а еще совет был дан дельный 



...R



PS.. don't mix delay() and millis() in the same program because you will probably miss some of the millis() tests.

 

 Очень печально что у нас в стране так во всем. Тему можно закрывать всем спасибо


 

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

Еще не пятница, а срачем уже запахло...

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

rev.t пишет:

Зарубежный подход это сплоченность и открытость в общении и полное отрицание унижения принижения и полное отсутвие высокомерия.

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

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

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

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

Русский форум просто пытается включить тебе моск

bwn
Offline
Зарегистрирован: 25.08.2014

DetSimen пишет:

Русский форум просто пытается включить тебе моск

Поздно дида, ЕГЭ шагает по планете, а там: "Если мальчик тычет пальчик......".(((((

To TC, почитайте это и это, да и все там почитать можете.

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

rev.t пишет:

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

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

А если "нет", значит ни хрена Вы не учитесь. Я пытаюсь Вас учить, но Вам надо не это - Вам надо,чтобы я сам исправил Вашу ошибку. Но тогда Вы никогда ничему не научитесь.

Так что хотите учиться - делайте, что говорят. А хотите, чтобы сделали за Вас - заказывайте работу за деньги.

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

Допустим, захотел ты покушать и ходишь, побираешься. Сердобольные буржуи, канешна, тебя накормят, да спросят еще, что ты любишь, да навалят три порции.  Ляпота, одним словом.  Русские же предлагают тебе научить тебя готовить.  Разница в том, что когда ты вновь проголодаешься, ты либо опять побежишь к буржуям клянчить, либо сможешь сделать сам, то, чему тебя пытались научить, а ты отбрыкивался, как мог, забрасывая учителей калом. Выбор за тобой.  Здесь тебе не дадут готовых решений на блюдечке, здесь тебе помогут заставить думать мозги в правильном направлении.  Запоминается не то, что ты скопипастил, а то что выстрадал сам. 

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

rev.t пишет:
делать все кроме помощи и даже не пытаюсь сделать намек.

Вообще-то, тебе в посте #1 сделали намёк, что "Вы постоянно сдвигаете точку начала отсчёта времени", а в посте #6 тебе уже безо всяких намёков, прямо всё разжевали. Но ты эти посты не читал, т.к. там нет готового кода, чтобы скопипастить.

Так что, как ты изволил выразиться

rev.t пишет:
ответ что такое русский подход к обучению можно найти на русских форумах

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

Вот такой у нас поход к обучению.

И, да, 

rev.t пишет:
Очень печально что у нас в стране так во всем.

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

bwn пишет:

To TC, почитайте это и это, да и все там почитать можете.

Ему полезнее вот это почитать. Причём, первые два абзаца можно пропустить, а начать с третьего - он же занятой.