MoDyz: графический интерфейс для системы водосбора/-снабжения
- Войдите на сайт для отправки комментариев
После успешного укрощения строптивого дальномера AJ-SR04M встала задача его использования в реальном проекте. Дальномеры будут использоваться в качестве датчиков уровня в системе сбора дождевой воды и подачи ее в теплицу и на высокие грядки. Два последних московских лета показали, что надеяться только на осадки нельзя. Поэтому в системе будет и возможность подпитки из имеющегося на участке колодца.
Впереди долгие месяцы ожидания нового дачного сезона и я приступаю к разработке графического интерфейса, в задачи которого будет входить информирование о текущих запасах воды в бочках (а их четыре: две стоят под водосточными трубами и еще две, выполняющие роль водонапорной башни, - на чердаке мансарды) и редактирование параметров, определяющих логику работы перекачивающих насосов.
Реализация интерфейса - на базе приложения MoDyz (доступно на Google Play), позволяющего смартфону общаться с микроконтроллером по Bluetooth- (уже реализован) или WiFi-каналу (в процессе реализации) и, получая от него соответствующие команды, выводить на экран смартфона графику, создавать необходимые органы управления (поля ввода, кнопки, крутилки, ползунки ...). Смартфон, по сути, выступает в роли дисплея и панели управления, которые легко подключаются к использующему их контроллеру, выполняют возложенные на них функции и столь же легко отключаются после завершения сеанса связи.
Но к делу.
В первую очередь нарисуем технологическую схему системы, из которой будет понятно примерное расположение компонентов и связь между ними.
1) Рисуем дом, возле которого (и в котором) размещены бочки.
2) Рисуем сами бочки (они же индикаторы запасов воды в каждой из них).
Поскольку их в системе четыре, то логично было оформить соответствующий блок инструкций в виде функции:
В результате выполнения этих инструкций на экране смартфона появится картинка:
Блок стандартных клавиш, используемых при отладке, занимает слишком много места на четырехдюймовом экране моего смартфона, поэтому придется его отключить.
Сказано — сделано: вывод предопределенных клавиш подавлен. На экране стало попросторнее (см. ниже), позже там будут размещены кнопки для перехода на страницу (или страницы) редактирования параметров, определяющих поведение насосов, перекачивающих воду из левой бочки в правую, а из нее — в две верхние, играющие роль водонапорной башни. Как я уже (вроде?) упоминал ранее, расположенные на высоте более пяти метров над землей, они будут создавать вполне приличное давление (грубо — пол-атмосферы), что считается оптимальным для систем капельного полива.
Следующим шагом в развитии технологической схемы стала прорисовка перекачивающих трубопроводов. Эта работа возложена на две функции — drawPipes() и drawPipe(). В первой из них задаются точки, по которым на схеме будут протянуты трубы, а во второй происходит собственно рисование.
Первая труба прорисована «неактивной» (перекачивающий насос выключен), а вторая — «активной» (насос работает).
Работа над функциями показала, что для представления ломаных линий использование команды рисования отрезка по двум точкам слишком накладно. Объем передаваемых при этом данных можно уполовинить, если каждый следующий отрезок проводить из точки, в которой «перо» оказалось после построения предыдущего отрезка, в новую точку траектории, то есть вместо функции drawLine(Point0,Point1) вызывать нечто вроде drawTo(Point1). Соответствующие дополнения в приложении MoDyz и в библиотеке MD_Scout будут сделаны на следующем шаге.
Кроме того, просится вывод на экран информации о количестве воды в каждой из бочек и в целом в системе.
Если применить библиотечку Евгения Петровича для измерения (времени) расстояния, точность будет выше, чем пульсеин
Не совсем понял - к чему относится ваш комментарий?
Для демонстрации возможностей вывода цифровой информации на дисплей я взял имеющийся в MoDyz виджет семисегментного индикатора. есть две функции для создания и управления индикатором. Первая из них служит для создания индикатора (новый id) или последующего изменения (id уже созданного индикатора) его характеристик (x, y — координаты верхнего левого угла, h — высота, n, n10 — количество знакомест всего и знакомест после запятой, v — начальное значение):
вторая — для изменения значения (v), выводимого уже созданным индикатором с идентификатором (id)
Те индикаторы, что показаны на изображении, созданы в результате обработки 5 команд:
Индикаторы 1 и 2 — над нижними бочками, 3 — над верхними, 4 — большой индикатор красного цвета на черном фоне в центре, отображающий суммарный объем воды во всех четырех бочках.
При обновлении картинки в дело вступает вторая функция. Это будет выглядеть, например, так:
Итого: девять строчек кода для определения и динамического изменения значений, выводимых четырьмя семисегментными индикаторами. По-моему, достаточно эффективно...