Добрый день. В программе FLProg начиная с версии 2.1. появились блоки конструктора меню. В данном уроке будет рассмотрено создание меню с помощью данных блоков.
Для того что бы было интереснее рассмотрим реальную задачу. Соберём блок контроля температуры, в который будет входить датчик температуры, нагреватель и вентилятор. Кроме того включение вентилятора или нагревателя будет сопровождаться звуковым сигналом. С помощью меню будем настраивать пороги включения и выключения устройств и необходимость звукового сигнала. Для упрощения отладки датчик температуры для начала будем симулировать с помощью переменного резистора.
Первый вариант устройства будет состоять из:
Arduino Uno:
LCD Keypad Shield
Двух релейных блоков:
И активного зуммера:
Вот принципиальная схема устройства
Для начала целиком проект.
![image](https://habrastorage.org/getpro/geektimes/post_images/5b7/28e/f28/5b728ef28a3cd2d15bc5cbbd7dc115cf.png)
Рассмотрим каждую плату по отдельности.
Здесь всё просто, получаем значение с аналогового входа и масштабируем в необходимый диапазон. Значение температуры будем изменять от -20 до 80. Настройки блока Scale.
На этой плате анализируется сигнал кнопок LCD Keypad Shield и формируются соответствующие сигналы. Анализ производится с помощью пользовательского блока 5Bin1. Создание данного блока рассматривается в этом уроке, там же можно скачать этот блок.
Поскольку кнопок на шилде маловато, расширим возможности кнопки “Select”.
Данная схема работает следующим образом. При коротком нажатии на кнопку формируется импульс «Зайти в меню», при длительном (длительностью более уставки таймера TON), формируется импульс «Выйти из меню».
На этой плате формируется сигнал активации меню. Таймер TON необходим для защиты от случайного формирования этого сигнала при старте контроллера. Ну и непосредственно плата с основным блоком меню.
В описании блока меню (вкладка «Информация» редактора блока) я постарался максимально полно описать работу блока. Рассмотрим настойки блока в данном конкретном случае.
Вкладка – «Дерево меню»
Дерево меню состоит из двух групп меню для настроек температур включения и выключения нагревателя и вентиляции, а так же одиночного пункта для управления активностью звука. Вообще данный блок позволяет строить меню любой сложности и вложенности. Главное что бы хватило памяти контроллера.
Настройка группового пункта меню.
Настройки пунктов настроек температуры.
Немного уточню по поводу стартового значения в EEPROM. Это значение запишется в EEPROM в начале первого цикла после загрузки программы в контроллер. Это произойдёт только один раз после каждой новой загрузки программы в контроллер. Остальные пункты меню связанные с температурой аналогичны этому.
Настройки пункта меню управления звуком:
Тексты для True и False будут выводится на выход ValStr при соответствующих значениях пунктов меню.
Закладка – «Управление меню»:
Тут вроде всё интуитивно понятно.
Закладка – «Управление значением»
В выбранном режиме изменений при кратковременном нажатии на кнопку изменения значения оно изменяется на величину заданного шага. Если удерживать данную кнопку более 2 секунд значение будет изменяться на величину заданного шага каждые полсекунды. Если продолжать удерживать кнопку ещё в течении 2 секунд период изменения значения уменьшится до 200 ms.
Закладка «Выхода»
Выход «Активно главное меню» необходимо для формирования сигнала «Активация меню». Последующие две платы практически одинаковы, и в особых объяснениях не нуждаются.
Обращу только внимание на входы CanValUp у блоков MenuValue. При высоком уровне на этом входе значение на выходе Q соответствует значению выбранного пункта меню. По заднему фронту на этом входе значение на выходе «замораживается» до появления на этом входе высокого уровня. Это необходимо для того, что бы значение не изменялось до окончании его редактирования (закрытия меню).
Оставшиеся платы так же просты и не нуждаются в пояснениях.
Теперь немного «прокачаем» проект. Заменим LCD Keypad Shield на матричную клавиатуру 4х4 и дисплей 4х20 подключенный по I2C.
Это позволит задавать значение не пошагово, а простым вводом цифр. Кроме того это позволит сделать вход в меню по паролю. Изменённая схема проекта.
Целиком проект.
![image](https://habrastorage.org/getpro/geektimes/post_images/723/f04/e03/723f04e0365256f84baa1e649aea10cf.png)
Рассмотрим изменённые платы
Используется стандартный блок опроса матричной клавиатуры из библиотеки элементов.
При нажатии кнопки «*» активируется меню. Только на этот раз не основное меню, а меню для ввода пароля.
Настройки парольного меню
Данное меню состоит из одного пункта, служащего для ввода пароля. Использован тип Long Integer для увеличения количества символов пароля.
На этой плате проверяется правильность ввода пароля. При совпадении введённого пароля и сохранённого в основном меню включается основное меню. При выходе из меню в значение вводимого пароля записывается 0 (подготовка к следующему вводу)
В основное дерево меню добавлен пункт для настройки сохранённого пароля.
Так же изменения коснулись закладки «Управление значением»
Управление значением переведено на непосредственный ввод цифр. Остальные платы не изменились.
Использование резистора в качестве задания температуры удобно для отладки, но в реальном применении все таки необходим датчик температуры. Используем датчик температуры DS18B20. Для этого необходимо изменить первую плату в обоих проектах.
Блок «ScanOneWare» служит для автоматического определения адреса датчика. Это позволяет заменить в случае необходимости датчик температуры без перепрошивки контроллера.
Изменённые принципиальные схемы
Схема с LCD Keypad Shield.
Схема с матричной клавиатурой
Исходники проектов
» Схема с LCD Keypad Shield и резистором
» Схема с LCD Keypad Shield и датчиком
» Схема с матричной клавиатурой и резистором
» Схема с матричной клавиатурой и датчиком
Здравствуйте Схема с матричной клавиатурой и датчиком не открывается
Файлы отсутствуют
Добрый день! собрал схему кнопки select, не работает , в меню заходит ,а когда жму выход 2 секунды он сразу делает вход ,кнопка управления минус сигнал инвертирую, может я где-то ошибся , есть готовая схема проект ?
Добрый день. Уже нет необходимости в делать меню из блоков. В программе есть отдельный блок меню, он намного удобнее.
Большое спасибо Сергею Глушенко за работу над проектом! Подтверждаю слова sergey.ananev если кнопку держать больше 2с происходит импульс на выход из меню! Но при отпускании кнопки происходит импульс на вход в меню в меню опять! И добавление задержки как предлагает sergey.ananev, удаляет эту проблему! Я пробовал эту плату отдельно, и увидел это своими глазами на светодиодах!
Сергей спасибо за ваши труд. Все получается и работает!
Отсутствует файл «Схема с LCD Keypad Shield и датчиком» — ссылка на яндекс диск битая.
Здравствуйте, Сергей!
1.Файл по ссылке «Схема с LCD Keypad Shield и датчиком» отсутствует.
2. В случае загрузки первого варианта «Схема с LCD Keypad Shield и резистором» по Вашей ссылке в микроконтроллер не будет работать выход из меню при длительном нажатии на кнопку «select». Сначала микроконтроллер будет выходить из меню, а потом заново заходить в него. На плате №3 «обработка кнопки «select» не хватает таймера TOF между SR и AND.
Познавательно увидеть создание скетча от разработчика.
ПС.»Анализ производится с помощью пользовательского блока 5Bin1. Создание данного блока рассматривается в этом уроке, там же можно скачать этот блок.» — тут ссылка ведет в никуда. и данный пользовательский блок не находиться по поиску.
ППС: НЕработет регистрация нового пользователя
ПППС: может мен кто подробнее объяснить работу Плата №5 проверка пароля. Откуда там уже 3 значинений с меню
Исправил