Добрый день. Не могу понять, как решить данную задачу.
Имеется такой код...
В функцию Parse_Msg я передаю значение переменной по ссылке.
Данных переменных несколько и логика вывода комбинации сообщений одинакова.
Я могу создать несколько одинаковых функций и в каждую передавать разную переменную, для получения нужной комбинации сообщений, но это сильно утяжеляет код.
Подскажите, как сделать так, что бы я передавал дополнительную переменную в функцию, которая указывала бы на то, какой строковый массив использовать?
Например, функция выглядит так (void Parse_Msg(uint8_t& Message, uint8_t& Count)), где Count равен номеру необходимого строкового массива.
Если Count равен 10, значит FPSTR(Msg_10[0]);
Если Count равен 11, значит FPSTR(Msg_11[0]);
и. т.д.
Имеется такой код...
В функцию Parse_Msg я передаю значение переменной по ссылке.
Данных переменных несколько и логика вывода комбинации сообщений одинакова.
Я могу создать несколько одинаковых функций и в каждую передавать разную переменную, для получения нужной комбинации сообщений, но это сильно утяжеляет код.
Подскажите, как сделать так, что бы я передавал дополнительную переменную в функцию, которая указывала бы на то, какой строковый массив использовать?
Например, функция выглядит так (void Parse_Msg(uint8_t& Message, uint8_t& Count)), где Count равен номеру необходимого строкового массива.
Если Count равен 10, значит FPSTR(Msg_10[0]);
Если Count равен 11, значит FPSTR(Msg_11[0]);
и. т.д.
C++:
#define FPSTR(pstr) (const __FlashStringHelper*)(pstr) // Преобразование PGM-строк
const char Msg_10_1[] PROGMEM = "Ворота открыты";
const char Msg_10_2[] PROGMEM = "Ворота закрыты";
const char Msg_10_3[] PROGMEM = "Нет связи с пультом";
const char Msg_10_4[] PROGMEM = "Отсуствие обратной связи с мотором";
const char Msg_10_5[] PROGMEM = "Ворота открыты не полностью";
const char Msg_10_6[] PROGMEM = "Ворота закрыты не полностью";
const char Msg_10_7[] PROGMEM = "Включение световой индикации";
const char Msg_10_8[] PROGMEM = "Световая индикация выключена";
const char* const Msg_10[] PROGMEM = { Msg_10_1, Msg_10_2, Msg_10_3, Msg_10_4, Msg_10_5, Msg_10_6, Msg_10_7, Msg_10_8 };
const char Msg_11_1[] PROGMEM = "Ролета 1 открыта";
const char Msg_11_2[] PROGMEM = "Ролета 1 закрыта";
const char Msg_11_3[] PROGMEM = "Ролета 2 открыта";
const char Msg_11_4[] PROGMEM = "Ролета 2 закрыта";
const char Msg_11_5[] PROGMEM = "Ролета 3 открыта";
const char Msg_11_6[] PROGMEM = "Ролета 3 закрыта";
const char Msg_11_7[] PROGMEM = "Ролета 4 открыта";
const char Msg_11_8[] PROGMEM = "Ролета 4 закрыта";
const char* const Msg_11[] PROGMEM = { Msg_11_1, Msg_11_2, Msg_11_3, Msg_11_4, Msg_11_5, Msg_11_6, Msg_11_7, Msg_11_8 };
String Delimiter = " *** "; // Разделитель
uint8_t NumberOfMistakes = 0; // Количество сообщений
void Parse_Msg(uint8_t& Message) { // Передача с помощью указателя
String Message_Count = "";
switch (Message) {
case 1:
NumberOfMistakes += 1;
Message_Count = FPSTR(Msg_11[0]);
break;
case 2:
NumberOfMistakes += 1;
Message_Count = FPSTR(Msg_11[1]);
break;
case 3:
NumberOfMistakes += 2;
Message_Count = FPSTR(Msg_11[0]);
Message_Count += Delimiter;
Message_Count += FPSTR(Msg_11[3]);
break;
case 4:
NumberOfMistakes += 2;
Message_Count = FPSTR(Msg_11[1]);
Message_Count += Delimiter;
Message_Count += FPSTR(Msg_11[3]);
break;
//default:
//Serial.println("СООБЩЕНИЙ НЕТ");
}