Как прекратить мерцание дисплея без потери функциональности?вот что я имею
- Войдите на сайт для отправки комментариев
Пт, 16/10/2015 - 22:17
//управление нагрузками (светом) при помощи ик пульта и тактовой кнопки. команды ик пульта прописывать отдельно //red green blue можно выкинуть из скетча #include <IRremote.h> #include <Bounce.h> #include <LiquidCrystal.h> //Подключаем библиотеку для работы с LCD LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2); // инициализируем LCD, указывая управляющие контакты //дефайним значения пинов с кнопкой и со светодиодом #define BUTTON 6 #define led 13 #define RECV_PIN 9 //создаем объект класса Bounce. Указываем пин, к которому подключена кнопка, и время дребезга в мс. Bounce bouncer = Bounce(BUTTON,5); //задаем начальное состояние светодиода "выключен" int ledValue = LOW; // переменные int ledStat = 0; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { lcd.begin(16, 2);// задаем размерность дисплея //определяем режимы работы пинов pinMode(BUTTON,INPUT); pinMode(led,OUTPUT); Serial.begin(9600); irrecv.enableIRIn(); // Запуск приемника pinMode(led, OUTPUT); } void loop() { //если сменилось состояние кнопки if ( bouncer.update() ) { //если считано значение 1 if ( bouncer.read() == HIGH) { //если свет был выключен, будем его включать if ( ledValue == LOW ) { ledValue = HIGH; //если свет был включен, будем выключать } else { ledValue = LOW; } //записываем значение вкл/выкл на пин со светодиодом digitalWrite(led,ledValue); } } if (irrecv.decode(&results)) { Serial.println(results.value); //красный if (results.value == 0xFF00FF && ledValue == 0) { digitalWrite(led, HIGH); ledValue = 1; } else if (results.value == 0xFF00FF && ledValue == 1) { digitalWrite(led, LOW); ledValue = 0; } irrecv.resume(); // Получить слудующее значение } if ( ledValue == LOW ) { lcd.clear(); lcd.setCursor(0, 0); // устанавливаем курсор в 0-ом // столбце, 1 строке (начинается с 0) lcd.print("Light is OFF"); lcd.setCursor(0, 1); // устанавливаем курсор в 0-ом столбце, 2 строке lcd.print("PUSH BUTTON"); // просто буквы второй строкой } else { lcd.clear(); lcd.setCursor(0, 0); // устанавливаем курсор в 0-ом // столбце, 1 строке (начинается с 0) lcd.print("Light is ON"); lcd.setCursor(0, 1); // устанавливаем курсор в 0-ом столбце, 2 строке lcd.print("PUSH BUTTON"); // просто буквы второй строкой } }
по кнопке и пульту IR включается и выключается нагрузка. в целях изучения недавно полученного lcd пытаюсь его сюда пристроить. здесь все работает, только дисплей мерцает. Если добавить delay - то грузит всю программу(чего и ожидал). Погугливши - путного ничего не нашел. Как решить? Называю свой код "изящным" ))))
вместо lcd.clear(); делай
lcd.print(
" "
);
спасибо, работает, только лишние символы не удаляет, в итоге получается при включенной нагрузке - Light is ONF . F осталась от предыдущей задачи и не стерлась
Light is ONF содержит 12 символов - сколько символов нужно, что бы перезаписать 12 символов?
Light is ONF содержит 12 символов - сколько символов нужно, что бы перезаписать 12 символов?
Хочется, конечно, чтобы не Light is ONF, а Light is ON.
и , думаю, правильнее, наверное, подобные команды на чистый дисплей выдавать, чтобы строки не подгонять друг под друга по количеству символов
Хочется, конечно, чтобы не Light is ONF, а Light is ON.
и , думаю, правильнее, наверное, подобные команды на чистый дисплей выдавать, чтобы строки не подгонять друг под друга по количеству символов
правильнее печатать сверху напечатанного, что бы не тратить время и ресурсы на стирание.
ок, концепцию понял, спасибо))
а если, вдруг, заморочиться? наверное millis подойдет? как его сюда вставить? или может еще что?
а если, вдруг, заморочиться? наверное millis подойдет? как его сюда вставить? или может еще что?
не совсем ясно, что ты имеешь ввиду.
имею в виду стирание экрана и вывод новых данных без мерцания
имею в виду стирание экрана и вывод новых данных без мерцания
закоменти lcd.clear(); и не будет у тебя мерцания
а вот тут я не понял - его надо в константы/переменные ввести или в setup? можно пример строки?
//
lcd.clear();
еще вопрос про lcd - если накрутил нужное сопротивление потенциометром для контраста дисплея - можно ли этот потенциометр на постоянный резистор заменить? себе представляю, что одну ногу резистора надо на VO (3 вывод), а вторую куда? на землю или питание?
//
lcd.clear();
но это же просто комментарий выйдет, а не программный код.
или то, что я хочу нерационально? а если подключать более продвинутые дисплеи - с подгоняловом строк не замучаешься?
или то, что я хочу нерационально?
ты не сообщил, что ты хочешь.
нажал кнопку или кнопку пульта, как в данном скетче --> зажегся/погас светодиод, тем временем, на lcd высветилось on или off на дисплее(согласно состоянию светодиода), причем символы on или off не переписывают друг друга, а просто пишутся на сброшенный(чистый) дисплей (чтобы не считать количество символов в строках и не подгонять их друг по друга). Ну и, конечно, чтобы дисплей не мерцал и в любой момент схема воспринимала сигнал с кнопки и пульта, как без дисплея. дисплей и кнопки работают параллельно (ну или как то так), не мешая друг другу, а дисплей не мерцает. так себе это вижу
а дисплей не мерцает. так себе это вижу
ок. покупай дисплей со скоростью обновления экрана, превышающим скорость визуальной фиксации человеком.
ты не поверишь, но кошек реально достаёт мерцание 60Гц твоего компа - срочно шото делай.
Спасибо за помощь))) еще остался вопрос
еще вопрос про lcd - если накрутил нужное сопротивление потенциометром для контраста дисплея - можно ли этот потенциометр на постоянный резистор заменить? себе представляю, что одну ногу резистора надо на VO (3 вывод), а вторую куда? на землю или питание?
lonely_jack давайте не будем разводить флуд.
куда все таки на землю или на питание?
куда все таки на землю или на питание?
в этом дисплее на землю.
Спасибо, коротко и ясно))
http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...
Сергей, вы действительно считаете, что запостив в двадцать тем повышаете шансы на помощь?
Нет. Я просто не понимаю куда лучше добавить пост.
Нет. Я просто не понимаю куда лучше добавить пост.
а новую тему создать не думали?
Нет. Я просто не понимаю куда лучше добавить пост.
В ветке "Общий", в самом начале "Песочница для новичков". Там есть ссылки как вставлять код и создавать тему. Почитайте, создайте тему и задайте свой вопрос. Скажу сразу, у вас вопрос некорректный, в теме обозначьте, что пытались сделать для его решения, что пошло не так. Писать за вас никто не будет.
P/S Не, не так, будут, но за деньги, в "Ищу исполнителя".