Ну вот, наконец - то мы добрались до такой интересной темы как построение меню для электронного устройства, в данном случае, меню будет построено и адаптировано для наших часов.

         До этого, в каждом шаге, мы описывали подключение различных устройств к плате Arduino, также были приведены тестовые скетчи для испытаний этих самых устройств. И вот теперь, перед тем как собрать всё это воедино, нужно сконструировать меню, листая которое на дисплее, мы будем иметь доступ к управлению и настройке всех подключённых модулей. Конечно же, в нашей работе не обошлось и без ограничений, очень сильно нас ограничивает семисегментный дисплей на базе драйвера MAX7219. Как вы уже поняли из предыдущих статей, данные типы дисплеев не дают особо разогнаться при генерации каких либо пользовательских символов. Всё упирается именно в эти самые семь сегментов дисплея. Но всё же, наше меню выжмет максимум из данных нам возможностей дисплеями такого типа. Наши основные действующие компоненты - дисплей MAX7219, модуль поворотного энкодера KY-040, модуль часов реального времени DS1302(можно пока и без него, но если вы следовали предыдущим шагам, то он у вас скорее всего подключен). Тип меню - однострочное, чтобы войти в него надо произвести нажатие на центральную ось энкодера, сразу же после этого на дисплее(в левой части) отобразится первый пункт меню. Вращением рукоятки поворотного энкодера, можно изменять значение текущего пункта меню(параметра в правой части дисплея). После установки значения, произведя нажатие на центральную ось энкодера, мы записываем накрученное значение в выбранный параметр и переходим к настройке следующего параметра. Итак, краткая таблица, поясняющая всё вышеописанное:

 

 

         Очень важное замечание - построение меню не имеет смысла без основного домашнего экрана. На домашний экран(так называемый Home Screen) нужно выводить всё то, что должно отображаться для работы в штатном режиме, это дата, температура, время, в общем всё то, что является полезной информацией для пользователя. В самом меню, пользователю уже даётся выбор, что и как отображать, и после полного пролистывания меню, устройство возвращается в режим отображения домашнего экрана. В нашем случае, на домашнем экране будет отображаться простая светящаяся полоска. Она будет как бы индикатором режима домашнего экрана. На этом этапе, нам просто нужно показать функционал нашего меню на экране. Но конечно же в конце статьи будет выложено видео, в котором можно будет воочию посмотреть на работу меню. Далее, ниже приводится таблица с полным списком всех элементов меню:

 

 

         Всего в нашем меню 12 элементов(параметров) которые можно настроить, но в первой таблице 12-й параметр не описан, а только лишь приведена ссылка на таблицу №2, и вот почему, 11-й параметр(DISP) меню имеет четыре варианта настройки. Это:

 

 

          В зависимости от выбранной настройки, 12-й параметр будет отображен следующим образом, смотрите таблицу:

 

 

         Итак, возможно пришло время скетча, но увы, скетч получился слишком большим в формате статьи, и поэтому его было решено выложить в архиве на отдельном ресурсе. Ссылка для скачивания. Библиотеки используемые в скетче - TimerOne.h, LedControl.h, iarduino_RTC.h. Ну и конце - обзорное видео по статье, как работает меню, функционал и настройки. 

 

 

         А вот так выглядит активация, установка и настройка будильников(в нашем меню их два)