не удается настроить millis
- Войдите на сайт для отправки комментариев
Чт, 04/10/2018 - 17:34
Добрый день всем! Прошу сильно не пинать тк еще только учусь. Задача следующая мне нужно выдавать сообщение "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); }
А пальцем провести по коду можете? Вот ведите пальцем от строки к строке и вслух говорите себе. что делается. Так и нароете в каком месте Вы постоянно сдвигаете точку начала отсчёта времени.
я же написал что я еще только учусь. я бы не просил о помощи если бы понимал в чем проблема
Женя! Вот ты снова неправильно помогаешь! Фу, как некрасиво! ;) ;) ;)
я же написал что я еще только учусь. я бы не просил о помощи если бы понимал в чем проблема
rev.t - этот код вы писали сами или где-то нашли в инете?
я же написал что я еще только учусь. я бы не просил о помощи если бы понимал в чем проблема
начинать учиться надо на чем нибудь попроще, раз не понимаете
rev.t, Вы помните, что loop - это бесконечный цикл? Вот представьте себе, что ваша неважная часть кода делает так, что условие в 11 строке всегда выполняется. В 13 строке вы запомнили время от которого считать. В 16-й сравнили его с текущим значением миллис. Логично, что за эти три строчки не 5 секунд прошло - пишем, что всё хорошо. Цикл повторяется. Опять условие выполнено. Значит в 13-й строке Вы запоминаете новое текущее значение миллис. И опять в 16-й строке получится, что всё хорошо. И так далее.
Вот примерно такое рассуждение и имелось ввиду под "вести пальцем". Запоминать время при срабатывании условия нужно один раз, а не двигать его на каждом проходе цикла. Попробуйте это реализовать.
ПС: Не в свое дело вы влезли. Вам бы научиться программированию без языка.
+100500
Современные разработчики/программисты наверное не знают слова алгоритм :(
вот яркий пример на ответ что такое русский подход к обучению можно найти на русских форумах. Если человек ищет помощи то у нас все сбегаются и начинают клевать умничать и делать все кроме помощи и даже не пытаюсь сделать намек. Зарубежный подход это сплоченность и открытость в общении и полное отрицание унижения принижения и полное отсутвие высокомерия. В итоге зарубежем технологические стартапы, упешные технологии и обучение по принципу открытого разума. Зарубежные универы это равенство между учеником и учителем. В России - учитель это нечто стоящее выше по рангу который только проверяет твою работу и назанчает вечные пересдачи. Стартап акселераторы это - вот вы прибыль начните приносить и после приходите за деньгами а не просите у нас на зарплаты себе, на западе - идея с потенциалом, комманда знает куда двигаться, наброски есть - даем деньги в надежде отбить чеез лет 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
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.
Очень печально что у нас в стране так во всем. Тему можно закрывать всем спасибо
Еще не пятница, а срачем уже запахло...
Зарубежный подход это сплоченность и открытость в общении и полное отрицание унижения принижения и полное отсутвие высокомерия.
ну правильно, у них ни в коем случае не принято намекать инвалиду. что он не такой как все... даже если это инвалид умственный и он не в состоянии прочитать пару статей в инете, которых на наглийском-то (коли владеешь) - просто тысячи.
Нет, надо сразу бежать писать сразу на несколько форумов, вместо того чтоб подумать пару минут
ЗЫ кстати - насчет того, ваш этот код или чужой - я спросил не для того, чтобы унизить - а чтобы понять, на каком уровне вам обьяснить ошибку.
Русский форум просто пытается включить тебе моск
Русский форум просто пытается включить тебе моск
Поздно дида, ЕГЭ шагает по планете, а там: "Если мальчик тычет пальчик......".(((((
To TC, почитайте это и это, да и все там почитать можете.
я же написал что я еще только учусь. я бы не просил о помощи если бы понимал в чем проблема
А Вы скажите, только честно, Вы сделали то, что я Вам сказал в самом первом посте? Т.е. Вы вели пальцем по коду, проговаривая вслух что именно делается в каждой строке? Сделали? Я уверен. что нет.
А если "нет", значит ни хрена Вы не учитесь. Я пытаюсь Вас учить, но Вам надо не это - Вам надо,чтобы я сам исправил Вашу ошибку. Но тогда Вы никогда ничему не научитесь.
Так что хотите учиться - делайте, что говорят. А хотите, чтобы сделали за Вас - заказывайте работу за деньги.
Допустим, захотел ты покушать и ходишь, побираешься. Сердобольные буржуи, канешна, тебя накормят, да спросят еще, что ты любишь, да навалят три порции. Ляпота, одним словом. Русские же предлагают тебе научить тебя готовить. Разница в том, что когда ты вновь проголодаешься, ты либо опять побежишь к буржуям клянчить, либо сможешь сделать сам, то, чему тебя пытались научить, а ты отбрыкивался, как мог, забрасывая учителей калом. Выбор за тобой. Здесь тебе не дадут готовых решений на блюдечке, здесь тебе помогут заставить думать мозги в правильном направлении. Запоминается не то, что ты скопипастил, а то что выстрадал сам.
Вообще-то, тебе в посте #1 сделали намёк, что "Вы постоянно сдвигаете точку начала отсчёта времени", а в посте #6 тебе уже безо всяких намёков, прямо всё разжевали. Но ты эти посты не читал, т.к. там нет готового кода, чтобы скопипастить.
Так что, как ты изволил выразиться
и подход этот состоит в том, "сам я ничего не знаю, читать, думать и учиться - нах мне это надо, у меня времении нет, вы все должны не умничать с намёками и советами, а просто сделать мне красиво и побыстрому, т.к. я новичёк, а иначе нахрена вообще форумы?"
Вот такой у нас поход к обучению.
И, да,
To TC, почитайте это и это, да и все там почитать можете.
Ему полезнее вот это почитать. Причём, первые два абзаца можно пропустить, а начать с третьего - он же занятой.