Страница 1 из 5

Помощь новичку. Меню и энкодер.

Добавлено: 04 мар 2017, 15:11
TipTopBY
Добрый день!
Опишу что хочу получить:
Система контроля работы тэна и вентиляторов в зависимости от датчиков температуры.
Вывод данных на LCD 1602.

Преключение информации на экране с помощью вращения энкодера.
При выборе экрана с входом в настройки (Settings menu) и нажатии на кнопку эенкодера, активация меню.
В пунктах меню настройка параметров с помощью вращения эенодера, переключения по пунктам меню по нажатию на кнопку энкодера. При выборе пункта меню Exit и нажатии кнопку энкодера - выход из меню.

Сталкнулся со следующими проблемами:
1. После загрузки система сразу оказываеться в Меню,что не нормально , вращение энкодера работает коретно, переход по меню также. Но в пункте меню Exit при нажатии кнопки из меню выход не происходит.

2. Если отключить меню, что бы вход не происходил(заведомо внести ошибку в программу), то отображаеться 1 информационный экран, но переход на другие при вращении энкодера не происходит.
Заметил что на это как то влияет Блок энкодера который участвует в работе Меню. Сменив на нем пины подключения(по сути указав другой энкодер), переключение информации на экране стало коректным, но тем самым настйка параметров в меню стала не возможной.
Я попытался более четко определить работу того или иного блока энеодера, отредактировав блок - добавив вход En, высокий сигнал на котром включал бы данный блок энкодера, файл блока приложу к посту, но нужного эфекта это не дало.

Прошу взглянуть на мою программу, указать на ошибки или предложить варианты решения проблем.

Помощь новичку. Меню и энкодер.

Добавлено: 04 мар 2017, 21:34
Boroda
TipTopBY, никогда так не делайте, будет микросекундный ногодрыг (вкл/выкл).



Лучше убрать из плат выход МК и в конце программы сделать так. Под конец цикла переменная вся обсчитается, а потом уже ее на выход пускаем.


Помощь новичку. Меню и энкодер.

Добавлено: 04 мар 2017, 21:51
Boroda
А еще лучше так. Блоки сравнения могут быть раскиданы по всей программе, а вывод наружу на последней плате. Очень просто строится алгоритм, отслеживать надо только порядок блоков сравнения по приоритету срабатывания.


Помощь новичку. Меню и энкодер.

Добавлено: 04 мар 2017, 21:56
Boroda
У Вас получается, что вентилятор всегда будет работать только по последнему условию "включение вентилятора", а плата "отключение вентилятора" будет бесполезна.
Должно быть так.

Помощь новичку. Меню и энкодер.

Добавлено: 04 мар 2017, 21:57
TipTopBY
Спс за совет, принял к сведению.

Помощь новичку. Меню и энкодер.

Добавлено: 04 мар 2017, 22:28
Boroda
У Вас все кнопки на землю замыкаются? Если да, то на всех входах от кнопок надо поставить инверсию. Если инверсии нет, то программа при запуске понимает, что нажаты все кнопки и перещелкивает меню.


Помощь новичку. Меню и энкодер.

Добавлено: 04 мар 2017, 22:51
TipTopBY
Да Вы правы, я учел этот мемент в управлении подстветкой, а потом почему-то упустил, сейчас выставил инверсию на на всех блоках "Select". Но всеравно при загрузке система оказываеться в Меню. Так же выход из меню не отрабатывает.

Помощь новичку. Меню и энкодер.

Добавлено: 04 мар 2017, 23:07
Boroda
Немного причесал Вашу программу, проверьте.

Помощь новичку. Меню и энкодер.

Добавлено: 04 мар 2017, 23:20
Boroda
Маленько упростил энкодер. Ну и под него программу. И сделал сброс в первый пункт при входе в меню.

Помощь новичку. Меню и энкодер.

Добавлено: 05 мар 2017, 10:41
TipTopBY
Проверил. При загручке показывает информационный экран, ка надо. Но вращение энкодера экраны не переключает. Если сместить пины энкодера Меню, то экраны начинают перключаться, в меню входит, но соответственно энкодер в меню не работает.

Помощь новичку. Меню и энкодер.

Добавлено: 05 мар 2017, 11:17
TipTopBY
Как говорил выше, если сделать программно 2 энкодера, на разных пинах, то все работает. Я соединил на плате пины этих твух програмных энеодеров. Вся заработало, хотя я не уверен что это нормальный способ. Причина проблемы с одним блоком энкодера мне кажеться кроеться в прерывании на пинах МК.

Ещё один нюанс, при входе в Меню оказываешься сразу в пункте Exit, хотя по входу Reset должно происходить сброс меню в 1-й пункт. Я так же установил "Сбрасывать меню по переднему фронту входа En", эти настройки не привели к успеху. Проблема осталась.

