const char* text[] PROGMEM =
{
"String 1",
"String 2",
"String 3"
};
I get error:
error: variable 'text' must be const in order to be put into read-only section.....
I searched this problem and some people say you have to put another “const” before the variable name?
Doing the above solution gives me 102% dynamic memory used?
bateske
(Kevin)
June 6, 2017, 3:57am
#2
I ran into this a while ago, the solution is here half way down the page on arduino:
https://playground.arduino.cc/Main/PROGMEM
I never actually got it to implement correctly so good luck!
2 Likes
You can always do the following.
const char* text[] PROGMEM = "String 1String 2String 3";
and then just render the text at an offset.
1 Like
This is how we did it in Harambe’s revenge:
const char storyLine1[] PROGMEM = "Everyone lost a hero";
const char storyLine2[] PROGMEM = "the day Harambe";
const char storyLine3[] PROGMEM = "died.";
const char storyLine4[] PROGMEM = "";
const char storyLine5[] PROGMEM = "Some thought it was";
const char storyLine6[] PROGMEM = "unfair.";
const char storyLine7[] PROGMEM = "Others took action!";
const char storyLine9[] PROGMEM = "In a far corner of";
const char storyLine10[] PROGMEM = "the world a plan was";
const char storyLine11[] PROGMEM = "hatched to enable...";
const char * const storyLines[] PROGMEM =
{
storyLine1,
storyLine2,
storyLine3,
storyLine4,
storyLine5,
storyLine6,
storyLine4,
storyLine7,
storyLine4,
storyLine9,
storyLine10,
storyLine11
};
#define STORYLINES 12
And this is how we used the storyLines array:
char tBuffer[22];
arduboy.setCursor((WIDTH/2)-((strlen_P((char*)pgm_read_word(&(storyLines[idx])))*6)/2),arduboy.getCursorY());
arduboy.println(strcpy_P(tBuffer, (char*)pgm_read_word(&(storyLines[idx]))));
Note the size of the buffer. We could only fit 21 chars on a line using the smallest character size so each line is less than or equal to 21 chars. The 22 is to include the \x00 termination character.
it should be possible to do something like:
#define STORYLINES sizeof(storyLines)/sizeof(const char * )
To automatically calculate the number of lines so you don’t have to manually count. Was in a rush when I wrote the code and was having issues with automatically calculating so I just counted them.
We used a number of text arrays. Check out the full source if you need more examples.
5 Likes
remove the * since it’s not a pointer array.
1 Like
Did not work
For some reason I had success with this
const String text PROGMEM = {"String 1String 2String 3"};
MLXXXp
(Scott)
June 7, 2017, 12:49pm
#8
I think the following guide shows how to do what you want:
http://www.nongnu.org/avr-libc/user-manual/pgmspace.html
2 Likes
Yeah sorry, i was giving an example not writing syntactically correct code, should have mentioned that
2 Likes
Pharap
(Pharap)
June 10, 2017, 10:12pm
#10
MLXXXp
(Scott)
June 11, 2017, 2:47am
#11
@Pharap , That’s just a reformatted version of what’s in the link I posted above.
1 Like