Показать сообщение отдельно
Старый 02.10.2017, 22:55   #137
shalex
Местный
 
Регистрация: 08.07.2015
Адрес: МО
Сообщений: 2,858
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 3 раз(а) в 2 сообщениях
Сказал(а) спасибо: 4,650
Поблагодарили 3,274 раз(а) в 1,172 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
1 Всего
Репутация: репутация неоспорима (3285)
По умолчанию

Пока успехи такие: создан черновой вариант кода, на базе предыдущих разработок.
К сожалению, управление 32 сервами уже просто не помещается (реализация плавности перехода между состояниями) плюс пока непонятно как detach делать на модуле PCA9685

Что поместилось:
- опрашивать и в случае изменений отправлять статусы датчиков 24 шт, адрес начала серии настраивается в CV
- программная задержка на отправку "свободен", что фильтрует плохой контакт и вообще полезно
- плюс при сработке датчика можно отправить либо датчик, либо стрелку либо и и то и другое(задается в CV)

- управляемые по стрелочным адреса 32 каналама PWM, но только для просто переключения между 2 уровнями PWM_HIGH и PWM_LOW (уровни задаются в CV, первый адрес тоже)

- управление КЗ и автореверс
- отправка датчика КЗ и команды Power Off при КЗ
- индикация режимов светодиодами
- традиционное чтение/запись CV по Loconet
- режим программирования с индикацией

Пока можно сэкономить 24 байта на CV настройки режима режима сработки датчика, если принять за правило, что если есть адрес стрелки в нужном CV, то отправлять еще и стрелочную команду, помимо "датчиковой".


Код:
Скетч использует 15462 байт (50%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 1573 байт (76%) динамической памяти, оставляя 475 байт для локальных переменных. Максимум: 2048 байт.
Недостаточно памяти, программа может работать нестабильно.
При этом на "память для локальных" очень покушаются две динамически "разбухаемые" очереди LN и I2C команд.
shalex вне форума  
Вверх
3 пользователя(ей) сказали cпасибо: