Присвоение переменных массива переменным int
Мне нужно управлять тысячами светодиодов RGB. Чтобы создавать анимацию, я хочу назначить номера светодиодов (адресуемые светодиодные ленты) массивам. Например, floor[2]room[14]=106
106 — это количество светодиодов, много этажей и комнат. Я хочу изменить номера этажей или комнат, таким образом я сделаю анимацию.
Можно сказать, что это монитор размером 92х30 пикселей. Я пытался создать список этажей и комнат, но не смог.
Я новичок в программировании, помогите, пожалуйста!
Решено таким способом #define LEDNO(FLOOR, ROOM) ((ROOM) + (FLOOR * 92))
@Alper, 👍0
Обсуждение2 ответа
Лучший ответ:
Вам действительно не нужно вести список.
Просто рассчитайте индекс светодиода по местоположению:
int room = 14;
int floor = 2;
const int rooms = 92;
int led = room + (floor * rooms);
То есть каждый этаж ниже текущего (этажи и комнаты считаются от 0) представляет собой полный ряд комнат (92 * этажа), и на этом этаже есть «комнатные» дополнительные комнаты, которые можно добавить к нему.
р>Вы можете создать макрос:
#define LEDNO(FLOOR, ROOM) ((ROOM) + (FLOOR * 92))
Тогда ваш номер светодиода:
int led = LEDNO(2, 14);
Вот пример вашего кода:
void floorsup(){
FastLED.setBrightness(brightness);
for(int a=1;a<255;a+=40){
for (int floor = 0; floor < 30; floor++) {
for (int room = 0; room < 92; room++) {
leds[LEDNO(floor, room)].setHSV(a, 255, 255);
}
FastLED.show();
delay(300);
}
for (int floor = 0; floor < 30; floor++) {
for (int room = 0; room < 92; room++) {
leds2[LEDNO(floor, room)].setHSV(a, 255, 255);
}
FastLED.show();
delay(300);
}
for (int floor = 0; floor < 30; floor++) {
for (int room = 0; room < 92; room++) {
leds3[LEDNO(floor, room)].setHSV(a, 255, 255);
}
FastLED.show();
delay(300);
}
}
}
но таким образом я не могу зажечь много светодиодов одновременно, @Alper
Какое это имеет отношение к тому, сколько светодиодов можно зажечь одновременно? Это просто дает вам номер светодиода. Что вы с этим будете делать, зависит от вас. Я бы использовал его для установки цвета светодиода в библиотеке NeoPixel. Я думаю, вы не совсем понимаете, чего именно хотите этим добиться., @Majenko
да, но если бы я захотел осветить весь четвертый этаж, было бы легко присвоить им номер., @Alper
У них уже есть номер. Что вы хотите «назначить»?, @Majenko
окей, это долго, но я поделюсь своим кодом, вы поймете, о чем я, @Alper
Вам абсолютно не нужен массив для этого кода. Большую часть его можно заменить парой циклов и макросом, который я показываю выше., @Majenko
Я использовал кусок вашего кода (самую длинную и бесполезную часть), чтобы продемонстрировать, как вы его будете использовать. Теперь код доступен для чтения., @Majenko
аааа теперь я понял! да, это действительно такой позор, я знаю, я делаю это в спешке. Позвольте мне обязать больше вашего кода. В первый раз я думал, что буду идентифицировать все числа с помощью int., @Alper
ох чувак, ты просто спасаешь меня от множества работ :D теперь мне не нужно калибровать светодиоды с помощью Python, я видел от другого программиста из моей компании в другом проекте с массивом, поэтому я подумал, что мне следует сделать именно так. Но по вашему это избавляет меня от многих работ.., @Alper
Извините, я слишком много говорю, но у меня есть еще один вопрос. Как я могу преобразовать любое изображение в массивы цветовых кодов RGB? Например, из загруженного изображения я получу цветовые коды RGB для 92x30 пикселей. Возможно ли это с помощью Python?, @Alper
Я понятия не имею о питоне. Если бы я писал сценарий, я бы сделал это на PHP, поскольку в нем есть функции обработки изображений, однако в наши дни мне это не нужно, поскольку в последней бета-версии UECIDE все это встроено., @Majenko
Что-то вроде этого будет работать:
#define MAX_FLOORS 92
#define MAX_ROOMS 30
struct floor_str {
int Room[MAX_ROOMS];
} Floor[MAX_FLOORS];
Тогда вы получите доступ к отдельному адресу светодиода, например:
Этаж[2].Комната[14] = 106;
да, я могу взять все светодиодные номера из Python в этом формате, но я не знал, как их назначить. Спасибо!, @Alper
кстати, это должно быть похоже на structfloor_str {
внутренняя комната[MAX_ROOMS];
этаж[MAX_FLOORS]; }
?, @Alper
Нет. Вы создаете структуру комнат как массив, а массив из них — как этажи., @Majenko
Я уже нашел другой способ, но мне бы хотелось изучить и ваш метод. Не могли бы вы еще раз проверить свой код? это дает ошибку., @Alper
Синтаксис правильный, но слово «пол», похоже, уже определено как нечто другое. Простое решение — использовать вместо этого «Пол». (отредактировал решение выше), @Jeff Wahaus
- Некоторые переменные не сохраняют свои значения при выходе из цикла while?
- Использование переменной для индексации массива
- Условное присвоение массива
- Как объявить массив переменного размера (глобально)
- Как получить тип данных переменной?
- Преобразование long в массив символов и обратно
- Возможно ли иметь массив массивов int?
- Замена нескольких выводов pinMode() и digitalWrite() на массив
Расположены ли светодиоды в порядке этаж/комната? То есть, будет ли этаж[2]комната[15] иметь светодиод 107?, @Majenko
да, именно. На каждом этаже 92 RGB, а этажей 30., @Alper
У вашего Arduino более 8 КБ или ОЗУ, верно?, @Edgar Bonet
да, я использую Arduino из-за., @Alper
Я уже контролирую все светодиоды, но не смог их откалибровать., @Alper
похоже, вам нужно проверить этих ребят (и подобные проекты) https://makezine.com/2012/11/18/worlds-biggest-led-cube/, @MichaelT
светодиоды заказаны? Светодиод номер 1 в первой комнате на первом этаже, номер 2 во второй комнате на первом этаже и т. д., а последний номер в последней комнате на последнем этаже? или отображение сложнее?, @Juraj
Светодиоды заказываются именно так, как вы сказали, Юрай., @Alper
и на каждом этаже одинаковое количество комнат?, @Juraj
да, 92 пикселя на каждом этаже, @Alper