Для компиляции используйте Arduino IDE v1.6.5 от arduino.cc
UPD. Сейчас более актуальна и лучше поддерживается версия с конфигурированием с SD-карты (вместо веб-конфигурирования): MegaLight2
Небольшое описание можно найти тут (спасибо karsotrade)
Перед заливкой рекомендую задать статический IP (и, возможно, сменить MAC) для самого контроллера в файле MegaWeb.ino. По-умолчанию адрес 192.168.21.210 (позже его можно сменить в конфигурации)
Для связи с МЖД нужно указать его IP в файле MegaLight.ino. Если в МЖД используется авторизация, ее base64-код нужно указать в переменной mdAuth.
Описание.
Архитектурно MegaLight построен на 3-х понятиях:
1. Buttons - кнопки (выключатели, логические датчики).
2. Relays - реле. Это управляемые логическим уровнем устройства. Позже появилась возможность управления ШИМ, но название я уже не менял.
3. JointPoints - соединения. Эта абстрактная сущность позволяет связать между собой любую комбинацию Buttons и Relays, добавив условия, параметры и т.д.
Для конфигурирования нужно зайти браузером на адрес MegaLight по стандартному 80 порту.
Buttons ID - уникальный числовой идентификатор кнопки. Будет использоваться при настройке соединений (можно задавать просто по порядку)
Pin - номер пина (цифрового или аналогового), куда подключена кнопка. Не используйте пины 4, 10, 50-53, они используются Ethernet-шилдом. Аналоговые пины A* также имеют свое цифровое представление (см. таблицу)
Pullup type - тип подтяжки:
- EXTERNAL_PULLDOWN - подтяжка внешним резистором к Gnd
- INTERNAL_PULLUP - подтяжка внутренним резистором к Vcc (вход инвертирован)
- EXTERNAL_PULLUP - подтяжка внешним резистором к Vcc (вход инвертирован)
Hold interval (ms) - время в мс, которое нужно удерживать кнопку, чтобы она перешла в состояние Hold (удержание).
Repeat - 1 или 0 - включить или выключить автоповтор нажатия в режиме удержания.
Repeat interval (ms) - интервал в мс, с которым повторять нажатия в режиме удержания (Repeat должно быть 1). Я обычно использую 150мс.
Double-click interval (ms) - интервал в мс, в течение которого два последовательных нажатия кнопки сгенерируют событие DoubleClick. 0 - не отслеживать двойное нажатие. Я обычно использую 800мс.
Prevent Click - 1 или 0 - предотвращать(1) генерацию события Click при первом нажатии, если за ним последовал DoubleClick. Имеет смысл только если Double-click interval больше нуля.
!DELETE! - удалить кнопку. Если ни одно Соединение не ссылается на эту кнопку, здесь будет галочка, иначе - к-во ссылающихся Соединений.
Для сохранения изменений нужно нажать кнопку Save Config.
Relays ID - уникальный числовой идентификатор реле. Будет использоваться при настройке соединений (можно задавать просто по порядку)
Pin - номер пина, к которому подключено управляемое устройство
PWM frequency (Hz) - частота ШИМ в герцах. Если 0 - то ШИМ не используется. У Mega 2560 порты с ШИМ 2 по 13 и 44 по 46.
On - состояние выхода - 1-вкл, 0-выкл.
Invert State - инверсия порта (Выкл - на выходе логическая 1, вкл - 0).
Dimmer value - если используется ШИМ - его скважность (0-255)
PowerOn Restore - какие параметры нужно сохранять при изменении и восстановить при включении контроллера
- None - ничего не сохранять, при включении состояние и значение равны установленным при конфигурировании
- State - восстанавливать последнее установленное состояние параметра On
- Value - восстанавливать последнее установленное значение диммера (ШИМ)
- State&Value - восстанавливать состояние и значение.
Buttons - соединяемые кнопки
Events - события, см. далее (для редактирования нажать на Edit)
Relays - соединяемые реле
Order - последовательность проверки соединений (от меньшего числа к большему)
Final - 1 или 0. Если 1 - остановить дальнейшую проверку соединений при срабатывании события.
Events Здесь задаются действия над присоединенными реле в зависимости от событий, произошедших с привязанными кнопками.
Event
- StateChanged - изменение состояние (кнопка нажата или отпущена)
- Pressed - нажатие кнопки
- Released - отпускание кнопки
- Repeat - при каждом автоповторе
- Hold - удержание кнопки
- LongClick - длинное нажатие. Срабатывает по факту отпускания после удержания
- Click - клик (короткое нажатие и отпускание)
- DoubleClick - двойной клик
- Unassigned - события не обрабатывается
- No action - ничего не делать. При этом событие считается сработавшим и при Final=1 последующие соединения обрабатываться не будут
- On - включить
- Off - выключить
- Toggle - изменить состояние на противоположное
- Value - установить значение диммера в определенное значение(только для ШИМ-каналов)
- IncValue - увеличить или уменьшить значение диммера на фиксированное значение
Timeout (ms) - длительность действия.
Для действий, управляющих состоянием (No action, On, Off, Toggle) - время, через которое нужно изменить состояние на противоположное. Например: событие On с таймаутом 10000 включит реле, а через 10сек выключит. В общем случае выполняется действие [Action], а через [Timeout] мсек выполнится Toggle. Если в это время произойдет другое событие, изменяющее состояние конкретного реле, таймер останавливается.
Для действий, управляющих ШИМ-каналом (Value, IncValue) - время, в течение которого значение будет плавно переходить от текущего значения до заданного.
Condition - дополнительное условие срабатывания действия.
Здесь можно указать выражение с условием.
в зависимости от состояния реле, например:
R1 - реле с ID 1 включено
!R2 - реле с ID 2 выключено
в зависимости от значения ШИМ реле, например:
RV1>0 - значение диммера с ID 1 больше нуля
RV2<200 - значение диммера с ID 2 меньше 200
RV1=255 - значение диммера с ID 1 равно 255
RV1g100 - значение диммера с ID 1 больше или равно 100
RV1l100 - значение диммера с ID 1 меньше или равно 100 (это там прописная буква L)
в зависимости от состояния кнопки, например:
B10 - кнопка с ID 10 нажата
!B10 или BU10 - кнопка с ID 10 не нажата
BH10 - кнопка с ID 10 удерживается
Условия могут состоять из нескольких, объединенных операторами или заключенных в скобки.
Операторы:
! - НЕ
| - ИЛИ (вертикальная палка)
& - И
( ) - скобки
= - равно
> - больше
< - меньше
g - больше или равно
l - меньше или равно
Пример сложного выражения:
BH1|(R1&!R2)|(RV5=255)
условие сработает, если удерживается кнопка 1, либо если включено реле 1, а реле 2 выключено, либо диммер 5 на максимуме.
Config
Здесь можно сменить MAC и IP контроллера.
P.S. К сожалению, маленький объем оперативки у Ардуины не позволяет при данной структуре скетча завести больше десятка кнопок/реле/правил (каждого). В ближайшее время постараюсь что-то придумать.
Github