В приведенных примерах используются библиотеки SimpleModbusMaster и SimpleModbusSlave. Функции этих библиотек выполняют подготовку пакетов Modbus, отправку, получение и контроль ошибок в полученных данных. Пользователю остается только лишь указать в каких ячейках памяти будут храниться данные для отправки и полученные данные.
В примере для ведущего устройства - это следующие массивы:
Код: Выделить всё
unsigned int readRegs [1];
unsigned int writeRegs [1];
Код: Выделить всё
unsigned int holdingRegs[HOLDING_REGS_SIZE];
holdingRegs[0] - сюда слейв помещаетс результат из регистра АЦП. Мастер считывает его используя команду READ_HOLDING_REGISTERS (3) протокола Modbus.
holdingRegs[1] - сюда мастер записывает значение PWM используя команду PRESET_MULTIPLE_REGISTERS (16) протокола Modbus. Слейв использует это значение для управления яркостью светодиода.
Вы можете изменить исходник подчиненного устройства так, чтобы вместо данных из регистра АЦП в holdingRegs[0] записывалось значение, соответствующие состоянию переключателя на входе, к которому подключен переключатель.
В исходнике ведущего устройства надо добавить проверку значения в readRegs[0]. В зависимости от результата проверки включать или выключать выход, к которому подключен светодиод.
Вроде все.