Помощь новичку. Меню и энкодер.

Добавлено: 05 мар 2017, 12:17
Boroda
А давайте так попробуем! Оставил один энкодер, а дальше сигнал переменными передается. Сделал принудительный переход на 1й пункт.

Помощь новичку. Меню и энкодер.

Добавлено: 05 мар 2017, 12:56
TipTopBY
Все нормально.
Пару моментов для информации. Перекинул с входа MU на MD, что бы меню листало в нужную сторону.
При компиляции не подставляются номера пинов в энкодере, отредактировал уже в скетче вручную.

Добавил условие выхода из меню, установкой Exit:True , что бы меню настроек крутилось по кругу.

Выкладываю последний вариант. Для меня, пока, все проблемы решены. Огромная благодарность Boroda, за помощь.

Помощь новичку. Меню и энкодер.

Добавлено: 05 мар 2017, 17:44
Boroda
Вот отредактированный блок энкодера с нормальными ногами.

Помощь новичку. Меню и энкодер.

Добавлено: 06 мар 2017, 14:47
AVGN
Boroda, для блока энкодера нужен дополнительный вывод Set -импульсов на щелчок.
Т. к. у некоторых энкодеров есть еще тактильные щелчки при вращении, и при одном щелчке бывает выдает не 1 импульс а 2 или 4 .
У мня два вида KY-40 от китайских товарищей и один выдает 2 ,а другой 4 импульса.

Помощь новичку. Меню и энкодер.

Добавлено: 06 мар 2017, 21:00
Boroda
AVGN писал(а):для блока энкодера нужен дополнительный вывод Set
отстал я от жизни. Китайцы, для того, чтоб не использовать надежные оптические энкодеры, всякие "много импульсов" на щелчек придумывают для гнилых контактных, которые через пол-года начинают глючить.

Помощь новичку. Меню и энкодер.

Добавлено: 07 мар 2017, 06:39
AVGN
Boroda писал(а):отстал я от жизни. Китайцы, для того, чтоб не использовать надежные оптические энкодеры, всякие "много импульсов" на щелчек придумывают для гнилых контактных, которые через пол-года начинают глючить.
Ну, это как повезет. Я как то в феврале к авиамоделистам заезжал. Так они уже три года очень даже механические KY-40 пользуют. Говорят, что нашли надежного производителя и закупаются.

Помощь новичку. Меню и энкодер.

Добавлено: 16 мар 2017, 01:24
brig62
AVGN писал(а):ри одном щелчке бывает выдает не 1 импульс а 2 или 4 .
Вот и я с этим столкнулся. Пробовал разные блоки энкодера. Ровно 4 единицы прибавляет каждый щелчок. Как с этим бороться? Деление на 4 не помогает))

Помощь новичку. Меню и энкодер.

Добавлено: 16 мар 2017, 11:04
Dev1
brig62 писал(а):Вот и я с этим столкнулся. Пробовал разные блоки энкодера. Ровно 4 единицы прибавляет каждый щелчок. Как с этим бороться? Деление на 4 не помогает))
Стоит обычный блок Encoder. Мой энкодер то же выдает по 4. Делю так:

Код: Выделить всё

newPosition = myEnc.read()/4;

Помощь новичку. Меню и энкодер.

Добавлено: 16 мар 2017, 11:30
AVGN
brig62 писал(а):Вот и я с этим столкнулся. Пробовал разные блоки энкодера. Ровно 4 единицы прибавляет каждый щелчок. Как с этим бороться? Деление на 4 не помогает))
Вот попробуйте блок.
От Автора:
Энкодер Детектор
Блок служит для детектирования переключения Энкодера.
Параметры
Set -Импульсов на щелчок
Так как у некоторых энкодеров есть еще тактильные щелчки при вращении, и при одном щелчке бывает выдает не 1 импульс а 2 или 4 ( может и больше)
Вел делитель для получения соответствия щелчок-изменение числа.
DT , CLK  - номера пинов подключенных одноименные выхода энкодера (можно использовать любые пины)
period - Период опроса состояния энкодера, в микросекундах, завесить от энкодора
На механических энкодерах достаточно 1000мкс

!!!!Возможны конфликты с блоками где используется Timer1 (из известных мне Rremote, Servo)
!!!!Нельзя использовать совместно с ШИМ на
Arduino Uno 9, 10
Arduino Leonardo 9, 10, 11
Arduino Mega 11, 12, 13


Добавлено (16.03.2017, 11:30)
---------------------------------------------
Dev1 писал(а):Стоит обычный блок Encoder. Мой энкодер то же выдает по 4. Делю так:Код
newPosition = myEnc.read()/4;
Что значит "Стоит обычный блок Encoder" ?
В встроенных есть блок Encoder?

И куда Вы приведенный Вами код вставляете?