Добрый день, столкнулся с проблемой заполнения массивов. Код (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() отправляет пустой массив. Как необходимо правильно написать код?
У вас две ошибки, первая языковая, вторая архитектурная. Первая ошибка состоит в том, что вы объявили переменную внутри одной области видимости "if {}", а пытаетесь пользоваться ей уже после выхода из это области (после "}"), где она уже не существует. Вторая ошибка состоит в том, что вы возвращаете константный массив через его копирование. Этого не стоит делать. Лучше объявить константы в глобальной области видимости в виде 2-мерного массива, а возвращать его номер, а не содержимое.
Пример: Код (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],...);
Спасибо, то что нужно! По логике я понимаю что тот вариант который я изначально написал не верный, но синтаксис с++ пока еще не освоил в должном объеме.