Serial.read() и delay
- Войдите на сайт для отправки комментариев
Пт, 26/02/2016 - 15:31
Проблему описать затруднительно, поэтому сразу приведу пример
.... i = Serial.read(); if(i == 1){ Serial.println(1); delay(10000); } ....
Собственно в чем проблема - если я отправлю 1, то выведет 1, и уйдет в sleep на 10 секунд.
Если я в течении этих 10 секунд еще раз отправлю 1, то через оставшееся время он опять выведт 1 и уйдет на 10 секунд.
Есть ли возможноть как нибудь с этим бороться? Например на это время отключать считывание символов?
Если я в течении этих 10 секунд еще раз отправлю 1, то через оставшееся время он опять выведт 1 и уйдет на 10 секунд.
А должен что вывести, если ничего не должен, то когда тогда должен 1 выводить?
Он ничего не должен выводить. Просто на то время, пока работает скрипт (10 секунд) он не должен принимать данные, или игнорировать их. Тоесть он должен выводить 1, только в том случае, если в данный момент он не в задержке.
А так получается что если данные пришли во время задержки, то он их ставит в очередь и обрабатывает после.
Судя по коду, время которое он не в задержке будет микросекунда, нажать в этот момент будет нереально, и как Вы вообще узнаете, что он не в задержке?
delay там на 10 секунд.
По вопросу может это поможет читать?
Как-то так:
http://arduino.ru/tutorials/BlinkWithoutDelay
не пробовали поситать форум?
http://arduino.ru/tutorials/BlinkWithoutDelay
не пробовали поситать форум?
я сильно извиняюсь, но это тут зачем?
http://arduino.ru/tutorials/BlinkWithoutDelay
не пробовали поситать форум?
я сильно извиняюсь, но это тут зачем?
Как обойтисьбез DELAY
delay(*) - это отсутствие обработки внешних сигналов.
Можно контролировать время задержки без функции delay обрабатывая другие сигналы в это время.
Я внятно объяснил?
Без наездов - это вопрос.
Как обойтисьбез DELAY
delay(*) - это отсутствие обработки внешних сигналов.
Можно контролировать время задержки без функции delay обрабатывая другие сигналы в это время.
Я внятно объяснил?
Без наездов - это вопрос.
Ну, строго говоря, это не совсем верно. При delay обработка внешних сигналов по прерываниям все-таки идет.
Ну и кроме того, использование delay иногда вполне оправдано.
Неясно другое - человек задал вопрос, зачем ему давать разные не совсем относящиеся к теме советы? Еще и в форме отсыла куда-то. На мой скромный взгляд, это делает форум крайне недружелюбном и малоинформативным.
Если вы подозреваете (и, вероятно, весьма оправдано), что постановка вопроса некорректна - может лучше уточнить постановку, чем отсылать?
Ни в коем разе, не хочу учить кого-то и уж тем более наезжать. Просто самого дико утомляет, когда задаешь конкретный вопрос и получаешь 3 страницы ненужных советов и флейма, зато ни одного вразумительного ответа.
Ну, строго говоря, это не совсем верно. При delay обработка внешних сигналов по прерываниям все-таки идет.
Ну и кроме того, использование delay иногда вполне оправдано.
строго говоря, обсуждается код #5, а не, не относящиеся к теме(с) случаи - я не заметил, где в этом коде оправдано превращение контроллера в кирпич на 10 секунд, который можно оживить исключительно прерыванием, что бы снова окирпичить на остаток времени.
На мой скромный взгляд, это делает форум крайне недружелюбном и малоинформативным.
на мой взгляд научно-технический прогресс позволяет дуракам, лентяям и кретинам паразитировать на результатах труда людей разумных - если бы не переизбыток ресурсов, производимых людьми разумными, то весь генетический мусор был бы физически ликвидирован.
Проблему описать затруднительно
Ниче тут не затруднительно. Называется очистка буфера приема. Её Вам после deley надо делать, чтоб удалить все что напринималось до этого момента.
Можна делать begin как писалось выше, но если на момент его вызова ещё не все было передано контролером, то оно потеряется. По хорошему должна быть у Serial специальный метод, но его нет. Я пользую вот это.
http://arduino.ru/tutorials/BlinkWithoutDelay
не пробовали поситать форум?
я сильно извиняюсь, но это тут зачем?
Как обойтисьбез DELAY
delay(*) - это отсутствие обработки внешних сигналов.
Можно контролировать время задержки без функции delay обрабатывая другие сигналы в это время.
Я внятно объяснил?
Без наездов - это вопрос.
как выше объяснили, это не так, и даже Клапауций 322 с этим согласен
как выше объяснили, это не так, и даже Клапауций 322 с этим согласен
что не так и с чем я, даже, согласен?
Вот делать мне нечего, кроме как в ваших дурацких спорах участвовать. Ок, первый и последний раз показываю, дальше хоть запоминайте, что пишете:
delay(*) - это отсутствие обработки внешних сигналов.
превращение контроллера в кирпич на 10 секунд, который можно оживить исключительно прерыванием
Вы же сами написали, что обработка внешних сигналов есть, пусть и прерыванием.
Реально достали чмырить молодеж. Вот если он продолжит задавать тупые вопросы явно не вникая в суть программы, то я первый его пошлю на... Что сразу то набрасываться. Не хочешь помочь - иди мимо, не мешай.
Вы же сами написали, что обработка внешних сигналов есть, пусть и прерыванием.
Мы Клапауций 000-999 написали, что контроллер превращается в кирпич.
Реально достали чмырить молодеж.
Мы Клапауций 000-999 реально объясняем молодёжи, что её(молодёжи) прапарадед были съеден саблезубым тигром в древние времена потому, что он имел глупость погладить красивую кошечку, её(молодёж) прадед был выкормлен прапрабабками человека разумного потому, что был похож на человека, сейчас молодёж оставлена людьми разумными в жывых влачить своё жалкое сусчествование исключительно из жалости к ущербным особям и гуманизму, присущему человеку разумному.
но, это не даёт права ущербным особям возникать и пытаться отстаивать равные с людьми права.