Как объединить числа из двух разных массивов в один массив? - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть код, в котором я генерирую случайное число Colums = numCols и случайное число Rows = numRows. Кратное число nomRows и numCols = numCells. Я хочу покрасить каждую ячейку другим цветом, я знаю общее количество ячеек, которые у меня есть, потому что это numCells. Поэтому у меня есть массив «colors», который имеет 6 значений. Каждое число в этом массиве представляет и сколько раз у меня есть этот цвет в этом массиве. У меня есть цикл, который генерирует случайное число для каждого цвета, но всегда следя за тем, чтобы сумма чисел в массиве никогда не превышала NumCells. Вы не можете иметь всего 23 значения для цвета и только 10 ячеек, чтобы соответствовать его. Теперь это работает нормально, общее количество чисел в массиве никогда не превышает numCells.

Итак, у меня есть массив colors [], который содержит 6 чисел, я хочу перенести этот массив в mysound2 [], и после того, как я нажму его, создайте еще один цикл, который добавит еще 2 числа в этот массив, чтобы в итоге получить массив mysound2 [], который содержит общее количество 8 чисел.

Но я не могу заставить его работать, либо я получаю сообщение об ошибке: недопустимые типы 'int [8] [int [6]]' для подстрочного индекса массива, который, я полагаю, arduino не радует, что в массив из 8 я только пытаюсь добавить 6 цифр.

Или, если я попробую что-то еще, код выдаст 0,0,0.

Пожалуйста, как я могу вставить цвета [] в mysoun2 [] и добавить еще 2 случайных числа?

// CODE FOR COLORS
``` int AnalogPin0 = A0; //Declare an integer variable, hooked up to analog pin 0
``` int AnalogPin1 = A1; //Declare an integer variable, hooked up to analog pin 1

void setup() {
  Serial.begin(9600); //Begin Serial Communication with a baud rate of 9600
  randomSeed(analogRead(0));

}

void loop() {
// 1)Gray, 2)White, 3)Yellow, 4)Blue, 5)Black, 6)Red

int numCols1  = random(1,4);
int numCols2  = random(2,5);
int numCols   = numCols1 + numCols2;

int numRows1  = random(2,5);
int numRows2  = random(2,6);
int numRows   = numRows1 + numRows2;

int numCells  = numCols * numRows;
int colors[]  = {5,3,2,1,0,0};
int numAlloc  = colors[0] + colors[1] + colors[2] + colors[3] + colors[4] + colors[5];


for (int i=0; i<numCells - numAlloc; i++)
{
  int color = random(0,7);
  color[colors]++;
}



  /*The Serial.print() function does not execute a "return" or a space
      Also, the "," character is essential for parsing the values,
      The comma is not necessary after the last variable.*/
Serial.print(colors [0]);     
Serial.print(",");
Serial.print(numCols);
Serial.print(",");
Serial.print(numRows);
Serial.print(",");
//Serial.print(numCells);
//Serial.print(",");
Serial.println();
delay(5000); // For illustration purposes only. This will slow down your program if not removed 
}


//CODE FOR ADDING 8 NUMBERS INTO ONE ARRAY WITH 2 LOOPS
# define Parameters 8
int mysound2[Parameters];
int randNumber =0;

void setup() {
   Serial.begin(9600);
     randomSeed(analogRead(0));
    for (int thisPin = 0; thisPin < Parameters-2; thisPin++)  {

    randNumber = random(1, 100); // generates between 0 and 127

    mysound2[thisPin]= randNumber;   

  }
    for (int thisPin = Parameters-2; thisPin < Parameters; thisPin++)  {

    randNumber = random(100, 200); // generates between 0 and 127

    mysound2[thisPin]= randNumber;   

  }
}

void loop() {
    for (int thisPin = 0; thisPin < Parameters; thisPin++)  {
     Serial.println(mysound2[thisPin]);  
     delay(5000);
}
}


//ME TRYING TO COMBINE THE TWO CODES
// 1)Gray, 2)White, 3)Yellow, 4)Blue, 5)Black, 6)Red

# define Parameters 8

int numCols1  = random(1,4);
int numCols2  = random(2,5);
int numCols   = numCols1 + numCols2;

int numRows1  = random(2,5);
int numRows2  = random(2,6);
int numRows   = numRows1 + numRows2;

int numCells  = numCols * numRows;
int colors[]  = {5,3,2,1,0,0};
int numAlloc  = colors[0] + colors[1] + colors[2] + colors[3] + colors[4] + colors[5];
int color     = 0;

int mysound1[Parameters];
int randNumber1 =0;

void setup() {
   Serial.begin(9600);
     randomSeed(analogRead(0));
    for (int thisPin = 0; thisPin < Parameters-2; thisPin++)  
    {
      for (int i=0; i<numCells - numAlloc; i++)
      {
        int color = random(0,6);
        color[colors]++;
        }
       mysound1[color];
      }

  for (int thisPin = Parameters-2; thisPin < Parameters; thisPin++)  {

    randNumber1 = random(100, 200); // generates between 0 and 127

    mysound1[thisPin]= randNumber1;   
  }
}

void loop() {
    for (int thisPin = 0; thisPin < Parameters; thisPin++)  {
     Serial.println(mysound1[color]);  
     delay(2000);
    }
}

1 Ответ

0 голосов
/ 15 апреля 2019

Я понимаю, что вы хотите скопировать массив в другой массив.Вы можете сделать это с помощью такой функции:

void copyArray(int* source, int* destination, int length) {
    for (int i = 0; i < length; i++) {
        *destination++ = *source++;
    }
}

Итак, если вы хотите скопировать 6 элементов из colors в mysound2, copyArray(colors, mysound2, 6); сделает это.

Если вы хотите добавить еще 2 элемента, просто сделайте что-то вроде этого.

mysound2[6] = randNumber1;
mysound2[7] = randNumber2;

Редактировать: В разделе комментариев вы упомянули, что хотите объединить два массива в один.Такая функция будет делать это.

void copyArray(int* source, int* destination, int destStartIndex, int len) {
  for (int i = 0; i < len; i++) {
        destination[destStartIndex + i] = *source++;
    }
}

Приведенный ниже код скопирует colors в первые 6 байтов mysound2 и скопирует thisPin в следующие 2 байта mysound2.

copyArray(colors, mysound2, 0, 6);
copyArray(thisPin, mysound2, 6, 2);
...