Конкатенация строк в PROGMEM для Arduino UNO

Я пытаюсь создать список имен звуковых файлов для воспроизведения через WAV-щит Adafruit на Arduino UNO. Поскольку эти имена файлов никогда не изменятся, и у меня заканчивается sRam, я хотел бы сохранить их в PROGMEM, но получаю ошибку:

invalid operands of types 'const char*' and 'const char [5]'
to binary 'operator+'

Разве я не могу объединить строки в PROGMEM? Я не понимаю почему.

for (int i = 1; i < 19; ++i)
{
const char soundList[i] PROGMEM = "Track" + i + ".WAV";
return soundList;
}

Также я испытываю трудности с чтением волновых файлов из soundList?

pgm_read_word(&(soundList[i])));

какие-нибудь слова мудрости?

0

Решение

for цикл является операцией во время выполнения. Вы не можете выполнять во время выполнения операции, которые назначают PROGMEM переменная, поскольку переменная будет храниться во флэш-памяти (только для чтения во время выполнения).

Но поскольку единственная переменная часть — это число, сохраните две другие части во флэш-памяти и создайте имя файла во время выполнения.

#define FILEPREFIXLEN 5
char fileprefix[] PROGMEM = "Track";
#define FILESUFFIXLEN 4
char filesuffix[] PROGMEM = ".WAV";
#define FILEMIDLEN 2

...

char filename[FILEPREFIXLEN + FILEMIDLEN + FILESUFFIXLEN + 1];
// Read fileprefix into filename, append number, append filesuffix
0

Другие решения


По вопросам рекламы [email protected]