Как создать массив переменных Arduino

0

Как я могу создать массив переменных, таких как.....

int incColor, c0, c1, c2, c3, c4, c5 = 0;
int circleArray[11][9] = { {c5, c5, c5, c5, c5, c5, c5, c5, c5}, 
                             {c4, c4, c4, c4, c4, c4, c4, c4, c4}, 
                             {c4, c3, c3, c3, c3, c3, c3, c3, c4}, 
                             {c4, c3, c2, c2, c2, c2, c2, c3, c4}, 
                             {c4, c3, c2, c1, c1, c1, c2, c3, c4}, 
                             {c4, c3, c2, c1, c0, c1, c2, c3, c4}, 
                             {c4, c3, c2, c1, c1, c1, c2, c3, c4}, 
                             {c4, c3, c2, c2, c2, c2, c2, c3, c4}, 
                             {c4, c3, c3, c3, c3, c3, c3, c3, c4}, 
                             {c4, c4, c4, c4, c4, c4, c4, c4, c4}, 
                             {c5, c5, c5, c5, c5, c5, c5, c5, c5} };

Чтобы впоследствии в коде я смог обращаться с ними вот так...

void circle(uint16_t mode) 
{
  switch (mode)
  {
     case 0:
     c0 = random(255);
     break; 
     case 1:
     c0 = incColor;
     incColor++;
     break;
  }
  for (int x = 0; x < 11; x++)
  {
     for (int y = 0; y < 9; y++)
    {
       strip.setPixelColor(x, y, Wheel(circleArray[x][y]));
    } 
  }
  c5 = c4;
  c4 = c3;
  c3 = c2;
  c2 = c1;
  c1 = c0;

}

Код выше не работает, я тестировал как c5, так и circleArray [0] [0]

c5 = 34
circleArray[0][0] = 0

circleArray [0] [0] должен быть таким же, как c5 - это то, что я думал, но по какой-то причине значение не устанавливается...

Кто-нибудь знает, что я тут делаю неправильно?

~~~~~~~~~~~~~~ EDIT ~~~~~~~~~~~~~~~~~

Исправлена!! спасибо @sj0h за то, что помогли мне увидеть гораздо более легкое решение, поэтому теперь я могу это сделать...

int c[6] = {0, 0, 0, 0, 0, 0};    
int  circleArray[11][9] = {  {5, 5, 5, 5, 5, 5, 5, 5, 5},
                             {4, 4, 4, 4, 4, 4, 4, 4, 4}, 
                             {4, 3, 3, 3, 3, 3, 3, 3, 4}, 
                             {4, 3, 2, 2, 2, 2, 2, 3, 4}, 
                             {4, 3, 2, 1, 1, 1, 2, 3, 4}, 
                             {4, 3, 2, 1, 0, 1, 2, 3, 4}, 
                             {4, 3, 2, 1, 1, 1, 2, 3, 4}, 
                             {4, 3, 2, 2, 2, 2, 2, 3, 4}, 
                             {4, 3, 3, 3, 3, 3, 3, 3, 4}, 
                             {4, 4, 4, 4, 4, 4, 4, 4, 4}, 
                             {5, 5, 5, 5, 5, 5, 5, 5, 5} };

void circle(uint16_t mode) 
{
  switch (mode)
  {
     case 0:
     c[0] = random(255);
     break; 
     case 1:
     c[0] = incColor;
     incColor++;
     break;
  }
  for (int x = 0; x < 11; x++)
  {
     for (int y = 0; y < 9; y++)
    {
       strip.setPixelColor(x, y, Wheel(c[circleArray[x][y]]));
    } 
  }
  c[5] = c[4];
  c[4] = c[3];
  c[3] = c[2];
  c[2] = c[1];
  c[1] = c[0];

}

в приложение к реальной жизни....

Изображение 174551

Теги:
arrays
pointers
arduino

2 ответа

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

Ссылки могут делать то, что вы хотите:

int &circleArray[11][9] = ......

Это сделает circleArray массив ссылок, а не скопированных значений.


Изменить: выше не поддерживается стандартом, а поддержка зависит от компилятора.

Вместо этого используйте указатели.

int *circleArray[11][9] = {{&c5, &c5, .....

а затем измените все атрибуты circleArray как * circleArray [x] [y] вместо circleArray [x] [y].


Другой подход, который может быть более универсальным, заключается в том, чтобы сохранить индексы цветовых массивов в circleArray:

int incColor;
int cn[6] = {0,0,0,0,0,0};
int circleArray[11][9] = { {5,5,5,5,5,5,5,5,5},
                           {4,4 .....

Тогда c0 станет c [0], и вы получите доступ к значению массива как

cn[circleArray[x][y]]

вы также можете сделать circleArray uint8_t для сохранения некоторого пробела, поскольку все записи будут помещаться внутри байта.

  • 0
    Я попробовал это и * circleArray [11] [9], и я получил ошибку C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino/Print.h:63: note: size_t Print::print(long unsigned int, int) <near match>
  • 0
    Если вы используете * circleArray [11] [9], это приведет к аналогичной цели, но вам придется отменять ссылку на указатель каждый раз, когда вы обращаетесь к circleArray в качестве значения, помещая звезду впереди. Где была ошибка, когда вы использовали & circleArray?
Показать ещё 4 комментария
0

circleArray[0][0] не будет таким же, как c5, потому что при присваивании значение копируется из одной переменной в другую.

Для псевдонима одного места для нескольких переменных вы должны использовать указатели или ссылки.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню