LCD 1602: как заставить мигать текст или значение переменной?
- Войдите на сайт для отправки комментариев
Чт, 17/03/2016 - 21:32
Здравствуйте. В процессе написания программы столкнулся с проблемой. Нужно на экране 1602 сделать так, чтобы значение переменной, либо закоментированный текст, мигали. С операторами lcd.noBlink и lcd.blink добиться желаемого не смог. Может есть у кого какой либо скетч, где это работает?
Да есть. Мигает но не на этих... алгоритм очевиден, пишем текст, ждем, очищаем место где текст, ждем и повторяем с начала.
Аппаратно мигать может только курсор
а именно текст придется стирать-рисовать-стирать, но врядли это будет нормально смотреться
Можно попробовать выделить буфер под текст, менять текст в буфере, а буфер постоянно выводить на дисплей. У DI HALTа так сделано в демке (правда там ассемблер и его RTOS), обновление экрана 5 раз в секунду. Искать строку "Быстрый старт. AVR"
Я делал так. правильно или нет не знаю. но работает. правильность кода не проверял, написал в текстовом редакторе. показал просто вариант решения.
большое спасибо за ответы. сегодня попробую.
Все получилось. Мой рабочий пример. может кому пригодится.
Все получилось. Мой рабочий пример. может кому пригодится.
Зачем создавать переменную для хранения текущего времени? curentmillis, как я понимаю, всегда будет равна millis().
Например для того, чтобы использовать эту переменную еще где нибудь
Если мне нужно использовать текущее время, я использую millis(). без дополнительных переменных. Что я делаю не так? В чем я ошибаюсь? это не сарказм, в программировании новичек. Просветите.
Вопрос философский. Два вызова millis дадут два разных значения и чем дальше эти вызовы, тем больше разница. Иногда это может быть критично. Во вторых, считать значение из переменной быстрее, чем вызов millis. Разумеется все это зависит от задачи. Лично я предпочитаю читать millis в переменную и использовать ее в алгоритме, часто оно используется больше одного раза (сравнить и сохранить).
Если мне нужно использовать текущее время, я использую millis(). без дополнительных переменных. Что я делаю не так? В чем я ошибаюсь? это не сарказм, в программировании новичек. Просветите.
Предпочтительней в начале лупа присвоить millis() переменной и затем использовать её а не вызовы. Однако этот подход дает преимущества только если луп крутится быстро, до десятков мс ну и программа достаточно сложная. Преимущества следующие: выше быстродействие (думаю понятно почему), однозначность прохождения цикла. На этом подробней. Допустим у Вас есть два временных интервала, 1 и 2 мс. Вы логично предполагаете, что за время второго интервала первый всегда будет отмерятся два раза и используете это свойство в программе. Так вот если для измерения времени использовать только один вызов millis() в начале а затем время брать из переменной то чудес нет, в каждом лупе будет одно из: не завершение ни одного интервала, или завершение только короткого или завершение обоих. При индивидуальных вызовах millis() возможен весь спектр вариантов например интервал 2мс завершился в данном цикле а 1мс - нет. И все ети варианты будут гулять, как бог на душу положет, по сложным закономерностям, но не случайным образом как может показатся сразу. Как результат - некоторые из них могут возникнуть очень редко при стечении совершенно левых обстоятельств, гдето прерывание подзадержало луп, где-то кнопку нажали не в тему. В результате этого программа попадет в состояние вызывающее ошибку. Причем по логике ошибка как бы связана с прерыванием или кнопкой, но возникает она в совершенно левом месте. Найти её даже для прожженого профи - задача сверхсложная. Потому проще соломки подстелить...
ИМХО, правильный стиль - луп в начале цикла сохранить millis() (или micros() для гарантировано сильно быстрых задач) в глобальную переменную word, использовать ее в программе вместо millis() (или вместо micros() ) везде, кроме отладки. Почему word - быстрей, компактней и хватает.
Logik, kisoft
Спасибо за разъяснение. я понял в чем разница. В общем оба варианта имеют право на жизнь, главное, правильно и в нужном месте их применять.