Массивы
- Войдите на сайт для отправки комментариев
Здравствуйте.
Помогите пожалуйста с массивами.
Есть такая задача, DMX устройство которое управляет группой светильников.
У каждого светильника есть по несколько адресов, что уже создает разные по длине массивы. И существуют «сцены» тоже разной длинны.
В результате должно быть так: Собирается посылка DMX512 из разных устройств, с разной длинной адреса, это не проблема, так как они фиксированы, а вот «сцены» они с разным количеством шагов. В результате должно в порт выдаваться N сцен по 512 посылок.
Для этого я создал многомерный массив, который двумя циклами считываю.
Здесь в процедуре, я указываю название массива и длину сцен 3180 и длину адресов.
Но Приборы имеют разную длину адресов и разную длину сцен, да и название массива разное. Не подскажите, в каком направлении двигаться, для решения задачи?
void runfon1() {
for (int scene = 0; scene <= 3180 - 1; scene++) {
for (int ch = 0; ch <= 32 - 1; ch++) {
byte level = SceneDMXfon5[0][scene][ch][0];
dmxbuffer[ch + 1] = level;
//Serial.print(" "); Serial.print(level);
}
copyDMXToOutput();
//Serial.println();
delay(45);
if (fone == 0) {
DMXparking();
break;
}
}
}
uint8_t SceneDMXfon5[1][3180][32][1] = {
{
{ {0}, {0}, {25}, {0}, {0}, {0}, {25}, {0}, {0}, {0}, {25}, {0}, {0}, {0}, {25}, {0}, {0}, {0}, {25}, {0}, {0}, {0}, {25}, {0}, {0}, {0}, {25}, {0}, {0}, {0}, {25}, {0} },
{ {0}, {0}, {25}, {0}, {0}, {0}, {25}, {0}, {3}, {3}, {21}, {3}, {0}, {0}, {25}, {0}, {0}, {0}, {25}, {0}, {0}, {0}, {25}, {0}, {0}, {0}, {25}, {0}, {0}, {0}, {25}, {0} },
{ {0}, {0}, {25}, {0}, {0}, {0}, {25}, {0}, {0}, {0}, {24}, {0}, {0}, {0}, {25}, {0}, {0}, {0}, {25}, {0}, {0}, {0}, {25}, {0}, {0}, {0}, {25}, {0}, {0}, {0}, {25}, {0} },
{ {0}, {0}, {25}, {0}, {0}, {0}, {25}, {0}, {0}, {0}, {25}, {0}, {0}, {0}, {25}, {0}, {0}, {0}, {25}, {0}, {0}, {0}, {25}, {0}, {0}, {0}, {25}, {0}, {0}, {0}, {25}, {0} },
{ {0}, {0}, {25}, {0}, {0}, {0}, {25}, {0}, {0}, {0}, {25}, {0}, {0}, {0}, {25}, {0}, {0}, {0}, {25}, {0}, {0}, {0}, {25}, {0}, {25}, {25}, {1}, {1}, {0}, {0}, {25}, {0} },
{ {0}, {0}, {25}, {0}, {0}, {0}, {25}, {0}, {0}, {0}, {25}, {0}, {0}, {0}, {25}, {0}, {0}, {0}, {25}, {0}, {0}, {0}, {25}, {0}, {3}, {3}, {21}, {3}, {0}, {0}, {25}, {0} },
И так 3180 сцен
}
};
Почитай чонить за "рваные (jagged) массивы", да и захерачь себе такие же.
Для каждого типа прибора свой класс со своей логикой.
Да, так хотел сделать, но у меня для каждого прибора может быть минимум 16 вариантов сцен. получается для каждого прибора и на каждую сцену надо свою процедуру? Они у меня будут вызываться по логике, в зависимости от общей музыкальной картины.
Нужно или не нужно - это только тебе известно.
Не понимаю, пошто не поставить спицальный DMX контроллер и не купить программу управления с ПК.
Готовые DMX контроллеры в своей массе убогие в плане программирования
А я с помощью программы это все и делаю, красивые сцены. Потом все сцены сохраняю и читаю с помощью контроллера. Пульты и программы предполагают, что человек будет управлять и менять сцены. Моя задача это сделать в зависимости от звукового рисунка.
Готовые DMX контроллеры в своей массе убогие в плане программирования
Точно!
не совсем по теме, просто интересно - на чем вы собрались реализовывать такие массивы:
для информации - одна эта строчка занимает разом более 100Кбайт оперативки. Для сравнения - в Нано/Уно 2 кбайта. в Меге - 8К. в СТМ32 блюпилл - 20К и даже в ЕСП8266 - чуть более 80К
Куда вы собрались запихивать свои сцены по 100К?
и еще - повнимательнее с циклами. Когда перебираете массивы в Си - помните, что они индексируются с нуля. У вас в обоих циклах for выход за границу
Общее впечатление от темы - новичок, вчера начавший программировать - сразу хватается за профессиональный проект с огромными обьемами данных.
Просто совет - отработайте для начала небольшие наборы. Не 512 DMX устройств, а восемь... и не 3180 сцен, а 32... Ведь приемы работы с массивом arr[100500] ничем не отличаются от barr[16], а шансов накосячить в разы меньше
и еще - повнимательнее с циклами. Когда перебираете массивы в Си - помните, что они индексируются с нуля. У вас в обоих циклах for выход за границу
Общее впечатление от темы - новичок, вчера начавший программировать - сразу хватается за профессиональный проект с огромными обьемами данных.
Просто совет - отработайте для начала небольшие наборы. Не 512 DMX устройств, а восемь... и не 3180 сцен, а 32... Ведь приемы работы с массивом arr[100500] ничем не отличаются от barr[16], а шансов накосячить в разы меньше
Делаю все на esp32, во всех циклах у меня стоят -1, для того, чтобы не выйти за пределы массива.
По поводу того, что большие массивы, да, знаю, но хотел читать их с SD. Сейчас все работает, но для каждой сцены своя подпрограмма.
во всех циклах у меня стоят -1, для того, чтобы не выйти за пределы массива.
уверены?
вот ваш код
какой размер у dmxbuffer? случайно не 32?
зачем так? - это ж очень корявый код. Уберите из условия "<=", сделайте просто "<" - и никакие единицы прибавлять и убавлять не надо будет
во всех циклах у меня стоят -1, для того, чтобы не выйти за пределы массива.
уверены?
вот ваш код
какой размер у dmxbuffer? случайно не 32?
зачем так? - это ж очень корявый код. Уберите из условия "<=", сделайте просто "<" - и никакие единицы прибавлять и убавлять не надо будет
Согласен. Спасибо, очень ценное замечание. И теперь моя проблема решена?
теперь моя проблема решена?
это уж вам решать.
Для начала было бы неплохо сформулировать, в чем, собственно, проблема. Нередко в хорошей формулировке вопроса - уже содержится половина решения.
В первом сообщении я такой формулировки не вижу.
теперь моя проблема решена?
это уж вам решать.
Для начала было бы неплохо сформулировать, в чем, собственно, проблема. Нередко в хорошей формулировке вопроса - уже содержится половина решения.
В первом сообщении я такой формулировки не вижу.
Спасибо, большое. Все понял.