Skip to content

Latest commit

 

History

History
35 lines (29 loc) · 3.13 KB

File metadata and controls

35 lines (29 loc) · 3.13 KB

Управление устройством

Выбор режима работы

Взаимодействие пользователя с устройством осуществляется при помощи нажатия и удержания одной единственной кнопки управления, при этом загорается и моргает информационный светодиод. Время удержания кнопки управления определяет выбранный режим, доступны следующие режимы:

    NO_PRESS        0: just deep sleep again; LED - turn off
    SHORT_PRESS     1: run sending data; LED - turn on and blink once
    LONG_PRESS      2: run setting mode (WiFi Manager); LED - turn on and blink twice
    VERY_LONG_PRESS 3: run clear mode; LED - turn on and blink three times

Предустановлены следующие величина времени удержание кнопки управления для выбора соответствующего режима (ms):

    #define BTN_SHORT_PRESS         1000
    #define BTN_LONG_PRESS          5000
    #define BTN_VERY_LONG_PRESS     15000

Алгоритм работы следующий - при нажатии и удержании кнопки управления загорается светодиод, при удержании достаточного времени для достижения режима например SHORT_PRESS информационный светодиод моргает один раз, при достижении времени удержания соответствующего режиму LONG_PRESS светодиод моргает дважды и т.д.

Завершение режима настройки

Во время активированного режима настройки (запущен WEB портал настройки), если нажать и удерживать кнопку управления, произойдет принудительное завершение работы портала настройки и устройство перейдет в режим глубокого сна. Время удерживания определено как:

     #define BTN_LONG_PRESS          5000

Прерывания

Выбор режимов кнопкой управления изначально детектируется сопроцессором ULP, который в случае обнаружения нажатия кнопки будит основной процессор и передает ему дальнейшую обработку нажатия кнопки управления. Режим завершения настройки работает используя иной алгоритм. Во время работы основного процессора ULP игнорирует нажатие кнопки, а обработка нажатие осуществляется через прерывание:

    attachInterrupt(btnSetup._pin, btnHandlerDown, ONHIGH);