Speichermangel PROGMEM String und Chars

Hallo, ich habe ein Projekt, wo der Speicher knapp wird...

ich habe bis jetzt einfach untereinander eine Ausgabe gepackt, was in lesbaren Text resultiert:

drawText(0, 0, "bla bla bla");

um das in den Programmspeicher zu backen habe ich also folgendes versucht:

const char zeile1[] PROGMEM = { "bla bla bla" };

Also den drawText angepast:

drawText(0, 0, char(zeile1));

die Ausgabe ist jetzt aber nur noch "149"

Also weiter getestet:

drawText(0, 0, String(zeile1));

Dort gibt es einen Kompilierfehler:

no known conversion for argument 3 from 'String' to 'uint8_t {aka unsigned char}'
exit status 1
Compilation error: no matching function for call to 'drawText(int, int, String)'

erlaubt ist wohl:

void drawText(int8_t x, int8_t y, char *txt, uint8_t space)
void drawText(int8_t x, int8_t y, const __FlashStringHelper txt, uint8_t space = 1)
void drawText(int8_t x, int8_t y, const __FlashStringHelper *txt_p, uint8_t space = 1)
void drawText(uint8_t x, uint8_t y, uint8_t num)

Ich dachte in "" geschriebener code wird immer als String interpretiert...
wie kann ich das also konvertieren, um die Funktion nutzen zu können?

In PROGMEM findest Du ein Beispiel.

Wenn Du damit nicht zurechtkommst, bitte nochmal fragen.

Möglicherweise genügt es aber auch, das F-Makro zu nutzen.

const __FlashStringHelper *txt_p deutet darauf hin, die Bibliothek ist für PROGMEM vorbereitet. Dazu müßte ich aber wissen, welche Du verwendest.

ok, habe es hin bekommen.

als erstes nur mit dem(um zu testen, ob die Conversion funktioniert, was sie auch tat):

char buffer[25] = {'b', 'l', 'a', ' ','b', 'l', 'a', ' ','b', 'l', 'a',};


drawText(0, 0, buffer);

dann also alles aus dem Beispiel genommen und dann auch für kommende Leser die LÖösung:

const char zeile1[] PROGMEM = { "bla bla bla" };
const char zeile2[] PROGMEM = { "bla bla bla" };
const char zeile3[] PROGMEM = { "bla bla bla" };
const char zeile4[] PROGMEM = { "bla bla bla" };
const char zeile5[] PROGMEM = { "bla bla bla" };
const char zeile6[] PROGMEM = { "bla bla bla" };
const char zeile7[] PROGMEM = { "bla bla bla" };
const char zeile8[] PROGMEM = { "bla bla bla" };
const char zeile9[] PROGMEM = { "bla bla bla" };
const char* const string_table[] PROGMEM = { zeile1, zeile2, zeile3, zeile4, zeile5, zeile6, zeile7, zeile8, zeile9 };

char buffer[25];




  drawText(0, 0, strcpy_P(buffer, (char*)pgm_read_word(&(string_table[i]))));

Vielen Dank für die zügige Hilfe

Gut!
Nur:
Etwas zu kompliziert :japanese_ogre:

using Pstring = const __FlashStringHelper*;

const char zeile1[] PROGMEM = { "bla bla bla" };
const char zeile2[] PROGMEM = { "bla bla blaj" };
const char zeile3[] PROGMEM = { "bla bla blaj" };
const char zeile4[] PROGMEM = { "bla bla blah" };
const char zeile5[] PROGMEM = { "bla bla bla1" };
const char zeile6[] PROGMEM = { "bla bla bla2" };
const char zeile7[] PROGMEM = { "bla bla bla3" };
const char zeile8[] PROGMEM = { "bla bla blad" };
const char zeile9[] PROGMEM = { "bla bla blag" };
const char* const string_table[] PROGMEM = { zeile1, zeile2, zeile3, zeile4, zeile5, zeile6, zeile7, zeile8, zeile9 };


void setup() 
{
  Serial.begin(9600);

  Serial.println(Pstring(pgm_read_ptr(&(string_table[5]))));


//  Pstring str = pgm_read_ptr(&(string_table[5]));
//  drawText(0, 0,str);
//  Serial.println(str);
}
void loop() 
{
}


This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.