Заполнения массивов

Тема в разделе "Arduino & Shields", создана пользователем Hollligan, 19 фев 2016.

Метки:
  1. Hollligan

    Hollligan Нерд

    Добрый день, столкнулся с проблемой заполнения массивов.

    Код (C++):
    #include <IRremote.h>

    IRsend irsend;

    void setup()
    {

    }

    void loop() {

      irsendRawData("01");
      delay(5000);
      irsendRawData("02");
      delay(5000);
    }

    void irsendRawData(String command) {

      unsigned int  RawData[179];
     
      if (command = "01") {
        //PowerOn
        unsigned int  RawData[179] = {3200, 1550, 400, 350, 450, 1150, 450, 350, 450, 350, 400, 1150, 450, 350, 450, 1150, 450, 350, 400, 400, 400, 1150, 450, 1150, 450, 1150, 400, 400, 400, 1150, 450, 350, 450, 1150, 450, 1150, 400, 1150, 450, 350, 450, 350, 450, 350, 400, 400, 400, 1150, 450, 1150, 450, 350, 450, 1150, 400, 1150, 450, 350, 450, 350, 450, 1150, 400, 400, 400, 350, 450, 1150, 450, 350, 450, 350, 400, 1200, 400, 1150, 450, 350, 450, 1150, 400, 1200, 400, 1150, 450, 1150, 400, 1200, 400, 1150, 450, 1150, 450, 1150, 400, 1150, 450, 1150, 450, 350, 450, 350, 400, 400, 400, 350, 450, 350, 450, 350, 450, 350, 450, 350, 450, 1150, 400, 1150, 450, 1150, 450, 1150, 400, 400, 400, 1150, 450, 1150, 450, 1150, 400, 350, 450, 350, 450, 350, 450, 350, 450, 1150, 400, 400, 400, 350, 450, 350, 450, 1150, 450, 1150, 400, 1150, 450, 350, 450, 350, 450, 350, 450, 350, 400, 1150, 450, 350, 450, 350, 450, 350, 450, 1150, 400, 1150, 450, 1150, 450, 1150, 400, 400, 400};
       
      }
      else if (command = "02") {
        //PowerOff
        unsigned int  RawData[179] = {3200, 1550, 450, 350, 450, 1150, 400, 400, 400, 350, 450, 1150, 450, 350, 450, 1150, 400, 350, 450, 350, 450, 1150, 450, 1150, 400, 1150, 450, 350, 450, 1150, 450, 350, 400, 1200, 400, 1150, 450, 1150, 450, 350, 400, 400, 400, 350, 450, 350, 450, 1150, 450, 1150, 400, 350, 450, 1150, 450, 1150, 450, 350, 400, 400, 400, 1150, 450, 350, 450, 350, 450, 1150, 400, 400, 400, 350, 450, 1150, 450, 1150, 400, 400, 400, 1150, 450, 1150, 450, 1150, 400, 1150, 450, 1150, 450, 1150, 450, 1150, 400, 1150, 450, 1150, 450, 1150, 400, 350, 450, 350, 450, 350, 450, 350, 450, 350, 450, 350, 400, 400, 400, 350, 450, 1150, 450, 1150, 400, 1200, 400, 1150, 450, 350, 450, 1150, 400, 1150, 450, 1150, 450, 350, 450, 350, 450, 350, 400, 400, 400, 1150, 450, 350, 450, 350, 450, 350, 400, 1200, 400, 1150, 450, 1150, 450, 1150, 400, 350, 450, 350, 450, 350, 450, 1150, 450, 350, 400, 400, 400, 350, 450, 350, 450, 1150, 450, 1150, 400, 1150, 450, 350, 450};
      }
     
      irsend.sendRaw(RawData, sizeof(RawData) / sizeof(RawData[0]), 38);

    }
    Насколько я понимаю sendRaw() отправляет пустой массив. Как необходимо правильно написать код?
     
  2. Unixon

    Unixon Оракул Модератор

    Правильно - не возвращать массив.
     
  3. Unixon

    Unixon Оракул Модератор

    У вас две ошибки, первая языковая, вторая архитектурная.

    Первая ошибка состоит в том, что вы объявили переменную внутри одной области видимости "if {}", а пытаетесь пользоваться ей уже после выхода из это области (после "}"), где она уже не существует.

    Вторая ошибка состоит в том, что вы возвращаете константный массив через его копирование. Этого не стоит делать. Лучше объявить константы в глобальной области видимости в виде 2-мерного массива, а возвращать его номер, а не содержимое.
     
    Последнее редактирование: 19 фев 2016
  4. Unixon

    Unixon Оракул Модератор

    Пример:

    Код (C++):

    const unsigned int a[2][10] = { {0,1,2,3,4,5,6,7,8,9}, {9,8,7,6,5,4,3,2,1,0} };

    int n = -1;
    if (x)
    {
      n = 0;
    }
    else
    {
      n = 1;
    }
    f(&a[n],...);
     
     
    Hollligan нравится это.
  5. Hollligan

    Hollligan Нерд

    Спасибо, то что нужно!
    По логике я понимаю что тот вариант который я изначально написал не верный, но синтаксис с++ пока еще не освоил в должном объеме.