Closed Kenaed closed 7 months ago
Найти константу COLOR_ORDER и там исправить порядок цветов Включить в настройки - технически сложно.
Включить в настройки - технически сложно.
Ничего сложного. Сделал у себя за пару часов.
Тогда научите как
Все делал по аналогии с уже имеющимся функционалом.
a_def_soft.h где объявляются переменные ширины и высоты матрицы uint8_t mCOLOR_ORDER = 0; // порядок цветов в гирлянде, 0 соответствует GRB
a_main.ino где case 8: (настройки параметров матрицы) case 8: // Настройки параметтров матрицы (размеры, подключение, порядок цветов) str = getStateString("UP|FM|M0|M1|M2|M3|M4|M5|M6|M7|M8|M9|M10"); break;
Между if (key == "M9") {...} и if (key == "E0") {...} добавляем // порядок цветов в гирлянде if (key == "M10") { tmp = String(mCOLOR_ORDER); if (value) { value->set(tmp); return tmp; } return str + "M10:" + tmp; }
eeprom.ino где идет определение направления и точки подключения mCOLOR_ORDER = getColorOrder();
putColorOrder(mCOLOR_ORDER);
void putColorOrder(uint8_t colorder) {
if (colorder > 5) colorder = 0;
if (colorder != getColorOrder()) {
EEPROMwrite(93, colorder);
}
}
uint8_t getColorOrder() {
uint8_t value = EEPROMread(93);
if (value > 5) value = 0;
return value;
}
mqtt.ino где #define STATE_KEYS
Может где-то что-то пропустил, ссылка на коммит с данными правками (и не только с ними): https://github.com/frol-aleksan/GyverPanelWiFi/commit/d6af36948e548919e900d651471384f8da9188c4
Работа основной части кода проверена с порядками цветов GRB, RGB и BGR, которые понадобились мне лично и ради чего это все затевалось. Работа MQTT не тестировалась, т. к. не пользуюсь.
Также как вторичный функционал добавлен эффект для проверки правильности выбора порядка цветов, заполняющий верхние 3 ряда матрицы красным, зеленым и синим, кнопка для его запуска находится в основном приложении.
Вот, а теперь представьте, что такой же шаблон что у вас в switch(mCOLOR_ORDER) - он уже есть в программе, только таким образом реализуется выбор пина на который выводится линия ленты - там стоит switch(LED_PIN). И на ESP32 таких пинов, доступных для назначения около 20 штук. Плюс разновидностей ESP на которые рассчитан скетч - 8 штук ( ESP8266, ESP32-WROOM, S2, S2 mini, S3, S3 mini, C3, C3 mini) и у всех разные доступные пины. То есть, если мы хотим еще и порядок цвета брать из переменной - то на каждый внешний case от LED_PIN для одной (разновидности контроллера) будет еще по 6 вложенных case COLOR_ORDER. И того - 120 различных вариантов. Мало того, что это простыня из вложенных switch-case будет занимать 120 строк нечитаемого кода, та еще, полагаю, и при компиляции будет занимать кучу места в программном коде, с вероятностью не влезть во flash, которая и так пишет, что занято 98% памяти кода. Вот это я и называю - технически сложно включить в настройки...
Но к пину один раз припаял разъем, и все. А гирлянды можно подкинуть разные, и чтобы под каждую из них каждый раз не перепрошивать плату, добавил этот функционал
Ну мне чаще попадались варианты (от пользователей), когда - подключил, а оно не работает и не знаю почему - как бы повыбирать на какое пин реально вывод идет. А с цветовым порядком - тот же аргумент - один раз в скетче прописал, проверил и больше менять не нужно. Мне как-то за эти годы не нужно было подкидывать разные гирлянды. Исходя из этого (из моих потребностей) и писалось.
Другой вопрос в последнее время всплыл, что мне китаец прислал три куска гирлянды - и у них у всех разный цветовой порядок. И тут уже нужно придумывать настройку - что диоды 0-99 - GRB, 100-199 - BGR и 200-299 - GBR, чтобы соединить это все в одну гирлянду
Но это уже совсем другая история...
Купил готовую гирлянду в ней другая кодировка RGB можно ли это исправить в коде? и думаю стоит такую возможность включить в настройки