Присвоение переменных массива переменным int

Мне нужно управлять тысячами светодиодов RGB. Чтобы создавать анимацию, я хочу назначить номера светодиодов (адресуемые светодиодные ленты) массивам. Например, floor[2]room[14]=106 106 — это количество светодиодов, много этажей и комнат. Я хочу изменить номера этажей или комнат, таким образом я сделаю анимацию. Можно сказать, что это монитор размером 92х30 пикселей. Я пытался создать список этажей и комнат, но не смог. Я новичок в программировании, помогите, пожалуйста!

Решено таким способом #define LEDNO(FLOOR, ROOM) ((ROOM) + (FLOOR * 92))

, 👍0

Обсуждение

Расположены ли светодиоды в порядке этаж/комната? То есть, будет ли этаж[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


2 ответа


Лучший ответ:

4

Вам действительно не нужно вести список.

Просто рассчитайте индекс светодиода по местоположению:

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


1

Что-то вроде этого будет работать:

#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