Hallo zusammen,
ich wollte nun noch zusätzlich ein OLED bei mir einbauen.
Leider schein die Adafruit_SSD1306 Library extrem groß zu sein. Bei mir werden dadurch 50% des globalen Speichers benutzt. Ist dies normal?
gibt es eine Möglichkeit dies zu verkleinern?
Ich wollte eigentlich nur ein wenig Text als Debug auf dem OLED ausgeben.
Grüße
Alex
Versuch mal UTFT von Henning Karlson. Dort gibt es in den Unterlagen auch eine Anleitung, wie du Speicher einsparen kannst (memorysaver o.ä.)
Es ist auch sehr hilfreich zu lernen wie man mit PROGMEM umgeht. Erst mal landen alle String Konstanten im RAM. Mit ein paar Kniffen kann man die aber im Flash lassen
Bei print()/println() gibt es da das F() Makro:
Serial.println(F("String im Flash"));
Aber nicht alle Display Klassen sind von Print abgeleitet (UTFT z.B. nicht).
Wenn man das F() Makro nicht verwenden kann, geht das:
const int STRING_BUFFER_SIZE = 21; //Größe nach Bedarf anpassen!
char string_buffer[STRING_BUFFER_SIZE];
#define P(str) strcpy_P(string_buffer, PSTR(str))
P() kann man dann wie F() verwenden, aber für alle möglichen Funktionen die einen C String verlangen. Das Makro kopiert dann den String aus dem Flash in das Array. Das braucht einmal etwas RAM für das Array, aber wenn man z.B. 40 Bytes Text ausgibt, hat man schon etwas gespart.
Man kann auch Strings Byte für Byte aus dem Flash auslesen:
void setup()
{
Serial.begin(9600);
print(PSTR("String im Flash\n"));
print(PSTR("Test\n"));
}
void loop()
{
}
void print(const char* str)
{
char c = pgm_read_byte(str++);
while (c)
{
Serial.print(c); //hier statt dessen Byte auf das Display schreiben
c = pgm_read_byte(str++);
}
}
Dann wird gar kein RAM verbraucht
Die Funktion kann man auch so schreiben, dass auch Display-Koordinaten übergeben werden